十四、配置Tengine支持HTTPS
1、演示环境:
IP |
操作系统 |
角色 |
192.168.1.222 |
CentOS 7.4 |
Tengine服务器 |
192.168.1.145 |
CentOS 6.9 |
自建CA服务器 |
备注:Tengine和CA可以部署于同一台服务器
2、修改配置文件Nginx.conf,创建基于主机名的虚拟主机:
server {
listen 80;
server_name web.vhosts.com;
location / {
root /vhosts/web;
index index.html index.html;
}
}
3、创建虚拟主机页面存放目录及测试页:
# mkdir -pv /vhosts/web
# echo "Index html" > /vhosts/web/index.html
# echo "Test html" > /vhosts/web/test.html
# Nginx -t
# Nginx -s reload
4、以管理员权限运行notepad,修改本地Windows 10的C:\Windows\System32\drivers\etc\hosts文件,末尾新增代码:192.168.1.222 web.vhosts.com,保存后访问测试页
5、 192.168.1.145的自建CA服务器创建私有CA:
(1)安装相关软件包:# yum -y install openssl openssh-clients # which openssl --> /usr/bin/openssl
备注:OpenSSL的配置文件是/etc/pki/tls/openssl.cnf,此处无需修改,使用默认配置即可
(2)创建保存证书信息的数据库文件:# touch /etc/pki/CA/index.txt
(3)创建保存证书序列号的文件:# echo 01 > /etc/pki/CA/serial
(4)生成私钥cakey.pem:# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
备注:genrsa子命令常用选项
Ø genrsa:用于生成RSA密钥对的OpenSSL子命令
Ø -out cakey.pem:私钥保存位置
Ø 2048:密钥长度,也可以使用1024或4096
更多genrsa子命令选项可查看:# man genrsa
(5)生成CA证书cacert.pem:
# cd /etc/pki/CA # openssl req -new -x509 -key private/cakey.pem -days 7300 -out cacert.pem
其中ca.vhosts.com为证书颁发者
备注:req子命令常用选项
Ø req:用于证书签署请求和证书生成的-new:生成新证书签署请求
Ø -x509:专用于CA生成自签证书
Ø -key cakey.pem:生成CA证书请求时用到的私钥
Ø -days 7300:证书的有效期限为20年
Ø -out cacert.pem:证书的保存路径
更多req子命令选项可查看:# man req
6、 192.168.1.222的Tengine服务器生成证书签署请求文件并发送至自建CA服务器:
# yum -y install openssh-clients # which openssl --> /usr/bin/openssl
(2)创建用于存放密钥的目录:# mkdir -pv /usr/local/tengine/ssl # cd /usr/local/tengine/ssl
(3)生成私钥web-vhosts-com.key:# (umask 077; openssl genrsa -out web-vhosts-com.key 2048)
(4)生成证书签署请求文件web-vhosts-com.csr:
# openssl req -new -key web-vhosts-com.key -days 7300 -out web-vhosts-com.csr
其中web.vhosts.com为证书颁发的对象
(5)将证书签署请求文件web-vhosts-com.csr发送至CA服务器:
# scp web-vhosts-com.csr root@192.168.1.145:/etc/pki/CA/certs/
7、自建CA服务器签署证书并发还给Tengine服务器:
(1)签署证书:
# cd /etc/pki/CA/certs # openssl ca -in web-vhosts-com.csr -days 7300 -out web-vhosts-com.crt
备注:ca子命令常用选项
Ø ca:用于签署证书请求的-in web-vhosts-com.csr:证书签署请求文件路径
Ø -out web-vhosts-com.crt:证书的保存路径
更多ca子命令选项可查看:# man ca
(2)将证书web-vhosts-com.crt发还给Tengine服务器:
# scp web-vhosts-com.crt root@192.168.1.222:/usr/local/tengine/ssl
(3)Tengine服务器查看证书信息:
# openssl x509 -in web-vhosts-com.crt -noout -text //显示详细信息
# openssl x509 -in web-vhosts-com.crt -noout -subject
# openssl x509 -in web-vhosts-com.crt -noout -serial
8、配置Tengine支持HTTPS:
# HTTP默认监听端口为80,而HTTPS默认监听端口为443
listen 443 ssl;
server_name web.vhosts.com;
# 指定证书文件路径
ssl_certificate /usr/local/tengine/ssl/web-vhosts-com.crt;
ssl_certificate_key /usr/local/tengine/ssl/web-vhosts-com.key;
# 指定SSL/TLS会话缓存的类型和大小,shared:SSL:10m表示所有Tengine工作进程共享SSL会话缓存
ssl_session_cache shared:SSL:10m;
# SSL会话超时时长,默认为5分钟
ssl_session_timeout 30m;
# 指定加密协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 指定使用的套件加密算法,不同的浏览器所支持的套件可能会有所不同
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;
# 设置协商加密算法时,优先使用服务器端的加密套件,而不是客户端浏览器的加密套件
ssl_prefer_server_ciphers on;
}
# Nginx -t # Nginx -s reload # ss -tunlp | grep :443
(2)浏览器中输入https://web.vhosts.com测试:
(3)将所有HTTP请求(80端口)重定向到HTTPS(443端口),并访问测试页:
# 以下方法三选一
rewrite ^/(.*)$ https://$server_name/$1 permanent;
#rewrite ^ https://$server_name$request_uri? permanent;
#return 301 https://$server_name$request_uri;
浏览器访问http://web.vhosts.com,回车后自动跳转至https://web.vhosts.com
浏览器访问http://web.vhosts.com/test.html,回车后自动跳转至https://web.vhosts.com/test.html
查看web-vhosts-com.crt证书信息:
备注:生产环境中使用的证书建议从正规的证书颁发机构处申请