更新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
安装
参见官网:
- https://certbot.eff.org/docs/install.html
- Debian8:
$ sudo apt-get install certbot -t jessie-backports
Debian8 报错:The value 'jessie-backports' is invalid
解决方案:
echo 'deb http://ftp.debian.org/debian jessie-backports main' >> /etc/apt/sources.list
使用
必要条件
- 连接公网的服务器
- 支持Python2
- 确定域名正确指向服务器
- 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
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