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 https的主要内容,如果未能解决你的问题,请参考以下文章
typescript Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming/angular-2/