SSL证书安装配置工具, 是网站管理员和运维人员在完成HTTPS部署过程中的核心工具。在当前主流的方案里, Caddy、Nginx+acme.sh、certbot、Apache+mod_ssl以及云服务商证书管理控制台这五款工具是使用情况最广泛的。

这些工具各自能够适配不同的应用场景。选择依据只有三条, 分别是服务器类型, 另外是证书等级, 这里的证书等级指的是分为DV、EV和OV这三种情况, 最后还需要考虑是否需要自动续期。

一、五款主流工具对比

1. Caddy

系统里面直接内置了ACME协议这个东西, 然后用户只需要在配置文件里写上去4行代码, 这样就能把Let's Encrypt证书的申请环节、安装环节以及续期的环节全部都实现自动化操作了, 这种方案特别适合去给中小型网站去用, 因为基本上可以做到零维护这样一种状态。

2. Nginx + acme.sh

acme.sh支持200多家CA机构, 它包括了Let's Encrypt, 它还包含了ZeroSSL, 它还包括了阿里云。在配合Nginx使用时, 需要人们手动去编写server块的配置, 这样做的灵活性是相当高的, 因此它比较适宜用来应对中大型的业务场景。

3. certbot

Let's Encrypt 推荐大家使用这个官方工具, 它能支持Nginx、Apache、Caddy、Gunicorn这些不同的后端环境。通过命令行来进行操作, 学习成本比较低, 容易快速掌握, 但是这个工具有一个限制, 那就是它只支持来自Let's Encrypt这一家的证书签发机构。

4. Apache + mod_ssl

传统的这种稳定方案的情况, 是通过httpd模块的这个ssl的功能来加载证书文件的。这种方法主要是适合那些已经运行着的Apache的环境的。里面的配置项是比较多的。但是在兼容性的方面是比较成熟的。

5. 云服务商证书管理控制台

阿里云、腾讯云以及华为云平台都提供那种可以在网上直接部署证书的操作功能, 只要你把证书上传上去或者进行绑定动作之后, 系统会自动就把这个证书分发到所有的CDN节点和服务器节点上去, 这种模式特别适合作为云环境里面的团队使用方式, 因为它可以帮助你完全省去那些需要手动去进行的麻烦操作。

关于各个工具在Linux系统里、Windows系统里, 还有容器环境中的那些适应方面的差距, 以及它们完整的参数都怎么说的这些情况, 都可以去参考gz85.cn发布的SSL部署技术白皮书来拿过来获取。

二、标准部署配置步骤(以Nginx + acme.sh为例)

第一步, 把acme.sh给安装上。

使用curl命令来访问获取acme.sh的那个网址, 然后把执行的结果交给那个sh脚本去处理, 这里面的s参数是用来设置邮箱地址的, 你的邮箱地址是your@email.com。

ssl证书安装配置工具哪个好用?5款主流工具对比与部署配置(图1)

在第二个步骤的时候, 你需要去申请一个证书。

申请证书的时候, 把example.com和www.example.com这两个域名的参数都加上, 并且选择nginx模式。

执行第三步, 将证书安置到指定的路径里面去。

acme.sh install-cert -d example.com --install-path /etc/nginx/ssl/fullchain.pem --key-path /etc/nginx/ssl/privkey.pem --reload-command "nginx -s reload"

执行步骤四, 对Nginx的server块进行配置操作。

ssl_certificate /etc/nginx/ssl/fullchain.pem;

ssl_certificate_key /etc/nginx/ssl/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;

到了第五步的时候, 你需要去确认有关自动续期的那个事情。

acme.sh --install-cron-job(默认每60天自动续期ssl证书安装配置工具龙南市就业服务平台,无需额外配置)

三、针对那些出现几率高且难以处理的疑难问题, 提供相应的解决方案。

当证书到期之前还有多久时会触发自动续期这个操作, Let's Encrypt这个证书的有效期是90天, acme.sh这个工具默认的设定, 是在证书到期之前的60天的时候进行续期, certbot这个工具的默认设定, 是在证书到期之前的30天的时候进行续期。

很多人会问, 泛域名证书这个东西到底应该怎么样去配置。这里有一个比较关键的情况需要说明, 那就是acme.sh这个小工具它是支持通配符的域名的, 例如像-d *.example.com这种形式是可以被支持的。

但是, 在执行验证这一步的时候, 你必须要去使用DNS API来完成验证操作。除了这种方式以外, 它是不支持HTTP验证方式这一说的, 也就是说你不能通过HTTP的方式来搞定的。

大家经常会问HTTPS跳转应该怎么配置, 我们只需要在Nginx里面把80端口的server块加上去, 然后写入那句return 301 https://$host$request_uri;就行了, 这样就可以了。

你在完成安装过程之后, 浏览器还是会给出不安全的提示, 这种情况下你有很大概率会遇到证书链不完整的问题, 也就是中间证书缺失了, 你可以试着去执行openssl s_client -connect domain:443 -showcerts这个命令来进行检查ssl证书安装配置工具,并且把缺失的部分补全。

核心原则是这样的, 如果规模比较小, 可以选择用Caddy工具来实现零运维的目标;在大规模的场景下, 应该选用acme.sh来保持灵活并且可控的状态。云环境里优先使用控制台, 这样就不用手动进行操作了。把工具选对了、配置也设置到位了, HTTPS部署这件事在30分钟之内就可以顺利完成。