使用 certbot 生成Let’s Encrypt通配符SSL证书

当我们有多个二级域名都需要启用 SSL 证书的时候,如果一个一个的进行证书的设置与管理是比较费时间精力的事情,还好有通配符证书。通配符证书能支持譬如 *.iconben.com 这样的多个二级域名,十分方便。

Let’s Encrypt 从2018-03-13起开始支持通配符证书。因此这给了我们免费实现系列站二级域名共用同一个证书的机会。因我们的域名解析托管在 DNSPod,以下简要说明如何使用客户端 certbot 工具,配合 certbot-dns-dnspod 插件,对于托管在 DNSPod 的域名生成通配符证书。

生成证书

安装 Certbot,选择相应的 Web Server 和操作系统,按照说明安装 Certbot。

然后通过 DNS 验证的方式生成证书:可以安装 Certbot’s DNS plugins。手动和自动都可以生成 SSL 证书,因通配符的证书有效期也是3个月,使用插件自动生成的话续期十分方便。

因本站域名解析使用的是DNSPod,可以使用 certbot-dns-dnspod,使用 pip 安装,如 pip3 install certbot-dns-dnspod。

针对那些没有在列表中DNS服务商,可以去自行搜索相关插件。

安装完成后,还需要登录到 DNSPod控制台 生成API Token,并保存在配置文件/path/credential.ini中。注意 DNSPod 已经启用了 V3 版 API,但我们这里使用的是 V2 版。配置文件中需要有 email 参数,必须是 DNSPod 账号的登录邮箱,api_token 参数,必须是双引号括起来的 “ID,Token”的形式,例子如下:

dns_dnspod_email = someone@example.com
dns_dnspod_api_token = "12345,c54cd52eae137f765af143d1dfader3434"

接下来运行命令行:

sudo certbot certonly -a dns-dnspod --dns-dnspod-credentials /path/credentials.ini -d example.com -d "*.example.com" 

# -a:指定使用的插件
# --dns-dnspod-credentials :指定 dnspod 使用的 含 email 和 api_token 的配置文件
# -d:指定要生成证书的域名

其他DNS plugins的使用也是类似的。

运行命令后,根据向导输入邮箱,同意条款,选择是否与 EFF 共享个人邮箱信息,然后 DNS plugin 创建 DNS TXT 记录,进行域名验证,然后生成 SSL 证书,然后删除 DNS TXT记录。最后提示证书生成成功!

网站实现HTTPS协议

HTTPS协议的作用和好处就不多说了。

整个过程的步骤,一是要找到一个证书。

二是安装证书,尤其对于一台服务器部署多个虚拟站点的情况。

证书方面,虽然自己也可以制作,但用户访问的时候,会提示需要用户接受该证书,这个很不友好。换成浏览器能接受的CA发行的证书就没有这个问题了。收费的不用说,贵的便宜的都有,一般的主机托管服务商都会有。免费的找到几家公认可以用的,一家是国内的wosign,一家是国外的startcom,应该都好用,免费ssl主要是针对域名进行验证的,申请过程中需要证明对域名的拥有权,可以通过在网站根目录上传特定文件,或者添加特定二级域名来验证。过程中还发现赛门铁克也注册了一个叫freessl.com的网站,里面显示即将推出免费ssl,咱们拭目以待吧。

安装证书一般都有教程,本人是阿里云的ECS服务器,centos6.7 + apache,找到对应教程即可。值得注意的是,阿里云版本的ssl配置文件位置和独立安装的centos的ssl配置文件的位置稍有不一样。

可以参考:https://freessl.wosign.com/aliyun-ssl.html

由于多数免费ssl会有对应的域名限制(譬如wosign上面最多允许一个证书对应5个域名),所以当单台服务器上有超过五个站点都需要启动https的时候,需要再申请另外的ssl。这时候,需要注意ssl配置文件里面的虚拟主机的设置。要考虑用不同的端口来对应不同的证书。