HTTPS双向认证简介
SSL双向认证就是,客户端要获取服务端的证书,检查下服务端是不是我可以信任的主机,否则我就认为那个站点的内容不可信任,不应该去访问你(浏览器会告诉你)。同时服务端也要检查客户端的证书,客户端如果不是服务端所信任的,那服务端也会认为,你不是我的合法用户,我拒绝给你提供服务。所以,要让HTTPS的双向认证顺利完成,就要在服务端给定一个证书,这个证书是浏览器可信任的,同时客户端(浏览器)也要发送给服务端一个证书,服务器端也要信任这个证书。
HTTPS双向认证配置步骤
一、自建CA根证书
(1)生成根证书的私钥
1 | openssl genrsa -out ca-key.pem 2048 |
(2)生成根证书的CSR文件
1 | openssl req -new -key ca-key.pem -out ca-req.csr -days 3650 |
(3)使用自己的私钥签名CSR文件,生成自签名的根证书
1 | openssl x509 -req -in ca-req.csr -out ca-cert.pem -signkey ca-key.pem -days 3650 |
(4)将pem的CA证书转换为DER格式
1 | openssl x509 -in ca-cert.pem -out ca.der -outform DER |
效果如下:
在windows上打开证书的效果如下:
二、用自建CA颁发客户端证书
(1)生成客户端证书的私钥
1 | openssl genrsa -out wzjtest-key.pem 2048 |
(2)生成客户端证书的CSR文件
1 | openssl req -new -key wzjtest-key.pem -out wzjtest-req.csr -days 3650 |
(3)使用自建的CA为客户端证书签名
1 | openssl x509 -req -in wzjtest-req.csr -out wzjtest-cert.pem -days 3650 -CA ../ca/ca-cert.pem -CAkey ../ca/ca-key.pem -CAcreateserial |
(4)将客户端证书的格式从pem转换为der
1 | openssl x509 -in wzjtest-cert.pem -out wzjtest.der -outform DER |
在windows下打开客户端证书效果如下:
(5)将客户端证书格式转换成PKCS #12格式
1 | openssl pkcs12 -export -clcerts -in wzjtest-cert.pem -inkey wzjtest-key.pem -out wzjtest.p12 |
三、在原有的https服务端上开启客户端证书验证
一般来说,我们的https都是单向验证的,下面是开启了双向认证的nginx配置:
四、测试验证
(1)使用浏览器测试
可以在浏览器中先导入自己签发的私钥,然后再访问需要双向认证的站点。
(2)使用openssl工具测试
1 | openssl s_client -quiet -servername wahaha.sohuno.com -connect 10.16.57.158:443 |
1 | openssl s_client -quiet -servername wahaha.sohuno.com -connect 10.16.57.158:443 -cert lv2/test-lv2-cert.pem -key lv2/test-lv2-key.pem |
学习资料参考于:
http://itindex.net/detail/52620-nginx-https-%E8%AE%A4%E8%AF%81