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

[经验分享] nginx ssl双向验证

[复制链接]

尚未签到

发表于 2018-11-12 10:58:32 | 显示全部楼层 |阅读模式
  首先,先了解一下https的验证过程。
  1、首先客户端向服务器发送一个SSL的请求包,要求进行安全的会话,请证明你的身份,并且我们双方来协商一下一会将用对对称加密算法,数字签名算法。。。。。。
  ----------------->
  2、HTTPS server收到请求后,响应client,把S证书传给client
  <----------------
  3、Client需要验证S证书,client会有CA的证书,可以对S证书进行验证(看是否可以解密,再看标识[服务器域名/主机名]是否对得上)。
  Client需要产生一把对称加密的KEY,通过S公钥把KEY加密,然后传给Server
  ------------------->
  4、HTTPS Server用自己的私钥解密得到KEY。随机产生一些信息,用KEY加密,传给Client。
  <--------------------
  接下来,双方通过KEY加密页面数据,安全传输
  <--------------------->
  我们对应上面的过程一步步进行。第一点HTTPS server应该要有自己的S证书:
openssl genrsa -des3 -out server.key 2048  #生成server的密钥openssl req -new -key server.key -out server.csr -days 3650  #根据上面的密钥生成一个请求生成证书文件的请求文件,这里仅仅是一个请求文件而起。  

  

  
Enter pass phrase for server.key:
  

  
You are about to be asked to enter information that will be incorporated
  

  
into your certificate request.
  

  
What you are about to enter is what is called a Distinguished Name or a DN.
  

  
There are quite a few fields but you can leave some blank
  

  
For some fields there will be a default value,
  

  
If you enter '.', the field will be left blank.
  

  
-----
  

  
Country Name (2 letter code) [GB]:cn
  

  
State or Province Name (full name) [Berkshire]:gd
  

  
Locality Name (eg, city) [Newbury]:gz
  

  
Organization Name (eg, company) [My Company Ltd]:me
  

  
Organizational Unit Name (eg, section) []:me
  

  
Common Name (eg, your name or your server's hostname) []:lvs.xxx.com
  

  
Email Address []:liuyonglong@120.net
  

  

  
Please enter the following 'extra' attributes
  

  
to be sent with your certificate request
  

  
A challenge password []:123456
  

  
An optional company name []:
  第二点:为了能够生成HTTPS server的证书,需要建立CA
openssl req -new -x509 -keyout ca.key -out ca.crt -days 3650  #生成CA  

  

  
Generating a 1024 bit RSA private key
  

  
.............++++++
  

  
...........++++++
  

  
writing new private key to 'sfnca.key'
  

  
Enter PEM pass phrase:
  

  
Verifying - Enter PEM pass phrase:
  

  
-----
  

  
You are about to be asked to enter information that will be incorporated
  

  
into your certificate request.
  

  
What you are about to enter is what is called a Distinguished Name or a DN.
  

  
There are quite a few fields but you can leave some blank
  

  
For some fields there will be a default value,
  

  
If you enter '.', the field will be left blank.
  

  
-----
  

  
Country Name (2 letter code) [GB]:cn
  

  
State or Province Name (full name) [Berkshire]:gd
  

  
Locality Name (eg, city) [Newbury]:gz
  

  
Organization Name (eg, company) [My Company Ltd]:ca
  

  
Organizational Unit Name (eg, section) []:ca
  

  
Common Name (eg, your name or your server's hostname) []:mail.ca.cn
  

  
Email Address []:admin@ca.cn
  第三步,在为HTTPS Server生成证书之前,应该先进行一些准备工作
[root@mail ssl]# vim /etc/pki/tls/openssl.cnf  

  
#dir            = ../../CA      //修改如下
  

  
dir             = /etc/pki/CA
  

  
[root@mail ssl]# touch /etc/pki/CA/{index.txt,serial} //根据openssl.cnf生成配置文件
  

  
[root@mail ssl]#echo 01 > /etc/pki/CA/serial
  

  
[root@mail ssl]#mkdir /etc/pki/CA/newcerts
  第三步就可以为HTTPS Server生成证书了
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key  这样客户端访问HTTPS Sever就可以用HTTPS进行访问了。
  同时,HTTPS Server也可以接受来自客户端的证书,从而实现双向的验证。
  第四步生成Client端证书
openssl genrsa -des3 -out client.key 2048  
openssl req -new -key client.key -out client.csr -days 3650
  
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
  另外,这个certificate是BASE64形式的,要转成PKCS12才能装到IE,/NETSCAPE上.转换如下:
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12  最后,我们要配置一下我们HTTPS server端的nginx使其支持ssl的双向验证
ssl on;  

  
ssl_certificate ssl/server.crt;
  

  
ssl_certificate_key ssl/server.key;
  

  
ssl_client_certificate ssl/ca.crt ;              //CA证书
  

  
ssl_verify_client on;                         //开启客户端双向认证
  这样,如果我们只是要求单向验证的话,就不需要安装client.p12到浏览器。如果我们开启了双向认证的话,就需要在浏览器中加载我们的client.p12,这样子就可以验证来自HTTPS server的请求了。



运维网声明 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-634067-1-1.html 上篇帖子: NGINX下配置Symfony 下篇帖子: 配置nginx对php的支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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