设为首页 收藏本站
查看: 386|回复: 0

[经验分享] nginx 配置 https 的双向认证

[复制链接]

尚未签到

发表于 2016-12-27 08:23:10 | 显示全部楼层 |阅读模式
SSL 的双向认证就是,客户端要获取服务端的证书,检查下服务端是不是我可以信任的主机,否则我就认为那个站点的内容不可信任,不应该去访问你(浏览器会告诉你),同时服务端也要检查客户端的证书,客户端如果不是服务端所信任的,那服务端也会认为,你不是我的合法用户,我拒绝给你提供服务。所以,要让 HTTPS 的双向认证顺利完成,就要在服务端给定一个证书,这个证书是浏览器可信任的,同时客户端(浏览器)也要发送给服务端一个证书,服务器端也要信任这个证书。
要想让浏览器纯自然地就去信任服务端的证书,那服务端所使用的证书就得是那几大已经被大家所信任的证书机构给他签名,不过一般要钱…不好
如果自己担当证书机构(Certificate Authority, CA)的角色的话,可以这么搞。
1、准备CA密钥
通常是在 linux 用 openssl 命令来搞,不过 Windows 下也可以,装个 Git 一般会带上 windows 的编译版本了。
openssl genrsa –out ca-key.pem 2048
2、生成CA证书请求
证书请求都是根据私钥来生成的
openssl req –new –key ca-key.pem –out ca-req.csr –days 3650
 
 
3、签名CA证书请求
使用自己的私钥来给这个CA证书请求签名
openssl x509 –req –in ca-req.csr –out ca-cert.pem –signkey ca-key.pem –days 3650
4、CA证书转换为DER格式
DER 格式似乎更加通用,iOS 直接认
openssl x509 –in ca-cert.pem –out ca.der –outform DER
现在,终于拿到了自己做 CA 需要的几个文件了,密钥 ca-key.pem,证书 ca-cert.pem,系统使用的 ca.der,接下来,要创建一个网站,就需要让 CA 给他签名一个证书了
6、准备网站密钥
网站自己也需要准备一个密钥,类似于 CA,假如这个网站的域名是 su.su
openssl genrsa –out su-key.pem 2048
7、生成网站证书请求
网站通过密钥生成证书请求,当然,这个请求一般是要提交给 CA,让 CA 进行签名的
openssl req –new –key su-key.pem –out su-req.csr –days 3650
8、CA签名网站证书请求
不是拿到 CA 的证书了就可以说自己是 CA 的,最重要的是,签名需要有 CA 密钥
openssl x509 –req –in su-req.csr –out su-cert.pem –days 3650 –CA ca-cert.pem –CAkey ca-key.pem –CAcreateserial
如果客户端(个人浏览器)信任 CA 的证书的话,那么他也就会信任由 CA 签名的网站证书,因此让浏览器信任 CA 的证书之后,客户端就自然信任服务端了,只要做单向认证的话,到这一步证书这一类材料就已经准备好了,但是双向认证就还要给客户端(个人的浏览器)准备一份证书,让服务端可以知道客户端也是合法的。假如让服务端也信任 CA 的证书,那 CA 签名的客户端证书也就能被信任了。
9、准备客户端私钥
不变的方法不需要解释
openssl genrsa –out qiyi-key.pem 2048
10、生成客户端证书请求
不变的方法不需要解释
openssl req –new –key qiyi-key.pem –out qiyi-req.csr –days 3650
11、CA签名客户端证书请求
不变的方法不需要解释
openssl x509 –req –in qiyi-req.csr –out qiyi-cert.pem –days 3650 –CA ca-cert.pem –CAkey ca-key.pem –CAcreateserial
12、客户端证书转换为DER格式
不变的方法不需要解释
openssl x509 –in qiyi-cert.pem –out qiyi.der –outform DER
13、客户端证书转换为 PKCS #12格式
全称应该叫做 Personal Information Exchange,通常以 p12 作为后缀
openssl pkcs12 –export –clcerts –in qiyi-cert.pem –inkey qiyi-key.pem –out qiyi.p12
14、配置 nginx
比如,类似下面这样一段

  • server {
  •     listen       443;
  •     server_name  localhost su.su;
  •     ssl                  on;
  •     ssl_certificate      cert/su-cert.pem;
  •     ssl_certificate_key  cert/su-key.pem;
  •     ssl_client_certificate cert/ca-cert.pem;
  •     ssl_session_timeout  5m;
  •     ssl_verify_client on;
  •     ssl_protocols  SSLv2 SSLv3 TLSv1;
  •     ssl_ciphers  RC4:HIGH:!aNULL:!MD5;
  •     ssl_prefer_server_ciphers   on;
  •     location / {
  •         root   html;
  •         index  index.html index.htm;
  •     }
  • }

我没有使用 ssl-sesion-cache 是因为遇到了错误…
15、配置浏览器证书
浏览器首先需要信任自签名的 CA 证书,这样他就可以直接信任服务端提供的证书了,为了双向认证成功,浏览器还需要提供一个传送给服务端的证书,也就是上面制作的客户端证书,对于 IE 来讲,首先在 Internet Options 里选择 Content 选项卡,然后点击 Certificates,新窗口的 Trusted Root Certification Authorities 选项卡选择导入,选择制作好的 ca.cer;其次在 Personal 选项卡选择导入 qiyi.p12,当然,这里导入的时候还需要输入密码-.-
16、测试成果
当将一切都设置好,将 nginx 启动成功后,就可以打开 IE 来访问了,第一次访问,浏览器会询问双向认证时使用的证书,类似下图
DSC0000.png
选择客户端证书
顺利打开,浏览器没有红色的警告提示,正常显示页面内容就大功告成了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-319913-1-1.html 上篇帖子: nginx配置五(server虚拟主机配置) 下篇帖子: Nginx中如何防止用IP直接访问服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表