高级阶段回顾:
Nginx高级之高级模块(secure_link/secure_link_md5/geoip_module)
HTTPS原理
HTTPS协议较为安全的原因就是对数据进行了加密传输.
两种加密方式:
① 对称加密: 加密密钥和解密密钥是一样的
② 非对称加密: 加密密钥和解密密钥是不一样的(分为公钥和私钥)
HTTPS协议同时用到了这两种加密方式:
中间人伪装成客户端或者服务端劫持:
注: HTTPS之所以安全性高, 在于它能够生成CA签名证书, 该证书确保中间人无法获取到该证书, 所以提高了数据传输的安全性.
生成密钥和CA证书
准备工作: 确认已经安装nginx和openssl
安装nginx请参考我的nginx系列第一篇: Nginx基础之简介与快速安装
yum安装openssl: yum install openssl 和 yum install openssl openssl-devel
确认是否已安装:
步骤一: 生成RSA密钥
生成密钥命令: openssl genrsa -idea -out [密钥文件名称] 1024
在这个过程中需要输入密码(自定义, 但需要记住, 下面的步骤需要提示输入该密码)
步骤二: 生成证书签名请求文件(CSR文件)
生成CSR文件命令: openssl req -new -key [密钥文件名称] -out [CSR文件名称]
输入相关信息即可:
步骤三: 生成证书签名文件(CA文件)
生成签名文件命令: openssl x509 -req -days 3650 -in [CSR文件名称] -signkey [密钥文件名称] -out [生成的CRT文件名称]
配置HTTPS服务
是否开启服务端的相应:
systax: ssl on | off;
default: ssl off;
context: http域/server域
ssl的证书文件
systax: ssl_certificate file;
default: 无配置
context: http域/server域
ssl的证书密码文件
systax: ssl_certificate_key file;
default: 无配置
context: http域/server域
进入default.conf文件进行配置: https协议的默认端口时443
配置苹果要求的证书
准备工作:
① 服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2)
② HTTPS证书必须使用SHA256以上哈希算法签名
③ HTTPS证书必须使用RSA 2048位或ECC 256位以上公钥算法
④ 使用前向加密技术
升级openssl:
查看openssl的版本命令: openssl + version
如果需要升级, 请按下面的步骤:
cd /opt/opensslDownload
wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
tar -zxvf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k
./config --prefix=/usr/local/openssl
make && make install
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib" >>/etc/ld.so.conf
ldconfig -v
openssl version -a
将以上代码写入一个.sh的文件, 执行该文件 sh ./[.sh文件的文件名称]
结果:
由key密钥直接生成CRT签名:
命令: openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout [密钥文件名称] -out [生成的CRT文件名称]
进入default.conf配置:
引用New-Milky-Way.crt文件
重启nginx: 访问https://ip/
注: 是使用https://访问而不是http://访问.
HTTPS服务的优化
① 激活keepalive长连接
② 设置ssl session缓存
default.conf的配置: