nginx https服务
- http不安全,被中间人盗用,信息泄漏,内容劫持,篡改。
- https 对传输的内容进行加密以及身份的验证
加密方式 对称加密:
非对称加密
https加密原理
- 发起ssl连接,非对称加密
- 服务端将公钥发送给客户端
- 客户端用公钥对对称加密的密码进行加密 发送给服务端
- 之后客户端和服务端进行对称密钥传输数据
“非对称加密”的加密算法,特点是私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密
以上的传送方式对于 伪装程中间人(客户端,服务端)的还是可以劫持数据,所以就利用了CA签名证书
服务端发送给客服端的是CA签名证书,客服端对数字证书进行CA校验,校验成功,则利用公钥加密,校验失败,则停止回话
Nginx配置https
生成CA证书
//查看是否安装openssl
openssl version / rpm -qa|grep open
//确认nginx是否编译安装了 --with-http_ssl_module
nginx -V
//进入到nginx.conf目录
cd /etc/nginx/
//创建目录并进入
mkdir ssl_key
//生成key密钥
openssl genrsa -idea -out applelife.key 1024
//之后提示输入密码,输入设置 需要自己记住,后面会用到
//生成证书签名请求文件(csr文件)
openssl req -new -key applelife.key -out applelife.csr
//输入上面设置的密码
//输入相关的信息 CN ,chongqing,chongqing,...
//最后的时候会要求输入一个密码,这个是在修改csr文件需要的,在不严格的情况下,可以为空
//最后会有两个文件 applelife.key applelife.csr
//基于上面的两个文件,生成证书签名文件(CA文件)
//days 3650 签名证书的过期时间
openssl x509 -req -days 3650 -in applelife.csr -signkey applelife.key -out applelife.crt
//需要输入 key的密码
nginx配置
//语法 是否开启
Syntax: ss|on|off;
Default:ssl off;
Context:http,server
#证书文件
Syntax:ssl_certificate file;
Default:-
Context:http,server
#key文件
Syntax:ssl_certificate_key file;
Default:-
Context:http,server
//示例
server {
...
listen 443;
server_name www.applelife.com;
ssl on;
#证书文件
ssl_certificate /etc/nginx/ssl_key/applelife.crt;
#key文件
ssl_certificate_key /etc/nginx/ssl_key/applelife.key;
#测试验证key
#ssl_certificate_key /etc/nginx/ssl_key/appleno.key;
...
location / {
...
}
}
其他命令
//停止 需要输入设置的key密码
nginx -s stop -c /etc/nginx/nginx.conf
//启动
nginx -c /etc/nginx/nginx.conf
//检查语法
nignx -tc /etc/nginx/nginx.cof
//查看端口是否启用
netstat -luntp |grep 443
注意
//验证的时候记得输入 https
配置苹果要求证书
- 服务器所有的连接使用TLS1.2以上的版本(openssl1.0.2)
- https证书必须使用SHA256以上的哈希算法签名
- Https证书必须使用RSA 2048位 或ECC 256以上的公钥算法
- 使用前向加密技术
//查看ssl版本
openssl version
//查看证书算法,位数
openssl x509 -noout -text -in ./applelife.crt
//直接使用key生成 crt证书,在这个过程中需要输入相关的信息即可
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout applelife.key out applelife.crt
//之后修改nginx配置文件即可
//reload 服务
nginx -s reload -c /etc/nginx/nginx.conf
这种配置方式,在重启停止nginx不需要输入key的密码,因为在生成的时候配置了一个参数 -keyout 重新生成新的文件
生成没有保护码的key
//生成没有保护码 key 的方式
openssl rsa -in ./applelife.key -out ./applelife_nopass.key
Https优化
- 激活keepalive长连接
- 设置ssl session缓存
//示例
server {
listen 443;
server_name 192.33.2.1 applelife.com;
#让长连接保持更长
keepalive 100;
ssl on;
#设置缓存10M 大约可以存储 8000到10000 个会话
ssl_session_cache shared:SSL:10m;
#配置10分钟 session过期
ssl_session_timeout 10m;
#证书文件
ssl_certificate /etc/nginx/ssl_key/applelife.crt;
#key文件
ssl_certificate_key /etc/nginx/ssl_key/applelife.key;
}