免费 HTTPS 证书部署 - Let's Encrypt

前言

Let's Encrypt 是由非盈利性互联网安全研究小组(ISRG)提供的免费的自动化和开放的证书颁发机构。目前各浏览器支持度比较好,可信度较高。

Let's Encrypt 官方推荐使用 Certbot ACME 客户端来完成 HTTPS 的部署,其它语言或者环境(包括 Bash、Browser、C、Docker、Go、java、Nginx、Node.js、PHP、Perl、Python、Ruby 等等)可以查看 ACME 第三方客户端列表

我的系统环境是 CentOS7、Nginx。经过调试后,最后成功的方法是 Certbot 的 certbot-auto。

下载客户端

wget https://dl.eff.org/certbot-auto
chmod a + x ./certbot-auto
chmod +x ./certbot-auto

证书生成

两种方法

# 方法一(推荐)
./certbot-auto certonly --standalone --email '邮箱地址' -d 域名 [-d 域名]
# 方法二
mkdir -p 域名解析项目根目录/.well-known/acme-challenge
./certbot-auto certonly --agree-tos -m 邮箱地址 --webroot -w 域名解析项目根目录 -d 域名 [-d 域名]
  • 命令执行成功后,会显示 IMPORTANT NOTES(重要的笔记),包含 pem 文件的绝对路径。

Nginx 的关键修改

443 端口

# ssl_certificate、ssl_certificate_key 的值就是来自于证书生成命令执行成功后的「IMPORTANT NOTES」的内容
ssl on;
ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;

对于 http 的 80 端口访问,不推荐携带参数重定向到 https,建议直接返回错误或者不携带参数的返回到 https 首页。

证书续期

查看证书有效期 openssl x509 -noout -dates -in /etc/letsencrypt/live/[写你的域名]/cert.pem

因为证书的有效期是三个月,所以需要进行一下续期,续期命令是 certbot-auto renew, 可以通过 crontab 周期的自动执行。需要注意的是在执行续期命令之前,需要停止 Nginx,否则报 Problem binding to port 443: Could not bind to IPv4 or IPv6.. 错误。

crontab 示例:

0 3 3 * * Nginx 平滑停止 &&  certbot-auto 绝对路径 renew >/dev/null 2>&1 && Nginx 启动

我设置每个月第三天的凌晨三点,续期的结果无论是正确还是错误都输出到黑洞当中。这些你都可以灵活的设置,例如每周执行,并且续期结果也可以重定向到指定的日志文件当中。

知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
随喜
支付宝随喜
微信随喜

1

12

贵站目前使用的是这个???chrome 提示不安全

-- http://www.shephe.com

后三排

贵站目前使用的是这个???chrome 提示不安全

-- http://www.shephe.com

引用

感谢!已经处理,并且对文章内容进行了更新(主要增加了证书生成命令的另外一种方法以及其他的说明)。