自建CA实现HTTPS教程

实验前的准备

涉及知识点

  • 对称密码体制和非对称密码体制
  • 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
2
Listen 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
2
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key

4.重启Apache服务器
1
2
httpd -k stop
httpd -k start

此时会要求输入服务器的密码:qimingyuSERVER

5.验证是否成功
1
openssl s_client -connect 120.76.142.16:443 -CAfile /root/root-ca.cer

如果返回结果是OK,则证明实验成功

6.将根证书导入浏览器之后再进行访问,不再报警

实验补充

心脏滴血漏洞原理

1
2


【版权声明】
本文首发于戚名钰的博客http://qimingyu.github.io/ ),欢迎转载,但是必须保留本文的署名戚名钰(包含链接)。如您有任何商业合作或者授权方面的协商,请给我留言:mingyuqi.java@qq.com
欢迎关注我的微信公众号:科技锐新

本文永久链接:http://qimingyu.github.io/2017/04/28/自建CA实现HTTPS教程/

坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章