ssl证书有广泛的应用。没有ssl证书的网站只能被http协议访问,大多数情况下访问者还会被警告当前网站不安全。搭建梯子的时候也可能用到证书,这是为了将梯子与墙内之间的流量伪装成访问网站的流量。
获取证书
如果域名托管在cloudflare上,那我推荐直接从这里获取证书。步骤见下图,注意第二步之后是申请一个证书,而第三步是为证书免费开通自动续订功能。我的第一个域名的证书是从cloudflare上获取的,如下图。
如果没有cloudflare,还可以使用acme.sh脚本获取证书。这个脚本支持http验证和dns验证两种获取证书的方式。http方式验证服务器上存在某种服务,一条命令直接获取证书;而dns方式不需要服务器的存在,但需要提供在域名托管服务商(cloudflare)那里的API Key。dns方式更好的地方在于,它能够每60天更新一次证书,类似cloudflare为证书自动续订。
我的另外一个域名的证书通过acme.sh的dns方式获取。在/root/.acme.sh/biter.online_ecc/biter.online.conf
中,能看到对cloudflare账户和api的记录。
1 | LOG_FILE='/root/.acme.sh/acme.sh.log' |
安装证书
所谓安装,其实就是把获取到的证书挪个地方。cloudflare界面上获取的证书可以放在服务器上的一个目录里,例如我是放在/root/cert_cf里:
1 | /root/cert_cf |
据我观察,这样安放好证书之后就可以不动了,以后cloudflare会自动为这两个文件续签。
如果证书是用acme.sh获取的,那么它应该已经存在于目录/root/.acme.sh中了。此时还需要一条指令:
1 | acme.sh --installcert -d example.com \ |
这条指令会自动把获取的证书挪到目录/root/cert/中,随后用service nginx force-reload
自动更新nginx服务使用的证书。如果acme.sh是采用dns方式获取证书的,随后也将和cloudflare一样定期更新证书。每次更新之后都会遵照这条安装指令将证书挪到/root/cert/并重载nginx服务。
nginx使用证书
后边在配置nginx服务器时,将其证书位置写成上述目录:
1 | server { |
然后用nginx -t
命令检查一下,没有问题就service nginx force-reload
重新加载nginx,并尝试从外部访问网址。如果访问不通,可能还需要在cloudflare上设置加密模式为“完全(严格)”:
参考