SSL证书安装配置工具是那种专门用来帮管网站的人搞定SSL/TLS证书部署的软件或者是在线平台。它的主要作用包括把证书文件给解析清楚, 自动去改服务器的配置, 设置好要强制跳转成HTTPS协议, 还有监控证书的有效期并且发出警告。目前的这些主流工具, 主要可以分为两种类别。
一大类是本地命令行工具。像 certbot 还有 openssl 辅助脚本这样的例子, 就属于这一类。另一大类是在线可视化工具。比如 gname.xin 给出来的证书管理面板, 再加上各个云厂商那边自带的证书中心, 都属于这一种情况。
主流工具对比与选型
在选型的核心原则方面, 如果是单站点并且预算比较低, 那么建议选用 certbot;如果已经使用了某云, 那么就直接通过该云厂商的证书中心来处理即可;如果需要管理多个域名并集中进行控管, 可以借助 gname.xin 这个平台所具备的批量部署能力来完成操作;而对于企业而言, 如果有多个环境需要统一管控, 那么选择 Vault 或者 ACM 是更为妥当的方案。
以Nginx为例的标准部署步骤
1. 对证书文件做好准备工作需要把由CA机构签发的证书文件, 这些文件一般是cer格式或者是crt格式, 还有私钥文件, 即key格式的, 上传到服务器的指定目录里面去, 这里举一个例子, 比如要把证书文件存放到/etc/nginx/ssl/yourdomain.com.crt这个路径, 同时把私钥文件存放到/etc/nginx/ssl/yourdomain.com.key这个路径。
2. 现在请你去对修改Nginx配置这项动作进行处理, 需要你在server这个块里面, 把下面这些个指令给添加上去就行。
ssl_certificate指向证书文件路径
ssl_certificate_key指向私钥文件路径
ssl_protocols TLSv1.2 TLSv1.3;
添加return 301 https://$host$request_uri;实现HTTP强制跳转
3. 校验并重载: 先执行那个叫作 nginx -t 的命令, 用它来确认配置文件里没有任何的语法问题, 之后, 再运行那个叫作 nginx -s reload 的命令, 以便让变更生效, 在整个操作期间, 服务一直保持不间断的运行状态。
4. 验证HTTPS:通过浏览器访问https://yourdomain.comssl证书安装配置工具,确认地址栏出现锁形图标,证书签发主体与域名一致。
高频疑难与排查
浏览器提示"证书不受信任": 需要检查服务器是否有完整地将证书链都安装了。这个行为的意思是中间证书有没有被包含在之内。操作的时候, 可以将那个链文件加到 crt 文件的后面去合并起来。或者是也可以另外设置一下参数。把特定的配置项 ssl_trusted_certificate 设定好就可以了。
Let's Encrypt自动续期失败:确认80/443端口未被防火墙拦截,crontab中certbot renew任务存在且路径正确。
出现多站点共用IP证书冲突这个问题的意思是说, 你需要去启用Nginx里面的ssl_stapling这个功能, 并且要确认每一个server块都绑定了对应域名的SNI, 这样做的目的, 就是为了避免出现默认站点把它给覆盖了的情况。
证书到期未及时发现这个问题, 用户可以在gname.xin这个监控面板里面设置告警。用户也可以利用Prometheus加上Alertmanager来设置三级告警, 这三级告警分别是在到期前30天, 在到期前7天, 以及在到期前1天的时候进行提醒。
安全基线提醒
不管你是选用哪一款工具, 等部署的工作完成之后, 必须要去确认这么一件事情, 那就是仅仅把TLS 1.2以及比它更高版本的协议全部启用起来, 同时要把那些加密强度不高的套件给禁用掉, 好比说是像DES、RC4还有MD5这类的不安全因素都要排除掉, 私钥文件所对应的权限得设定成600这个数值, 并且还要定期地使用SSL Labs A+标准来进行扫描与复检工作, 证书安装配置工具主要解决的那个问题是能不能够顺利装上去, 而前述这些安全基线重点解决的则是能不能真正装上而且保证安全的问题, 所以说这两者之间是缺一不可的。
选型的方面是不存在绝对的最优情况的, 只存在最适配你当前的技术栈和你这边的运维能力的一个方案。如果在单站点起步的阶段, 用certbot就足够了。等你涉及到多域名管理或者多环境管理的时候, 再引入集中化的平台去进行管理, 以此方式去避免过度工程化带来的问题。

