本文将记录一次在生产环境中更换 SSL 证书的过程,包括准备工作、遇到的问题和解决方案,以及如何重启和重新加载 Nginx 服务以使更改生效。
1. 确认证书过期
SSL 证书通常具有有效期,当证书过期时,用户访问网站时会看到浏览器警告,提示网站的安全连接无效。确认证书是否过期,可以通过以下方式:
- 浏览器提示:直接访问站点时,浏览器会显示证书过期的警告。
- 命令行检查:
这条命令会输出服务器的 SSL 证书详情,其中包括有效期。openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
2. 准备工作:更新证书文件
在证书过期后,第一步是获取新的 SSL 证书。通常,你可以从证书颁发机构(CA)那里获得新的证书文件。证书通常包括:
fullchain.pem
:完整证书链文件privkey.pem
:私钥文件
如果你已经手动更新了证书,接下来的步骤是确认证书文件已经正确安装,并配置在 Nginx 配置文件中。
3. 定位和检查 Nginx 配置
在生产环境中,可能没有直接访问 Nginx 命令(如 nginx
)的权限,或者 nginx
不是在系统路径中。为了解决这个问题,我们可以使用以下方法来查找 Nginx 安装路径。
使用 whereis
查找 Nginx
首先,我们可以使用 whereis
命令来查找 Nginx 的安装位置:
whereis nginx
这将显示 Nginx 的安装路径,例如:
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx
从这些信息中,我们可以确定 Nginx 主程序和配置文件的位置。
检查配置文件
Nginx 配置文件通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/
目录下。在配置文件中,你需要确认 SSL 证书的路径是否指向新的证书文件:
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
使用以下命令检查配置是否正确(此步骤务必执行检查):
nginx -t
如果出现类似 syntax is ok
和 test is successful
的消息,则说明配置无误。
4. 重启或重新加载 Nginx
在更新了证书文件后,需要重启或重新加载 Nginx 服务以应用更改。以下是常见的两种方式:
重启 Nginx 服务
如果你修改了 Nginx 的其他配置(如代理、虚拟主机等),可以选择完全重启 Nginx:
sudo systemctl restart nginx
重新加载 Nginx 服务
如果只更新了 SSL 证书,可以选择重新加载 Nginx 配置,而不影响现有连接:
sudo systemctl reload nginx
使用 systemctl
的好处是它能自动管理 Nginx 服务的状态,无需手动启动和停止进程。
5. 验证证书更新
更新证书并重新加载 Nginx 后,访问网站时应该能够看到新的证书生效。为确保更新成功,可以使用以下命令检查 SSL 证书:
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
检查证书的有效期和颁发机构,确保显示的是新的证书。
另外,也可以在浏览器中访问网站,查看证书的详细信息,确保其有效期和颁发机构符合预期。
6. 常见问题排查
证书文件路径不正确
确认 Nginx 配置文件中指向的证书文件路径是否正确。确保文件权限正确,Nginx 进程能够访问到这些文件。
证书没有覆盖到所有服务
在有多个子域或虚拟主机的情况下,确认所有相关服务的证书路径都已更新。
浏览器缓存问题
浏览器可能会缓存旧证书。可以尝试清除浏览器缓存,或者使用无痕模式访问网站。
7. 总结
在生产环境中,务必确保更新后的证书及时应用,避免因证书过期带来的潜在风险。在进行更换操作时,保持良好的操作习惯和及时的监控,可以确保网站的安全和稳定运行。