Nginx HTTPS协议简介

Posted 我的紫霞辣辣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx HTTPS协议简介相关的知识,希望对你有一定的参考价值。

HTTPS安全证书基本概述

  • 为什么需要使用HTTPS,因为HTTP不安全。当我们使用HTTP网站时,会遭到劫持和篡改,如果采用HTTPS协议,那么数据在传输的过程中是加密的,所以黑客无法窃取或者篡改数据报文信息,同时也避免网站传输时信息泄露。
    在这里插入图片描述

场景模拟

  1. 正常访问情况(本地hosts文件代替DNS解析服务)
- web01服务器
3. 修改nginx配置文件
vim /etc/nginx/conf.d/test.nana.com.conf
server {
        listen 80;
        server_name test.nana.com;
        charset utf-8,gbk;
        root /soft/code;
        index index.html;
}

4. 创建Nginx配置文件指定的数据信息
vim /soft/code/index.html
<h1>Nginx01</h1>
<h2>Nginx01</h2>
<h3>Nginx01</h3>

- 测试
在本机添加域名解析
C:\\Windows\\System32\\drivers\\etc
在hosts文件添加域名解析(注释掉本机其他ip与域名之间的对应关系)
192.168.15.7 test.nana.com

我们打开浏览器输入test.nana.com;可以看到三个字体大小不一致的Nginx01
  1. DNS数据被劫持的情况
- lb01服务器
1. 修改Nginx配置文件
vim proxy_test.conf
upstream test {
        server 172.16.1.7:80;
}

server {
        listen 80;
        server_name test.nana.com;

        location / {
                proxy_pass http://test;
                proxy_set_header Host $http_host;
                sub_filter "<h3>" "<h1>";			# 将Nginx配置文件中<h3>替换成<h1>
                # sub_filter模块可以实现Nginx数据替换
                sub_filter "</h3>" "</h1>";			# 将Nginx配置文件中</h3>替换成</h1>
        }
}
  
- 测试
在本机添加域名解析
C:\\Windows\\System32\\drivers\\etc
在hosts文件添加域名解析(注释掉本机其他ip与域名之间的对应关系)
192.168.15.5 test.nana.com

我们打开浏览器输入test.nana.com;可以看到的Nginx01字体格式跟之前的字题格式不一样了

对称加密与非对称加密

  • 对称加密比较简单,就是客户端和服务器共用同一个密钥,该密钥可以用于加密一段内容,同时也可以用于解密这段内容。对称加密的优点是加解密效率高,但是在安全性方面可能存在一些问题,因为密钥存放在客户端有被窃取的风险。

  • 非对称加密则要复杂一点,它将密钥分成了两种:公钥和私钥。公钥通常存放在客户端,私钥通常存放在服务器。使用公钥加密的数据只有用私钥才能解密,反过来使用私钥加密的数据也只有用公钥才能解密。非对称加密的优点是安全性更高,因为客户端发送给服务器的加密信息只有用服务器的私钥才能解密,因此不用担心被别人破解,但缺点是加解密的效率相比于对称加密要差很多。

https使用的是对称加密与非对称加密相结合的方式。

  • 如果我们想要安全地创建一个对称加密的密钥,可以让浏览器这边来随机生成,但是生成出来的密钥不能直接在网络上传输,而是要用服务端提供的公钥对其进行非对称加密。由于公钥加密后的数据只能使用私钥来解密,因此这段数据在网络上传输是绝对安全的。而服务端在收到消息之后,只需要使用私钥对其解密,就获取到浏览器生成的密钥了。

  • 使用这种方式,只有在浏览器和网站首次商定密钥的时候需要使用非对称加密,一旦网站收到了浏览器随机生成的密钥之后,双方就可以都使用对称加密来进行通信了,因此工作效率是非常高的。

TLS加密协议

  • 我们在实现Https时,需要了解ssl协议,但是我们现在使用更多的是TLS加密协议。
    那么TLS是怎么保证明文消息被加密的呢?在OSI七层模型中,应用性是http协议,那么应用层协议下,我们的表示层,是ssl协议所发挥作用的一层,它通过(握手,交换秘钥,告警,加密)等方式,是应用层http协议在没有感知的情况下做到了数据的安全加密。
    在这里插入图片描述
    那么在数据进行加密与解密的过程中,如何让确定双方的身份,此时就需要一个权威机构来验证双方身份。那么这个权威机构则是CA机构。那么CA机构又是如何让颁发证书的。
    在这里插入图片描述

首先我们需要申请证书,需要进行登记,登记我是谁,我是什么组织,我想做什么,到了登记机构再通过CRS发给CA,CA中心通过后,CA中心会生成一对公钥和私钥,那么公钥会在CA证书链中保存,公钥和私钥证书订阅人拿到后,会将其部署在WEB服务器上。任何正版操作系统都会将所有主流CA机构的公钥内置到操作系统当中。

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

CA证书的类型
在这里插入图片描述

HTTPS注意事项

  1. Https不支持续费,证书到期需要重新申请并进行替换
  2. Https不支持三级域名解析,比如test.a.nana.com
  3. Https显示绿色,说明整个网站的url都是https的
  4. Https显示黄色,因为网站代码中包含http的不安全链接
  5. Https显示红色,要么证书是假的,要么证书过期

以上是关于Nginx HTTPS协议简介的主要内容,如果未能解决你的问题,请参考以下文章

基于Nginx服务器和iOS9的HTTPS安全通信

nginx用tar包安装做443加密网站

nginx配置https

Nginx SSL+tomcat集群,取不到https正确协议

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

Nginx SSL+tomcat集群,request.getScheme() 取到https正确的协议