Nginx https服务(十)

nginx https服务

  • http不安全,被中间人盗用,信息泄漏,内容劫持,篡改。
  • https 对传输的内容进行加密以及身份的验证

加密方式 对称加密:


image

非对称加密


image

https加密原理

  1. 发起ssl连接,非对称加密
  2. 服务端将公钥发送给客户端
  3. 客户端用公钥对对称加密的密码进行加密 发送给服务端
  4. 之后客户端和服务端进行对称密钥传输数据
“非对称加密”的加密算法,特点是私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密
image

以上的传送方式对于 伪装程中间人(客户端,服务端)的还是可以劫持数据,所以就利用了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;
    
}

你可能感兴趣的:(Nginx https服务(十))