虽然现在网上有很多SSL证书可以免费申请,但一般都是三个月的有效期,最长也就一年,如果手上站点比较多的话,还是可能会忘掉,搭配使用一些SSL证书管理工具会好一些,快到期的时候会收到提醒通知。但这还不是一劳永逸的办法,还是需要收到通知然后去手动申请并更新。
今天就来一个一劳永逸的办法,使用Certbot客户端自动更新SSL证书。由于一直都是使用的是lnmp一键脚本搭的环境,所以本文主要以Nginx进行说明。
PS:lnmp自从1.6版本后使用acme.sh脚本,自动安装和更新ssl证书。
Certbot是什么
Certbot是专门为Let’s encrypt制作的一个管理证书工具,可以通过它来生成证书管理更新Let’s encrypt证书。软件是免费的,需要root权限进行配置使用。
Let’s encrypt是什么
EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt免费证书。后来又有思科、 Akamai 、Linux 基金会等注明公司组织加入了合作,这些大牌组织的加入保证了这个项目的可信度和可持续性。Let’s Encrypt证书,即免费而且稳定好用。
配置Certbot客户端
下载并安装Certbot客户端
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
或者直接使用yum进行安装
yum install certbot-nginx
Certbot客户端生成证书
首先介绍一些Certbot客户端生成证书验证过程的两种模式standalone、webroot。
standalone 模式
Certbot自己运行一个web server来进行验证。如果服务器上已经安装了web server,比如 Nginx 、Apache 等,用 standalone 方式的话需要先关掉它,以免冲突。
webroot 模式
certbot会借助服务器上现有的web server来进行验证,在其目录下创建隐藏文件, Let’s Encrypt服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权。
这里因为我们已经安装了lnmp,所以使用webroot模式来让Certbot进行验证并生成证书。
./certbot-auto certonly --webroot -w [申请证书的网站根目录] -d [申请证书的域名]
在申请过程中,会提示需要输入邮箱、同意协议等操作,按照提示进行输入即可。
standalone模式的申请证书的命令也一并放出,生成过程中需要指定域名,填写邮箱,按照提示操作即可
certbot --authenticator standalone --installer nginx --pre-hook "nginx -s stop" --post-hook "nginx"
获取并配置网站证书
证书生成后,会在/etc/letsencrypt/live文件夹下,生成以域名命名的文件夹,SSL证书就在里面。包含cert.pem、chain.pem、fullchain.pem、privkey.pem四个文件。
然后按照lnmp网站使用SSL 连接里的方法,将fullchain.pem、privkey.pem配置修改到网站conf文件里。修改示例如下:
ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;
重启Nginx服务,即可使用https访问网站。
Certbot自动更新证书
可以使用Certbot客户端的命令进行更新
#手动更新
./certbot-auto renew -v
#自动更新
./certbot-auto renew --quiet --no-self-upgrade
至此,网站依靠Certbot客户端完成了自动更新Let’s encrypt证书,达到了永久使用的效果。
扩展阅读:
[…] certbot使用的免费ssl证书需要每三个月更新一次,有时候会碰到提示Couldn‘t download https://raw.githubusercontent.com 的错误,其实就是certbot自己升级的时候无法访问到源,有两种方法可以解决: […]