一个快速获取/更新 Let’s encrypt 证书的脚本
[https://github.com/xdtianyu/scripts/tree/master/lets-encrypt]1
调用 acme_tiny.py 认证、获取、更新证书,不需要额外的依赖。
下载到本地
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.conf
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh
chmod +x letsencrypt.sh
配置文件
只需要修改 DOMAIN_KEY DOMAIN_DIR DOMAINS 为你自己的信息
ACCOUNT_KEY="letsencrypt-account.key"
DOMAIN_KEY="example.com.key"
DOMAIN_DIR="/var/www/example.com"
DOMAINS="DNS:example.com,DNS:whatever.example.com"
例如我的改成:
//only modify the values, key files will be generated automaticly.
ACCOUNT_KEY="letsencrypt-account.key"
DOMAIN_KEY="m69w.com.key
" //域名KEY
DOMAIN_DIR="/home/www/m69w.com
" //域名目录
DOMAINS="DNS:m69w.com
" //域名,多域名如:DOMAINS="DNS:1.m69w.com,DNS:2.m69w.com"
执行过程中会自动生成需要的 key 文件。
运行
./letsencrypt.sh letsencrypt.conf
注意
需要已经绑定域名到 /var/www/example.com
目录,即通过 http://example.com
http://whatever.example.com
可以访问到 /var/www/example.com
目录,用于域名的验证
例如我的就是/home/www/m69w.com
,但非多域名,测试不了!
看到以下信息表示生成/更新成功
Generate CSR…
Parsing account key…
Parsing CSR…
Registering account…
Already registered!
Verifying m69w.com…
m69w.com verified!
Signing certificate…
Certificate signed!
New cert: 52m.chained.crt has been generated
生成证书包括(生产的证书就在你放脚本的目录下
),
有些教程说会生成fullchain.pem和privkey.pem,请看另一个教程
-rw-r–r– 1 root root 3.2K Dec 28 17:04 letsencrypt-account.key
-rw-r–r– 1 root root 192 Dec 28 17:03 letsencrypt.conf
-rwxr-xr-x 1 root root 1.7K Dec 28 16:57 letsencrypt.sh
-rw-r–r– 1 root root 1.7K Dec 24 00:58 lets-encrypt-x1-cross-signed.pem
-rw-r–r– 1 root root 3.4K Dec 29 08:38 www.chained.crt //nginx配置用到的证书
-rw-r–r– 1 root root 1.8K Dec 29 08:38 www.crt
-rw-r–r– 1 root root 920 Dec 29 08:37 www.csr
-rw-r–r– 1 root root 1.7K Dec 28 17:04 example.com.key //nginx配置用到的KEY
nginx配置
listen 443 ssl;
ssl_certificate /path/letsencrypt/www.chained.crt;
ssl_certificate_key /path/letsencrypt/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
我的是:
server
{
listen 443 ssl; //如果需要spdy也可以加上,lnmp1.2及其后版本都默认支持spdy,lnmp1.3 nginx 1.9.5以上版本默认支持http2,如listen 443 ssl http2;
server_name m69w.com; //这里是你的域名
index index.html index.htm index.php default.html default.htm default.php;
root /home/www/m69w.com; //网站目录
ssl_certificate /path/letsencrypt/www.chained.crt;//前面生成的证书,改一下里面的域名就行,不建议更换路径
ssl_certificate_key /path/letsencrypt/example.com.key;//前面生成的密钥,改一下里面的域名就行,不建议更换路径
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
...
}
推荐证书和密匙路径不要改,这样下次再次生成时就不用手动改变路径!
cron 定时任务(三个月的有效期)
crontab -e //可添加到计划任务
crontab -l //显示当前任务
每个月自动更新一次证书,可以在脚本最后加入 service nginx reload等重新加载服务。
0 0 1 * * /etc/nginx/certs/letsencrypt.sh /etc/nginx/certs/letsencrypt.conf >> /var/log/lets-encrypt.log 2>&1
相关:
安利一下我这半个月学 HTTPS 后写出来的教程
https://github.com/letsencrypt/letsencrypt (Let’s encrypt开源)
https://www.v2ex.com/t/241819 (DNS问题)
https://gethttpsforfree.com/ (开源的在线生成器网页源码)
https://www.sslforfree.com/ 在线生成器
https://github.com/diafygi/acme-tiny acme_tiny相关
https://github.com/Neilpang/le 另一个脚本
https://github.com/dennydai/docker-letsencrypt docker脚本