[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脚本

标签:https, 证书, 一键包

你的评论