nginx-https模块

        由于http传输没有被加密,具有不安全性,容易导致传输数据被中间人盗用,发生数据内容劫持及篡改及信息泄露。https就可以很好地解决这些问题。

         https采用加密的方式,对传输内容进行加密以及身份验证。

        首先需要了解下两个加密方式,对称加密和非对称加密:

 

       上图是对称加密图示,明文的数据经过了加密秘钥加密,生成密文传输给接收方,接受方通过解密秘钥还原明文数据内容。对称加密中加密秘钥及解密秘钥是对称的,即秘钥是一样的。

       上图示非对称加密图示,所谓的非对称加密,即加密秘钥和解密秘钥是不一样的内容,常见的就是公钥和私钥,公钥用于加密,私钥用于解密。一串公钥对应着一串私钥,只有通过公钥加密的数据,才能用它与之对应的私钥解密。接收方一般保存私钥,发送方保留公钥。

        对于https加密的协议而言,它同时使用到了对称加密和非对称加密。当用户端发送ssl连接时,它进行了非对称加密操作,将公钥发送给了客户端,服务端保留私钥。客户端通过公钥加密对称加密的密码,并发送到服务端。非对称加密的作用是为了对称加密传输数据进行前期的验证以及加密的传输。

 

        但是,仅仅通过非对称加密与对称加密是防范不了伪装客户端或者服务端的劫持:

        所以ca证书应运而生

 

        如上图所示,服务端向客户端之前发送的是公钥,现在改为是一个CA签名证书,有了这个证书,中间人就无法劫持了。因为客户端会另外对CA签名的证书进行效验,中间人是无法生成进行匹配CA签名证书的效验的。因为客户端会与第三方签名机构进行CA证书的效验。如果效验成功会使用CA签名证书中的公钥进行加密,如果效验失败客户端将会中止这次会话。对于中间人单独伪造公钥,采用这样的方式就无法实现了。因为这个签名的证书是服务端之前就已经和第三方机构进行对应的签名和授权。客户端在真正进行连接的时候还需要进行一次效验,中间人劫持这种方式就无法实现。

 

      生成秘钥和CA(自签证书)流程:

     1.环境确认:

      确认系统是否安装ssl,可执行openssl version命令查看

      确认nginx是否安装http_ssl_module模块,可通过nginx -v查看

     2.生成key秘钥:

        执行openssl genrsa -idea -out xxx.key 1024(有保护码,即每次重启nginx都需要输入密码)

        或者openssl rsa -in ./xxx.key -out ./xxx.key(无保护码)

     3.生成证书签名请求文件(csr文件),执行openssl req -new -key xxx.key -out xxx.csr

     4.执行 openssl x509  -req -days 3650 -in xxx.csr -signkey xxxkey -out xxx.crt

     

Nginx HTTPS配置语法:

 

Syntax:

ssl on | off;

Default:

ssl off;

Context:

httpserver

 

Syntax:

ssl_certificate file;

Default:

Context:

httpserver

 

配置示例:

server {

    listen              443 ssl;

    server_name         example.com;

 

    ssl_certificate     example.com.rsa.crt;

    ssl_certificate_key example.com.rsa.key;

 

    ssl_certificate     example.com.ecdsa.crt;

    ssl_certificate_key example.com.ecdsa.key;

 

    ...

}

 

Syntax:

ssl_certificate_key file;

Default:

Context:

httpserver

 

配置案例:       

     苹果对后端的https协议版本要求:

  1. 服务器所有的连接使用TLS1.2以上版本(openssl 1.0.2)
  2. HTTPS证书必须使用SHA256以上哈希算法签名
  3. HTTPS证书必须使用RSA2048位ECC256位以上公钥算法
  4. 使用前向加密技术

生成符合苹果证书的命令:

openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout zwq.key -out zwq_apple.crt

查看签名算法类型命令:openssl x509 -noout -text -in crt文件路径

 

        HTTPS服务优化:

       https的建立需要在http之前建立ssl握手,ssl的认证就会多一次连接,服务端进行认证就会消耗服务端资源,如cpu及io资源。但是出于安全的权衡,我们依然选择https。

  优化:

  1. 激活keealived长链接。一次连接如果能处理更多的请求,建立的握手次数就会少,这样对于服务端的性能就会有效的减少
  2. 设置ssl session缓存,把部分信息内容放到session缓存中,这样处理时可以减少cpu资源的使用。

 

 

猜你喜欢

转载自blog.csdn.net/qq_34871626/article/details/81149726
今日推荐