当前位置:   article > 正文

Nginx配置HTTPS(八)_enter pass phrase for server.key

enter pass phrase for server.key

背景

        上一章说了Nginx的Rewrite的详细功能,这章我们将说说Nginx如何配置Https。

 HTTPS介绍

1.    为何需要https?

        因为HTTP采用的是明文传输数据,那么在传输(账号密码、交易信息、等敏感数据)时不安全。容易遭到篡改,如果使用HTTPS协议,数据在传输过程中是加密的,能够有效避免网站传输时信息泄露。 

2.    什么是HTTPS?

        HTTPS安全的超文本传输协议,我们现在大部分站点都是通过HTTPS来实现站点数据安全。
        早期网景公司设计了SSL(Secure Socket Layer)安全套接层协议,主要对HTTP协议传输的数据进行加密。那如何将站点变成安全的HTTPS站点呢?我们需要了解SSL(Secure Socket Layer)协议。
而现在很多时候我们使用的是TLS(Transport Layer Security)传输层安全协议来实现的加密与解密。

 3.   TLS如何加密?

TLS/SSL工作在OSI七层模型中,应用层与传输层之间。
1) 提供数据安全:保证数据不会被泄露。
2) 提供数据的完整性:保证数据在传输过程中不会被篡改。
3) 对应用层交给传输层的数据进行加密与解密。

4.   https加密方式

4.1     加密模型-对称加密

1) 对称加密:两个想通讯的人持有相同的秘钥,进行加密与解密。如下:

2) bob将原始文档通过秘钥加密生成一个密文文档。

3) alice拿到这个密文文档以后,它可以用这把秘钥还原为原始的明文文档。

对称加密究竟是如何实现的,我们可以以RC4这样一个对称加密序列算法来看一下。

1) 加密:秘钥序列+明文=密文

2)  解密:秘钥序列+密文=明文

 4.2    加密模型-非对称加密
非对称加密:它根据一个数学原理,创建一对秘钥(公钥和私钥)公钥加密,私钥解密;

1) 私钥:私钥自己使用,不对外开放。
2) 公钥:公钥给大家使用,对外开放。
比如:alice有一对公钥和私钥,他可以将公钥发布给任何人。假设Bob是其中一个,当Bob要传递一份加密文档给alice,那么Bob就可以用alice的公钥进行加密,alice收到密文文档后通过自己的私钥进行解密,获取原始文档。


 

 注意:alice必须知道Bob就是Bob,也就是它收到的信息必须是Bob发来的,那么这个信任问题,在多方通讯的过程中,必须有一个公信机构来验证双方的身份,那么这个机构就是CA机构。

 4.3     身份认证机构--CA

 通讯双方是如何验证双方的身份?CA机构是可信任组织机构,主要用来颁发证书及验证证书。那CA机构又是如何申请和颁发证书的呢?

         我们首先需要申请证书,需要进行登记,登记我是谁,我是什么组织,我想做什么,到了登记机构在通过CSR发给CA,CA中心通过后,CA中心会生成一对公钥和私钥,那么公钥会在CA证书链中保存,公钥和私钥证书订阅人拿到后,会将其部署在WEB服务器上

1) 当浏览器访问我们的https站点时,它会去请求我们的证书
2) Nginx会将我们的公钥证书回传给浏览器。
3) 浏览器会去验证我们的证书是否是合法的、是否是有效的。
4) CA机构会将过期的证书放置在CRL服务器,那么CRL服务的验证效率是非常差的,所以CA又推出了OCSP响应程序,OCSP响应程序可以查询指定的一个证书是否过期,所以浏览器可以直接查询OCSP响应程序,但OCSP响应程序性能还不是很高。
5)Nginx会有一个OCSP的开关,当我们开启后,Nginx会主动上OCSP上查询,这样大量的客户端直接从Nginx获取,证书是否有效。
 

5.    https实现原理 

 HTTPS加密过程,HTTPS采用混合加密算法,即对称加密、和非对称加密。
通信前准备工作:申请域名对应的证书,并将其部署在Nginx服务器中。

1)  第一步客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件和客户端支持TLS协议版本等信息。
2)  服务端会向客户端发送 Server Hello 消息。返回自己的公钥证书、挑选一个合适的加密套件、另外还会生成一份随机数 Random2推送给客户端。至此客户端和服务端都拥有了两个随机数(Random1+ Random2)
3)  客户端收到服务端传来的公钥证书后,先从 CA 验证该证书的合法性(CA公钥去解密公钥证书),验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密Random3。
4)  服务端用自己的私钥解出客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 + Random2 + Random3,两边根据同样的算法生成一份秘钥,握手结束后的应用层数据都是使用这个秘钥进行对称加密。
 

6.    https扩展

6.1    https购买建议

1) 保护1个域名www.bertwu.com
2) 保护5个域名 (www images cdn test m).bertwu.com
3) 通配符域名*.bertwu.com

6.2    https颜色标识
1) Https不支持续费,证书到期需重新申请新并进行替换。
2) Https不支持三级域名解析,如 test.m.bertwu.net 、*.m.bertwu.net
3) Https显示绿色,说明整个网站的url都是https的,并且都是安全的。
4) Https显示黄色,说明网站代码中有部分URL地址是http不安全协议的。(https (http url) )
5) Https显示红色,要么证书是假的,要么证书已经过期。

https配置示例 

1.    openssl创建SSL证书

 1.1    创建服务器证书秘钥文件

  1. [root@Nginx ~]# openssl genrsa -des3 -out server.key 1024
  2. ...
  3. Enter pass phrase for server.key: # 输入密码
  4. Verifying - Enter pass phrase for server.key: # 确认密码

 1.2    创建服务器证书申请文件

  1. [root@Nginx ~]# openssl req -new -key server.key -out server.csr
  2. Enter pass phrase for server.key: # 输入前面创建的密码
  3. ...
  4. Country Name (2 letter code) [XX]:CN # 国家代号. 中国输入 CN
  5. State or Province Name (full name) []:HuBei # 省的全名. 拼音
  6. Locality Name (eg, city) [Default City]:WuHang # 市的全名.拼音
  7. Organization Name (eg, company) [Default Company Ltd]:xhz_edu # 公司英文名
  8. Organizational Unit Name (eg, section) []: # 可以不输入
  9. Common Name (eg, your name or your server's hostname) []:www.xhz_edu.com # 域名
  10. Email Address []:xiaohaizhou@163.com # 电子邮箱. 可随意填
  11. ...
  12. A challenge password []: # 可以不输入
  13. An optional company name []: # 可以不输入

1.3     去除秘钥口令

  1. [root@Nginx ~]# openssl rsa -in server.key -out server.key
  2. Enter pass phrase for server.key.org: # 输入密码

1.4    生成证书文件

  1. [root@Nginx ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  2. Signature ok
  3. subject=/C=CN/ST=HuBei/L=WuHang/O=xhz_edu/CN=www.xhz_edu.com/emailAddress=xiaohaizhou@163.com
  4. Getting Private key

 2.    配置https站点

  1. server {
  2. listen 443;
  3. ssl on;
  4. server_name xhz_edu.com www.xhz_edu.com;
  5. root /https;
  6. ssl_certificate ssl_key/server.crt;
  7. ssl_certificate_key ssl_key/server.key;
  8. location / {
  9. index index.html;
  10. }
  11. }
  12. ## 配置一个重定向,当通过http访问的时候,重定向到https上
  13. server {
  14. listen 80;
  15. server_name xhz_edu.com www.xhz_edu.com;
  16. return 302 https://$server_name$request_uri;
  17. }

 3.    验证

 htpps负载均衡模型 

         由于Nginx服务器跟后端Web集群处于内网的局域网中,client端是直接通过互联网访问的Nginx服务器,因此我们在做http是负载的时候,只需要将SSL证书存放在Nginx服务器即可。

  1. upstream webs{
  2. server 192.168.65.130:8080 weight=30;
  3. server 192.168.65.131:8081 weight=20;
  4. server 192.168.65.132:8080 weight=10;
  5. }
  6. server {
  7. listen 443;
  8. ssl on;
  9. server_name xhz_edu.com www.xhz_edu.com;
  10. root /https;
  11. ssl_certificate ssl_key/server.crt;
  12. ssl_certificate_key ssl_key/server.key;
  13. location / {
  14. proxy_pass http://webs;
  15. }
  16. }
  17. server {
  18. listen 80;
  19. server_name xhz_edu.com www.xhz_edu.com;
  20. return 302 https://$server_name$request_uri;
  21. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/103489?site
推荐阅读
相关标签
  

闽ICP备14008679号