web服务进阶 自建CA/https详解
一、SSL与https
1、引言
我们网上购物、网上订票,以及使用支付宝支付过程中都会在网上直接输入账号和密码。这些信息都是非常重要的,如何才能在输入的过程中,不被别人看见和窃取,就需要对你输入的信息进行加密处理。
早期的两主机通信之间是没有加解密程序,后来就在传输层与应用层之间加了一个SSL库,完成加密解密功能。
2、身份认证是怎么实现的?
A主机给B主机发了一个很重要的文件,B主机是怎么知道这个文件是A发的呢,万一是不法分子小C的阴谋,那我该不该相信这个信息呢?所以采用下面一种策略
首先发送方用自己的私钥加密数据特征码,接收方用对方的公钥去解密,如果接的开,就说明是对方发送的,密钥是成对出现的,私钥只有发送方自己有。其中发送方用自己的私钥加密数据的结果就叫数据签名。就相当于盖个章,这个东西是我的了。
3、加密过程:A发送给B信息
(1)A生成一组数据,为了保证数据安全保密的送给B,A先用单向加密算法计算出这段数据的特征码
(2)A会用自己的私钥加密这段特征码并将结果覆加在数据后面。
(3)A生成了一个临时的对称密钥,并使用这个对称密钥加密这整段数据。
(4)S会获取到B的公钥,并使用对方的公钥加密刚才那个对称密钥并覆加到整个后面,然后发送到B进行解密。
4、解密过程:B来解密
(1)B拿到报文以后,先用自己的私钥去解密这段加密的对称私钥
(2)用对称密钥解密整段加密的内容
(3)用A的公钥去解密特征码,能解密,A的身份得到验证
(4)在用同样的加密对称算法,去计算这段数据的特征码并与解密出来的进行比较,如果相同,数据完整性得到验证。
5、这中间缺一个环节,就是CA,帮助通信双方确认对方身份是否真伪。双方通信时要商量好:
(1)把CA颁发的公钥证书给我
(2)商议好用哪种方式加密
(3)B拿到A的公钥后要验证
6、ssl与http的关系
http本身不具备加密解密功能,所以通过ssl进行加密。使用ssl的http通信叫做https通信。
二、实例演示
1、自建CA(A主机:ip为192.168.1.118)
(1)生成私钥文件 mkdir -p /etc/pki/CA/private #创建私钥保存的目录
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
ll /etc/pki/CA/private/ # 私钥只能自己保存,对保密性要求高
(2)生成自签证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 7300
(3)为CA提供所需的目录和文件
touch /etc/pki/CA/index.txt # 创建数据库文件
echo 01 > /etc/pki/CA/serial # 创建序列号文件并给明第一个证书的序列号码
ll /etc/pki/CA
至此,私有CA创建完毕。
2、证书申请:(在B主机上:ip:192.168.1.109)
(1)在证书申请的主机上生成私钥
cd /etc/httpd/
mkdir ssl #创建保存私钥的目录
cd ssl
(umask 077;openssl genrsa -out httpd.key 2048) #生成私钥
ll
(2)生成证书签署请求
openssl req -new -key httpd.key -out httpd.csr -days 365 # 在本地生成
(3)把请求发送给CA
scp httpd.csr root@192.168.1.118:/etc/pki/CA # 192.168.1.118为CA主机
(4)CA签发证书(在CA192.168.1.118主机上操作),cd到 /tmp下
openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
cat /etc/pki/CA/index.txt #查看第一个签发的证书
(5)把签署好的证书发还给请求者
cd /etc/pki/CA
scp certs/httpd.crt root@192.168.1.109:/etc/httpd/ssl/
在请求主机上查看,证书已经颁发好了
3、配置httpd支持使用ssl,及使用的证书;
(1) yum install -y mod_ssl
(2)修改配置文件: vim /etc/httpd/conf.d/ssl.conf
<VirtualHost 192.168.1.109:443> ServerName www.a.com DocumentRoot /www/a.com/htdocs SSLengine ON SSLprotocol ALL -sslv2 -sslv3 SSLcertificatefile /etc/httpd/ssl/httpd.crt SSLcertificatekeyfile /etc/httpd/ssl/httpd.key </VirtualHost>
(3)配置虚拟主机vim /etc/httpd/conf.d/virt.conf
<VirtualHost 192.168.1.109:80> ServerName www.a.com DocumentRoot /www/a.com/htdocs <Directory "/www/a.com/htdocs"> Options None AllowOverride None Require all granted </Directory>
检查
测试如下:
ok了,还要把CA证书下载到windows导入浏览器。就可以了。
原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/63170
评论列表(1条)
博客完成的非常好,有图有真现,有实验结果。加油!