Nginx https

Posted 一饮孤与悲

tags:

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

简介

Https的安全通信机制

非称加密方式的缺点

1.:公开密钥加密固然比共享密钥加密的方式提升了一个档次,但是它也存在两个问题:

第一个是:如何保证接收端向发送端发出公开秘钥的时候,发送端确保收到的是预先要发送的,而不会被挟持。只要是发送密钥,就有可能有被挟持的风险。

第二个是:非对称加密的方式效率比较低,它处理起来更为复杂,通信过程中使用就有一定的效率问题而影响通信速度

2.:Https采用混合机制的加密方式

https则综合了公开密钥加密和共享密钥加密的两种方式,充分利用两者的优势,在最初的连接的时候使用非对称密钥的加密方式保证连接的安全性,之后稳定的通讯采用对称加密的方式,稳定的通讯是指确保交换的密钥是安全的。

3.:https的证书机制

  在1中我们讲了非对称加密的缺点,其中第一个就是公钥很可能存在被挟持的情况,无法保证客户端收到的公开密钥就是服务器发行的公开密钥。此时就引出了公开密钥证书机制。数字证书认证机构是客户端与服务器都可信赖的第三方机构。证书的具体传播过程如下:

1:服务器的开发者携带公开密钥,向数字证书认证机构提出公开密钥的申请,数字证书认证机构在认清申请者的身份,审核通过以后,会对开发者申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将密钥放在证书里面,绑定在一起

2:服务器将这份数字证书发送给客户端,因为客户端也认可证书机构,客户端可以通过数字证书中的数字签名来验证公钥的真伪,来确保服务器传过来的公开密钥是真实的。一般情况下,证书的数字签名是很难被伪造的,这取决于认证机构的公信力。一旦确认信息无误之后,客户端就会通过公钥对报文进行加密发送,服务器接收到以后用自己的私钥进行解密。

 

http的创建与配置

1 设置nginux.conf 添加include 定义bakend

http {
    include       mime.types;
    include       /usr/local/nginx/vhost/*.conf;
    default_type  application/octet-stream;
.....

 #gzip  on;
     upstream bakend {
     server 192.168.1.11:8080 weight=1;
     }

创建vhost目录配置文件

# mkdir /usr/local/nginx/vhost

# cd /usr/local/nginx/vhost

# vim default.conf

server {
        listen 80;
        server_name _;
        # rewrite,访问80端口强制跳转到https
        rewrite ^ https://$host$request_uri? permanent;


}



server {
    listen              443 ssl;
    server_name         localhost;
    # 浏览器直接重定向到https,避免中途的302重定向URL被篡改。进一步提高通信的安全性。 HSTS  max-age=31536000是指接下来一年
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    # 证书存放位置
    ssl_certificate     /usr/local/nginx/certificate/server.crt;
    # 免密key存放位置
    ssl_certificate_key /usr/local/nginx/certificate/server.key;
    # 依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
    ssl_prefer_server_ciphers On;
    # 指定密码为openssl支持的格式
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    # 密码加密方式
    ssl_ciphers         HIGH:!aNULL:!MD5;




    location / {
        #主配置文件中有upstream模块,代理server
        proxy_pass http://bakend;
        #root  html;
        #index index.html index.htm;
        gzip on;
        gzip_min_length 40000;
        gzip_types application/javascript application/json text/css text/plain;
        client_max_body_size 5000M;
        proxy_connect_timeout 60;
        proxy_send_timeout 1000;
        proxy_read_timeout 200;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header SERVER_ADDR $server_addr;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header REMOTE_PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        error_page 500 501 502 503 504 404 400 /error.html;
        location = /error.html {
        root /usr/local/nginx/html/;
        }
                }
                        }

 

创建私钥存放目录

# mkdir /usr/local/nginx/certificate

# cd /usr/local/nginx/certificate

生成私钥文件

 

1)生成服务器私钥: openssl genrsa -des3 -out server.key 1024 #des3是算法, -out [filename] 1024是长度,默认  会让你输入密码,不小于4个字符   2)创建签名请求的证书(CSR): openssl req -new -key server.key -out server.csr -new 创建一个新的证书请求文件 -key filename 指定私钥的输入文件,创建证书请求时需要 -out filename.csr 输出指定的文件名   3)在加载SSL支持的Nginx并使用上述私钥时除去必须的口令: cp server.key server.key.org openssl rsa -in server.key.org -out server.key   4)最后标记证书使用上述私钥和CSR openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt   5)最后会有4个文件,有用的是server.crt和server.key,放到配置文件中指定的位置即可 server.crt  server.csr  server.key  server.key.org   6)view \'Nginx

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

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段

linux学习:Nginx--常见功能配置片段与优化-06

这两个代码片段有啥区别?

PHP代码-psysh调试代码片段工具

typescript Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming/angular-2/