如何申请免费的网站安全证书?
随着互联网的发展,网络应用的安全问题越来越受到各方的重视。为保证网络上基于HTTP协议传输内容的安全,越来越多的浏览器都会对未进行TLS/SSL加密的网站提示不安全。对于各种移动APP上的小程序,数据接口的TLS/SSL加密也成为硬性要求。可是查看各大云服务平台上的SSL证书,单域名证书动辄上千的价格,对于普通个人网站和小程序开发者来说,着实有些贵。今天我们一起来看一种免费的SSL证书 — Let' Encrypt。
什么是Let’s Encrypt证书?
Let’s Encrypt是一家免费、开放、自动化的证书颁发机构,任何拥有域名的人都可以通过Let’s Encrypt为自己的网站免费获取受信任的HTTPS(SSL/TLS)数字证书。目前Let’s Encrypt在全球备受欢迎,各大网络服务提供商均为其提供了赞助。
如何申请Let’s Encrypt证书呢?
目前 Let’s Encrypt 支持单域名CA证书和通配符域名证书。顾名思义,单域名证书即仅可保护单个域名的证书,通配符域名证书可以保护由通配符指定的一系列域名。在拥有域名的前提下,要通过 Let’s Encrypt 申请域名证书,首先您必须拥有对应域名要指向的服务器的命令行访问权限。对于那些租用服务商空间的用户(例如用于 WordPress),很可能不具备服务器的命令行访问权限,那么这时服务商一般会提供对应的证书申请方式和部署入口,这里我们不详细叙述,只针对具有具有服务器命令行操作权限的情况来讨论。
下面我们以 CentOS
系统下使用 Certbot
来操作为例,依次来看一下如何申请域名安全证书及证书的续期。
Certbot
Certbot 是 EEF 开发的SSL证书获取工具。在你的服务器上,可以使用Certbot从Let’s Encrypt获取安全证书,在需要时可以通过Certbot来激活配置HTTPS。Certbot 也可以作为一个客户端,用于申请其它遵循 ACME 协议的安全证书。 安装Certbot的操作非常简单,只需要依次执行如下命令即可:
yum install epel-release -y
yum install certbot -y
在通过 Certbot 为域名申请安全证书的过程中,Let’s Encrypt 需要验证用户对域名的所有权,通常有三种方式:HTTP-01、TLS-SNI-01、DNS-01。HTTP-01 的方式需要在 Web Server 的指定目录存放指定文件,相对来说,不便于统一管理。TLS-SNI-01 方式已经停止使用。所以这里我们主要介绍通过 DNS 来验证的方式。
安全证书的申请
比如我们要申请证书的域名为 example.com,同时在申请证书的过程中需要提供一个邮箱来创建对应的用户信息,我们这里以 xxxx@126.com 为例来做演示。 在命令行中输入以下命令:
sudo certbot certonly --email xxxx@126.com --preferred-challenges dns --manual -d example.com --server https://acme-v02.api.letsencrypt.org/directory
certonly
:
--email
: 指定用于登记身份的邮箱。
--preferred-challenges
: 指定所有权验证方式,这里我们选 dns
。
--manual
: 代表手动操作(好多服务都提供了 certbot
证书自动申请和续期的插件)。
-d
: 指定为哪个域名申请安全证书,这里我们指定了 example.com,如果要为该域名及一系列子域名申请,则可以通配符方式,即 *.example.com。需要注意的是,通过 *.example.com 申请的域名,可以用于 a.example.com 和 b.example.com,但是不能用于 c.a.example.com 。如果需要为 c.a.example.com,则需要再为 *.a.example.com 申请。如果希望一次为多个域名申请安全证书,可以通过 -d 指定多次域名。比如 -d example.com -d *.example.com -d *.a.example.com
。
--server
: 指定提供服务的 Let’s Encrypt ACME 服务器,必填。
使用一个邮箱首次申请证书时,还会被要求填写一系列的信息,按照实际情况填写并同意 Let’s Encrypt 协议即可。
在申请证书的过程中,程序会提示申请证书的主机IP与所申请证书的绑定关系会被公开记录,询问你是否同意,这里选 Y
即可。
然后程序会要求你在域名的 DNS 解析服务器上添加新的 TXT 记录,比如 _acme-chanllenge.example.com
, 请按照要求配置并确认。在为多个域名申请证书的时候,可能会被要求多次添加 DNS 解析记录,依次添加即可,在证书申请完毕之前,请勿删除或覆盖本次添加的 DNS 解析记录。
证书申请成功后,会保存在服务器的 /etc/letsencrypt/live/example.com/
目录。接下来,我们根据自己所有服务程序的安全证书配置方式来进行配置即可,这里不再赘述。
安全证书的续期
安全证书申请下来后,会有三个月的有效期。到期前,注册所用的邮箱中会收到证书即将到期的通知。如果我们想继续使用证书,就要在证书到期前进行续期。续期时,在对应的服务器上输入如下命令:
sudo certbot certonly --preferred-challenges dns-01 --manual -d example.com --server https://acme-v02.api.letsencrypt.org/directory
操作过程与申请时基本相同。证书续期后,如果你所用的服务程序无法自动重新加载新证书,则你还需要手动加载新证书。
证书续期与重新加载的过程,你也可以创建一个 shell
脚本通过系统的 crontab
任务来定期执行,以免未及时续期证书而影响线上服务。
需要注意的是,证书的更新操作是有频率限制的,在测试证书申请或续期的过程中,可以在命令中添加 --dry-run
命令。
安全证书的撤销及删除
如果安全证书不再使用或是申请撤销,请不要直接手动删除,可以通过执行下面的命令来执行撤销:
sudo certbot revoke --cert-path /path/to/your/cert
--cert-path
: 指定要撤销的证书的路径。
要删除安全证书,可以通过如下命令:
sudo certbot delete
程序会列出现有的域名证书列表,输入你想要删除的证书序号并回车即可。