全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 7116|回复: 19

[疑问] 干货!acme-tiny Let's Encrypt证书自动脚本

[复制链接]
发表于 2016-4-25 09:05:31 | 显示全部楼层 |阅读模式
本帖最后由 skywing 于 2016-4-25 20:56 编辑

https://github.com/diafygi/acme-tiny
试用了一下,比Let's Encrypt官方工具更好用
简单把步骤说下:
1 此脚本需要python和openssl支持,LINUX一般都自带,没有请自行安装 开始之前创建一个文件夹存放文件
  1. mkdir ~/letsencrypt
  2. cd ~/letsencrypt
复制代码

2 创建一个 Let's Encrypt账户私钥,以便让其识别你的身份
  1. openssl genrsa 4096 > account.key
复制代码

如已用官方工具生成私钥,需要将其转换为acme-tiny支持的PEM格式
  1. # 下载转换脚本
  2. wget -O - "https://gist.githubusercontent.com/JonLundy/f25c99ee0770e19dc595/raw/6035c1c8938fae85810de6aad1ecf6e2db663e26/conv.py" > conv.py
  3. # 复制私钥到工作目录
  4. cp /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/<id>/private_key.json private_key.json

  5. #创建DER私钥
  6. openssl asn1parse -noout -out private_key.der -genconf <(python conv.py private_key.json)

  7. # 转换到 PEM格式的私钥
  8. openssl rsa -in private_key.der -inform der > account.key
复制代码

3 创建域名证书请求文件(CSR)
  1. #创建域名私钥
  2. openssl genrsa 4096 > domain.key
  3. #单域名CSR用如下命令
  4. openssl req -new -sha256 -key domain.key -subj "/CN=yoursite.com" > domain.csr
  5. #多域名CSR用如下命令(一般都至少要为根域和WWW申请证书吧)
  6. openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:yoursite.com,DNS:www.yoursite.com")) > domain.csr
复制代码

4 配置验证域名所有权的服务
  1. #创建验证目录,我用的是
  2. mkdir -p /home/wwwroot/challenges/
复制代码

配置一个HTTP服务让LETSENCRYPT能下载验证文件
  1. server {
  2.     listen 80;
  3.     server_name yoursite.com www.yoursite.com;

  4.     location /.well-known/acme-challenge/ {
  5.         alias /home/wwwroot/challenges/;
  6.         try_files $uri =404;
  7.     }

  8.     ...the rest of your config
  9. }
复制代码

5 获取签名证书
  1. python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /home/wwwroot/challenges/ > ./signed.crt
复制代码

我在这一步遇到如下问题,
  1. ValueError: Wrote file to /home/wwwroot/challenges/xxxxxxxxxxxxxxxxxxxxxxxxxxx, but couldn't download http://www.yoursite.com/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxxxxxx
复制代码
,是因为我DNS服务器是DNSPOD,letsencrypt无法解析域名造成的,最终把域名DNS服务器改到dns.he.net解决!
  1. #用nginx还得合并中间证书
  2. wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
  3. cat signed.crt intermediate.pem > chained.pem
复制代码

6 安装证书 (以NGINX为例说明)
  1. server {
  2.     listen 443;
  3.     server_name yoursite.com, www.yoursite.com;

  4.     ssl on;
  5.     ssl_certificate /path/to/chained.pem;
  6.     ssl_certificate_key /path/to/domain.key;
  7.     ssl_session_timeout 5m;
  8.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  9.     ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
  10.     ssl_session_cache shared:SSL:50m;
  11.     ssl_dhparam /path/to/server.dhparam;
  12.     ssl_prefer_server_ciphers on;

  13.     ...the rest of your config
  14. }

  15. server {
  16.     listen 80;
  17.     server_name yoursite.com, www.yoursite.com;

  18.     location /.well-known/acme-challenge/ {
  19.         alias /var/www/challenges/;
  20.         try_files $uri =404;
  21.     }

  22.     ...the rest of your config
  23. }
复制代码

7 创建自动更新脚本(证书有效期三个月,一般一个月更新一次吧)
  1. vi ~/letsencrypt/renew_cert.sh
  2. #!/usr/bin/sh
  3. python /path/to/acme_tiny.py --account-key /path/to/account.key --csr /path/to/domain.csr --acme-dir /var/www/challenges/ > /tmp/signed.crt || exit
  4. wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
  5. cat /tmp/signed.crt intermediate.pem > /path/to/chained.pem
  6. service nginx reload
  7. #赋予执行权限
  8. chmod +x renew_cert.sh
复制代码

加入crontab
  1. 0 0 1 * * ~/letsencrypt/renew_cert.sh 2>> /var/log/acme_tiny.log
复制代码

搞定收工
发表于 2016-4-25 09:08:17 来自手机 | 显示全部楼层
技术贴必须顶
发表于 2016-4-25 09:17:42 来自手机 | 显示全部楼层
好像有点复杂,有一键的么?
发表于 2016-4-25 09:20:52 | 显示全部楼层
自动脚本。。好麻烦     还以为是一件的
发表于 2016-4-25 09:25:41 | 显示全部楼层
好复杂 看不懂 听说 openlitespeed 要出一键包,,,忽悠他们弄
发表于 2016-4-25 09:28:07 来自手机 | 显示全部楼层
太复杂还不如用vpser的
 楼主| 发表于 2016-4-25 09:51:51 | 显示全部楼层
醉里耍大刀 发表于 2016-4-25 09:17
好像有点复杂,有一键的么?

一键的创建验证域名所有权的HTTP服务和安装证书这两步不好弄,各人的环境都不一样
suzizi 该用户已被删除
发表于 2016-4-25 10:13:08 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2016-4-25 10:46:27 | 显示全部楼层
在搬瓦工上测试成功吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-30 12:15 , Processed in 0.089470 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表