MAC使用MAMP构建自签名HTTPS环境

阅读:357 2019-03-19 14:43:44 来源:新网

自建证书配置https服务器

sep25,2015|web|4308hits

1、写这篇博客的初衷是因为最近ios9出来了,苹果官方默认要求使用https,所以自己想整一个https服务器,也想好好了解一下https通信,也知道了https其实就是在http的基础上加上了ssl/tls。具体想了解ssl/tls原理的请浏览ssl/tls协议运行机制的概述和ssl/tls原理详解。中途看了很多博客,也花了不少时间,所以想记录一些东西。

2、这篇博客的内容主要是讲升级openssl、如何自己创建证书、配置证书到服务器和自建ca。其中对证书不太了解的,可以看数字证书及ca的扫盲介绍这篇文章。本篇博客其中第2步和第3步已经重复,只需要选择其中一步操作就可以搭建https服务器,当然搭建都是不受信任的,如果是架设网站还是需要到权威的ca机构申请证书。本来还有生成ios客户端的证书和使用证书连接服务器相关的内容,由于篇幅的原因就把它放在下一篇吧。

3、本人使用了mac10.10.5和ubuntu14.04.1进行配置搭建,本篇博客主要以unbuntu14.04.1系统为主。而本人这个ubuntu14.04.1是阿里云一键安装的,而且没有更改里面的服务器设置,所以诸多的配置可能与一般linux系统不太相同(与我电脑上的linuxmint就很大不同)。不过,我会在最后说明一下mac和linux配置一些不同的地方,其实都是一些相关路径的不同。当然,有可能你的apache安装路径与我说的几种路径都不同,没关系,对照着修改也应该没什么问题。

首先,查看下当前设备的openssl版本,如果版本在openssl1.0.1g以上,请略过

opensslversion-a

#openssl1.0.1f6jan2014

如果是处于1.0.1-1.0.1f的版本,那就赶快升级到1.0.1g版本以上吧!因为这些版本存在漏洞,详情请见关于openssl“心脏出血”漏洞的分析

从上面信息可以看出我们的系统版本是1.0.1f,openssl需要升级,那我们先来下载源代码

wgethttp://www.openssl.org/source/openssl-1.0.1g.tar.gz

下载完之后,解压并进行安装

tar-zxvfopenssl-1.0.1g.tar.gz

cdopenssl-1.0.1g

./configsharedzlib

make&&makeinstall

安装的过程中,碰到了一个问题make:*[install_docs]error255解决这个问题请使用makeinstall_sw安装,详情见https://github.com/openssl/openssl/issues/57

随后,进行相关的设置

#修改历史的openssl文件设置备份

mv/usr/bin/openssl/usr/bin/openssl.old

mv/usr/include/openssl/usr/include/openssl.old

#设置软连接使其使用新的openssl版本刚刚安装的openssl默认安装在/usr/local/ssl

ln-s/usr/local/ssl/bin/openssl/usr/bin/openssl

ln-s/usr/local/ssl/include/openssl/usr/include/openssl

#更新动态链接库数据

echo"/usr/local/ssl/lib">>/etc/ld.so.conf

ldconfig-v

最后查看一下版本

opensslversion

openssl1.0.1g7apr2014

1.0.1g版本安装成功

首先,生成私钥,创建请求证书,使用私钥对证书进行签名

生成私钥opensslgenrsa-des3-outprivate.key2048-des3代表加上了加密,后面的2048是代表生成的密钥的位数,1024已经不是很安全,详情请见互联网全站https的时代已经到来

生成证书请求opensslreq-new-keyprivate.key-outserver.csr这一步需要填写一些信息,其中commonname(e.g.serverfqdnoryourname)[]这个需要填写你的域名或服务器地址。

生成服务器的私钥,去除密钥口令opensslrsa-inprivate.key-outserver.key

使用私钥为证书请求签名,生成给服务器签署的证书,格式是x509的pem格式opensslx509-req-inserver.csr-outserver.crt-outformpem-signkeyserver.key-days3650-outformpem指定证书生成的格式,默认是pem,所以这个命令也可以写作成sudoopensslx509-req-inserver.csr-outserver.crt-signkeyserver.key-days3650。

将证书copy到apache配置路径下

sudomkdir/alidata/server/httpd/conf/ssl

cpserver.key/alidata/server/httpd/conf/ssl/server.key

cpserver.crt/alidata/server/httpd/conf/ssl/server.crt

其次,配置apache服务器

编辑/alidata/server/httpd/conf/httpd.conf文件

#loadmodulessl_modulemodules/mod_ssl.so

#loadmodulesocache_shmcb_modulemodules/mod_socache_shmcb.so

#includeconf/extra/httpd-ssl.conf

将这三行前面的#去掉

编辑/alidata/server/httpd/conf/extra/httpd-ssl.conf文件,找到sslcertificatefile、sslcertificatekeyfile,修改它们两对应的文件

sslcertificatefile"/alidata/server/httpd/conf/ssl/server.crt"

sslcertificatekeyfile"/alidata/server/httpd/conf/ssl/server.key"

编辑/alidata/server/httpd/conf/vhosts/phpwind.conf文件,这里我没有更改阿里云的配置,如果你不是阿里云服务器,找到对应的httpd/conf/extra/httpd-vhosts.conf文件进行修改。这个文件我主要加了下面的内容:

sslcertificatefile/alidata/server/httpd/conf/ssl/server.crt

sslcertificatekeyfile/alidata/server/httpd/conf/ssl/server.key

servername182.92.5.161

documentroot/alidata/www

最后,咱们重启apache服务器,输入链接查看是否配置成功。

第一步、使用ca.sh创建ca根证书

修改openssl的配置文件sudovim/usr/local/ssl/openssl.cnf,修改default_bits=1024为default_bits=2048,使其openssl加密使用2048位,原因前面已经说过。

随后创建一个目录,并且将生成ca证书的脚本ca.sh复制到这个目录

mkdirca

cdca

cp/usr/local/ssl/misc/ca.shca.sh

ca.sh这个脚本如果找不到,可以使用opensslversion-a查看openssl对应的目录,而ca.sh一般就在这个目录的子目录misc目录下。

之后执行./ca.sh-newca命令ca.sh会使用/usr/local/ssl/openssl.cnf中的配置来创建私钥和证书,这正是我们第一步为啥需要修改这个文件的原因。

创建ca证书过程中,不输入信息,直接回车,填写加密私钥的密码和生成ca证书的相关信息。

创建完之后会生成democa目录。这个目录有

cacert.pemcertsindex.txtindex.txt.oldprivate

careq.pemcrlindex.txt.attrnewcertsserial

其中cacert.pem是ca的证书,private存放ca的私钥,newcerts存放ca签名的备份。到这里,我们的ca已经建好了,下面我们可以通过ca来对我们的证书进行签名了。

第二步、使用ca根证书为服务器证书签名

#生成私钥

sudoopensslgenrsa-des3-outprivate.key2048

#生成证书请求

sudoopensslreq-new-keyprivate.key-outserver.csr

#生成服务器的私钥,去除密钥口令

sudoopensslrsa-inprivate.key-outserver.key

#使用ca进行签名,生成server.crt

cpserver.csrnewreq.pem

./ca.sh-sign

mvnewcert.pemserver.crt

或者上面三步都不需要,直接使用下面一步

opensslca-inserver.csr-outserver.crt

更多opensslca命令请见openssl命令–ca

第三步、配置服务器:

mkdirssl

cpserver.crtssl/server.crt

cpserver.keyssl/server.key

cpdemoca/cacert.pemssl/ca.crt

cp-rssl/alidata/server/httpd/conf/

编辑/alidata/server/httpd/conf/extra/httpd-ssl.conf文件,找到sslcertificatefile、sslcertificatekeyfile、sslcacertificatepath、sslcacertificatefile进行修改

#指定服务器证书位置

sslcertificatefile"/alidata/server/httpd/conf/ssl/server.crt"

#指定服务器证书key位置

sslcertificatekeyfile"/alidata/server/httpd/conf/ssl/server.key"

#证书目录

sslcacertificatepath"/alidata/server/httpd/conf/ssl"

#根证书位置

sslcacertificatefile"/alidata/server/httpd/conf/ssl/ca.crt"

修改vhost配置vim/alidata/server/httpd/conf/vhosts/phpwind.conf

sslcertificatefile/alidata/server/httpd/conf/ssl/server.crt

sslcertificatekeyfile/alidata/server/httpd/conf/ssl/server.key

sslcacertificatepath/alidata/server/httpd/conf/ssl

sslcacertificatefile/alidata/server/httpd/conf/ssl/ca.crt

servername182.92.5.161

documentroot/alidata/www

最后,咱们重启apache服务器,在浏览器输入链接查看是否配置成功。可以在浏览器上查看证书信息,与第二步不同之处在于此时的证书有两个。

一、与mac的几点不同

1、首先安装openssl,参考我的mac10.11升级安装openssl2、mac上对应的openssl的路径是/system/library/openssl/3、mac上对应的apache的路径是/etc/apache2/4、mac上重启服务器使用/usr/sbin/apachectlrestart,阿里云服务器使用/etc/init.d/httpdrestart或者servicehttpdrestart5、mac上vhost配置的路径是/etc/apache2/extra/httpd-vhosts.conf

二、与寻常linux系统的不同

主要借鉴macosopenssl下生成建立ca并生成服务器和客户端证书方法这篇文章1、linux上apache的路径是/usr/local/apache2、linux上vhost配置的路径是/usr/local/apache/conf/extra/httpd_vhosts.conf

1、对https的理解它的基本原理是服务器拥有一个私钥,客户端拥有公钥,当然它们是使用证书管理的。每次通信它们通过证书进行身份认证。身份认证之后客户端发送一个“对话密钥”给服务器。传输“对话密钥”时,客户端公钥通过不对称加密算法进行加密了的,只有服务器才能解密。然后双方使用这个”对话密钥”对内容进行对称加密,双方之间传输内容。

2、对openssl、ssl/tls的相关理解openssl是一套工具,它是一个开源库,可以对相关内容进行加密和解密,也可以生成证书并且进行数字签名。它创建的x509证书有pem和der两种编码,而且它们还可以导出p12文件。它使用的加密算法有对称加密,也有不对称加密。

3、https相关理论知识博客,值得细读openssl与ssl数字证书概念贴ssl/tls协议运行机制的概述ssl/tls原理详解

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服