Nginx配置HTTPS(八)

背景

        上一章说了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    创建服务器证书秘钥文件

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

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

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

1.3     去除秘钥口令

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

1.4    生成证书文件

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

 2.    配置https站点

server {
    listen 443;
    ssl on;
    server_name xhz_edu.com www.xhz_edu.com;
    root /https;
    ssl_certificate  ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;


    location / {
        index index.html;
    }
}

##   配置一个重定向,当通过http访问的时候,重定向到https上
server {
    listen 80;
    server_name xhz_edu.com www.xhz_edu.com;
    return 302  https://$server_name$request_uri;
}

 3.    验证

 htpps负载均衡模型 

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

upstream webs{
    server 192.168.65.130:8080 weight=30;
    server 192.168.65.131:8081 weight=20;
    server 192.168.65.132:8080 weight=10;
}

server {
    listen 443;
    ssl on;
    server_name xhz_edu.com www.xhz_edu.com;
    root /https;
    ssl_certificate  ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;


    location / {
        proxy_pass http://webs;
    }
}
server {
    listen 80;
    server_name xhz_edu.com www.xhz_edu.com;
    return 302  https://$server_name$request_uri;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值