实验前的准备
涉及知识点
- 对称密码体制和非对称密码体制
- Apache的安装配置及使用
- OpenSSL的使用
- HTTPS的认证机制
其中,HTTPS的认证机制分为两种:
- 双向验证:服务器和客户端都需要相互验证(常见于银行类网站)
- 单向验证:只需验证服务器端
实验环境
本教程采用阿里云服务器,操作系统为:CentOS release 6.8(与Ubuntu系统稍有区别)
理清三个关系和两个概念
- 客户端、服务器和CA机构的关系
在该实验中,我们需要在同一台电脑上同时扮演三个角色,即:客户端
、服务器
、CA机构
。也就是说在现实生活中,这三者都是分开的,但是在本实验中,我们要用一台计算机同时扮演这三个角色,客户端由我们的浏览器扮演,服务器由我们的Apache扮演,CA机构由我们的根证书扮演。 - 根证书和其他证书的概念
在网络关系中,是存在一个信任链条的,但必须有一个源头,因此在HTTPS的证书信任链条中,是有根证书、一级证书、二级证书以及后面的多级证书的。这些证书中,我们必须要假定根证书是绝对安全且值得信任的,才有后面信任链条的存在。因此在本实验中根证书是自签名证书(自己认证自己),而服务器证书需要由根证书来签名。
实验过程
第一步:安装Apache
1.下载安装Apache
1 | yum install httpd |
2.修改Apache的配置文件
配置文件位置在:/etc/httpd/conf/httpd.conf
主要改以下两个地方:1
2Listen 120.76.142.16:80
ServerName 120.76.142.16:80
3.开启Apache
1 | httpd -k start |
4.查看Apache是否配置成功
浏览器访问:http://120.76.142.16/
,如果出现页面,则说明Apache配置成功
第二步:安装OpenSSL
一般Linux或者CentOS都会自带OpenSSL,没有的话则自行安装。
第三步:生成CA根证书
1.生成一个RSA密钥,为2048位长度(1024位已经被证明容易被破解),并将该密钥用DES对称加密,并输入加密密钥:qimingyuCA。
1 | openssl genrsa -des3 -out root-ca.key 2048 |
这里输入的加密密钥是对RSA私钥的加密密钥
2.生成根证书签发请求文件,采用第一步生成的私钥进行签名
1 | openssl req -new -key root-ca.key -out root-ca.req |
这里生成证书签发请求文件需要填一些信息。参数-new
表示新证书签发请求
3.自签发根证书
1 | openssl x509 -req -days 365 -signkey root-ca.key -in root-ca.req -out root-ca.cer |
4.查看刚刚生成的根证书
1 | openssl x509 -noout -text -in root-ca.cer |
第四步:生成服务器端证书
1.生成服务器私钥,并将该密钥用DES对称加密,并输入加密密钥:qimingyuSERVER。
1 | openssl genrsa -des3 -out server.key 2048 |
2.生成服务器证书请求签发文件
1 | openssl req -new -key server.key -out server.req |
填信息的时候注意这一栏要是你HTTPS网址的域名(红色部分为所填的内容)Common Name (eg, your name or your server’s hostname) []:qimingyu.com
3.使用根证书签发服务端证书
1 | openssl ca -config /usr/local/openssl/ssl/openssl.cnf -in server.req -out server.cer |
- 注意这里要根据OpenSSL的配置文件的信息,新建目录及拷贝重命名过去,并且在serial里面填入相应的数值。如果签名不成功,报错匹配问题的,需要修改OpenSSL的配置文件。
- 注意这里服务器端证书的生成与前面根证书的生成不一样,这里服务器端的证书生成是用根证书进行签名的,而根证书的生成是自己给自己签名的。
4.验证生成的证书是否正确
1 | openssl verify -CAfile root-ca.cer server.cer |
第一个为根证书,第二个为需要验证的子证书。如果返回结果是OK,则证明证书生成正确。
第五步:安装Apache支持SSL模块
1.安装模块mod_ssl
1 | yum install mod_ssl -y |
2.修改其配置文件
位置为:/etc/httpd/conf.d/ssl.conf
主要更改以下内容:1
Listen 120.76.142.16:443
此时用HTTPS访问该网址,会出现不安全的报警
3.继续修改配置文件
主要修改服务器证书及密钥的位置,指定到对应的位置1
2SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
4.重启Apache服务器
1 | httpd -k stop |
此时会要求输入服务器的密码:qimingyuSERVER
5.验证是否成功
1 | openssl s_client -connect 120.76.142.16:443 -CAfile /root/root-ca.cer |
如果返回结果是OK,则证明实验成功
6.将根证书导入浏览器之后再进行访问,不再报警
实验补充
心脏滴血漏洞原理
【版权声明】
本文首发于戚名钰的博客,欢迎转载,但是必须保留本文的署名戚名钰(包含链接)。如您有任何商业合作或者授权方面的协商,请给我留言:qimingyu.security@foxmail.com
欢迎关注我的微信公众号:科技锐新