2.3. 在 NGINX web 服务器中添加 TLS 加密
您可以在 NGINX web 服务器上为example.com
域启用 TLS 加密。
先决条件
- NGINX 已安装。
私钥存储在
/etc/pki/tls/private/example.com.key
文件中。有关创建私钥和证书签名请求(CSR)的详细信息,以及如何从证书颁发机构(CA)请求证书,请参阅您的 CA 文档。
-
TLS 证书存储在
/etc/pki/tls/certs/example.com.crt
文件中。如果您使用其他路径,请调整该流程的对应步骤。 - CA 证书已附加到服务器的 TLS 证书文件中。
- 客户端和网页服务器会将服务器的主机名解析为 web 服务器的 IP 地址。
-
在本地防火墙中打开端口
443
。 - 如果服务器运行 RHEL 9.2 或更高版本,并且启用了 FIPS 模式,则客户端必须支持 Extended Master Secret(EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 TLS 扩展"扩展主 Secret "。
流程
编辑
/etc/nginx/nginx.conf
文件,并将以下server
块添加到配置中的http
块中:server { listen 443 ssl; server_name example.com; root /usr/share/nginx/html; ssl_certificate /etc/pki/tls/certs/example.com.crt; ssl_certificate_key /etc/pki/tls/private/example.com.key; }
可选:从 RHEL 9.3 开始,您可以使用
ssl_pass_phrase_dialog
指令为每个加密私钥配置一个在nginx
启动时调用的外部程序。向/etc/nginx/nginx.conf
文件中添加以下行:要为每个加密的私钥文件调用外部程序,请输入:
ssl_pass_phrase_dialog exec:<path_to_program>;
NGINX 使用以下两个参数调用该程序:
-
服务器名称在
server_name
设置中指定。 -
以下一种算法之一:
RSA
、DSA
、EC
、DH
或UNK
(如果无法识别加密算法)。
-
服务器名称在
如果要为每个加密的私钥文件手动输入密码短语,请输入:
ssl_pass_phrase_dialog builtin;
如果没有配置
ssl_pass_phrase_dialog
,这是默认行为。注意如果使用此方法,但至少有一个私钥受密码保护,则
nginx
服务无法启动。在这种情况下,请使用其它方法。如果您希望
systemd
在使用systemctl
工具启动nginx
服务时对每个加密的私钥提示输入密码短语,请输入:ssl_pass_phrase_dialog exec:/usr/libexec/nginx-ssl-pass-dialog;
出于安全考虑,配置成只有
root
用户才可以访问私钥文件:# chown root:root /etc/pki/tls/private/example.com.key # chmod 600 /etc/pki/tls/private/example.com.key
警告如果私钥被设置为可以被未授权的用户访问,则需要撤销证书,然后再创建一个新私钥并请求一个新证书。否则,TLS 连接就不再安全。
重启
nginx
服务:# systemctl restart nginx
验证
-
使用浏览器连接到
https://example.com
其它资源