用certbot自动化申请Let's Encrypt免费HTTPS证书

发布于 2017-02-18 23:04:39

更新1

可通过一些插件提供自动的DNS设置功能,然后通过设置的 DNS TXT 记录来验证域名所有权。比如 cloudflare 要这么使用:

certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials ~/.dotfiles/secret/cloudflare.credentials.ini \
    -d cybervir.us \
    -d '*.cybervir.us'

其中 cloudlfare.credentials.ini 存储的是 cloudlfare 的 API 访问授权密钥:

# Cloudflare API credentials used by Certbot
dns_cloudflare_email = [email protected]
dns_cloudflare_api_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

安装

参见官网:

Debian8 报错:The value 'jessie-backports' is invalid

解决方案:

echo 'deb http://ftp.debian.org/debian jessie-backports main' >> /etc/apt/sources.list

使用

必要条件

  1. 连接公网的服务器
  2. 支持Python2
  3. 确定域名正确指向服务器
  4. 80 443 端口未被占用

示例:

certbot certonly --standalone -d a.example.com -d b.example.com
# 可同时申请多个域名,将在一个证书里出现多个域名
# certonly表示只用它来申请证书而不负责配置
# --standalone 表示使用内置服务器来提供静态文件,以供 let's encrypt 作为验证

# 如果服务器正在运行,推荐"webroot"插件(未验证):
# https://certbot.eff.org/docs/using.html#webroot
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is

certbot renew # 更新,证书有效期是90天

Nginx 配置

server {
    listen 80;
    listen 443 ssl http2; # http2 新版HTTP协议,可选
    ssl_certificate /etc/letsencrypt/live/a.example.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/a.example.com/privkey.pem;

    if ($scheme != "https") {
        rewrite ^ https://$host$uri permanent;
    }

    #...
}

certbot-auto

安装certbot-auto

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
sudo mv certbot-auto /usr/local/bin

certbot-auto用法同certbot:

certbot-auto certonly --standalone -d bitsflow.org
certbot-auto renew
comments powered by Disqus