https://github.com/xdtianyu/scripts/tree/master/lets-encrypt
调用 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"
执行过程中会自动生成需要的 key 文件。
运行
./letsencrypt.sh letsencrypt.conf
注意
需要已经绑定域名到 /var/www/example.com
目录,即通过 http://example.com
http://whatever.example.com
可以访问到 /var/www/example.com
目录,用于域名的验证
cron 定时任务
每个月自动更新一次证书,可以在脚本最后加入 service nginx reload
等重新加载服务。
0 0 1 * * /etc/nginx/certs/letsencrypt.sh /etc/nginx/certs/letsencrypt.conf >> /var/log/lets-encrypt.log 2>&1
1
Cavolo 2015-12-07 20:17:07 +08:00 via iPhone
get ,感谢楼主
|
2
ahu 2015-12-07 20:26:01 +08:00
我就知道会有,好快!
|
4
clanned OP @ahu 已经添加到 README-CN.md ,谢谢建议
|
5
mx1700 2015-12-07 21:05:01 +08:00
为什么我着没有 /etc/ssl/openssl.cnf 文件。。。生成失败
|
6
pupboss 2015-12-07 21:16:00 +08:00
话说这个有没有可能像 StartSSL 一样,那谁脑子一抽就给封了
|
7
lution 2015-12-07 21:31:04 +08:00
Lets Encrypt 的认证一定要通过 80 端口吗? 可以通过其他端口( 443 )来进行认证吗?
|
9
yeyeye 2015-12-07 22:06:10 +08:00
请收下我的膝盖吧!
|
10
yeyeye 2015-12-07 22:20:52 +08:00
@clanned 细细看了楼主 2 遍正文,有一个疑问 /需求想提出来。
在这个浮躁的社会,一个 IP 用 SNI 搞好几个证书将是常态( sha256 就把 IE6 刷掉了,以后又不准签发 sha1 证书,所以 SNI 必然很快会是常态) 所以楼主可否解决此问题,一个脚本直接可以处理多个证书,我想这个问题处理好,就能满足大部分的欲望了…… |
11
clanned OP |
12
clanned OP @yeyeye 你是说一个证书多个域名吗? DOMAINS="DNS:example.com,DNS:whatever.example.com",这个配置是两个域名的例子,你按照格式添加就行了,最好不要太多
|
13
oott123 2015-12-07 22:46:36 +08:00 via Android
@mx1700 CentOS 好像是 /etc/pki/ssl 还是 /etc/ssl/pki 目录下
|
14
xhat 2015-12-07 22:47:12 +08:00
dns query timed out 是怎么回事,难道 dnspod 在国外不被解析么
|
17
imWBB 2015-12-07 23:43:44 +08:00
试了 很好用。
|
18
clanned OP @xhat 是的, let's encrypt 用的 Google 8.8.8.8 解析, dnspod 这段时间对 8.8.8.8 解析有问题,我昨天已经切换到 cloudxns 了。用 nslookup lets-encrypt.xdty.org 8.8.8.8 检查下域名,更多细节参考 https://www.xdty.org/1909
@yylzcom 同一个证书可以签署同一个域名的多个二级域名,也可以添加多个不同域名,应该没有影响,参考这个配置 DOMAINS="DNS:example.com,DNS:whatever.example.com" |
19
imxieke 2015-12-07 23:54:45 +08:00 via Android
支持通配符不?(我想我自己已经有答案了 )
|
20
yeyeye 2015-12-08 00:09:47 +08:00
@clanned 看你的解释感觉这个 Let's encrypt 简直不能更棒了,完全不像一个刚出生的婴儿……还能搞自动化,验证方式也多样化。如果不被打压,确实很赞!以前 startssl 被墙了一次(使用了 Startssl 的国外服务器站点都被墙了一小段时间,我记得是很短的一个时间,几个小时?几天?)
|
21
TrustyWolf 2015-12-08 00:17:10 +08:00
我有强迫症,绝对不会在运行着网站的服务器上额外安装任何东西...
So. 感觉 StartSSL 要方便不少。 |
22
yylzcom 2015-12-08 00:18:36 +08:00
@TrustyWolf 这个不会长时间占用 80 端口,而且整个过程首次也就不到 5 分钟,设置好之后就是几秒钟甚至自动续期... 比 StartSSL 方便...
|
23
TrustyWolf 2015-12-08 00:38:27 +08:00
@yylzcom 我比较希望 Let's Encrypt 能增加证书的有效期和域名的认证方式,比如通过添加 DNS 的 TXT 记录之类的。
|
24
clanned OP @yylzcom 并没有占用 80 端口,只是在你的 Web 目录写了认证域名的临时文件
@TrustyWolf 没有安装额外依赖,就是再发 HTTP 请求下载证书,比 startssl 方便很多。应该不会有 txt 认证,这个是认证域名解析,就算是你拿到免费的动态域名解析服务也可以签证书。 @imxieke 不支持通配符野证书 |
26
johnjiang85 2015-12-08 12:17:35 +08:00 2
@xhat
@clanned 关于 letsencrypt 无法验证使用 DNSPod 解析的域名的情况,我们经过排查主要为两个原因造成: 1. 超时错误。 DNSPod 免费服务器最近几天一直持续受到大流量攻击,且中国电信骨干网络出现拥塞,从国外访问 DNSPod 免费 DNS 服务器丢包严重,导致国外 DNS (如 8.8.8.8 )解析 DNSPod 免费域名异常,该问题目前已基本恢复正常。 2. DNS 验证失败错误. letsencrypt 在最终验证时使用了随机大小写( 0x20 encode )方式进行 DNS 解析请求,以及请求 CAA 记录(可以不支持)。 DNSPod 为了提高解析服务器的性能,以及应对随机大小写方式的 DNS FLOOD 攻击,是没有对该验证方式进行支持的,一律返回小写。我们正在对该问题进行验证,验证 OK 后将尽快更新支持 letsencrypt 。 |
27
Niphor 2015-12-08 13:38:29 +08:00
只能通过 80 端口略蛋疼啊
我开发板用的家用网络 80 被封了... |
28
xhat 2015-12-08 14:55:29 +08:00
@johnjiang85 消息来的太慢,已换 cloudxns 成功
|
29
mx1700 2015-12-08 16:58:42 +08:00
我用的阿里的 DNS 解析,报错 DNS query timed out
但 nslookup 检查 8.8.8.8 是能解析的,这是不想让我用吗 |
30
imxieke 2015-12-08 17:34:19 +08:00
你好 出现错误了唉 求解
``` Traceback (most recent call last): File "/tmp/acme_tiny.py", line 2, in <module> import argparse, subprocess, json, os, sys, base64, binascii, time, hashlib, re, copy, textwrap, logging ImportError: No module named argparse ``` |
31
lution 2015-12-08 18:19:13 +08:00
@johnjiang85 我这里始终都是 DNS query timed out
|
32
clanned OP @imxieke 你的操作系统、环境是什么? argparse 是 libpython2.7-stdlib 标准库里的内容
|
36
johnjiang85 2015-12-09 09:53:52 +08:00
@lution 现在国内 letsencrypt 解析 timed out 非常多,包括 DNSPod 、阿里等的 DNS 基本都是 timed out ,无法验证通过。 0x20 问题我们是使用国外节点进行测试的。
|
37
lution 2015-12-09 09:59:52 +08:00
@johnjiang85 感谢回复,因为这个问题已经迁到 CloudFlare 了,说实话,感觉真不错。
|
38
johnjiang85 2015-12-09 12:04:41 +08:00
测试感觉现在 letsencrypt 的验证规则一直在变, 12.09 的最新规则 DNSPod 、 ali 、 XNS 等都无法验证通过了,都报 timed out 错误, DNSPod 这边修改后的解析程序,测试已经可以验证通过,本周将从免费版逐步灰度更新。
主要修改内容有:1. 支持 0x20 encode ( letsencrypt 貌似已经修改了该规则,不再需要了,但是还是会进行支持). 2.对 CAA 请求进行应答 |
39
dot 2015-12-09 19:08:15 +08:00
我用安全宝倒是一次过了……从 DNSPod 出来的……
|
40
quericy 2015-12-13 18:38:20 +08:00
|
41
johnjiang85 2015-12-17 17:36:15 +08:00
@quericy
目前 DNSPod 免费套餐灰度更新了部分服务器,已经可以验证通过 letsencrypt 的证书了。 之前一些其他国内 NS 可以验证通过,但是现在无法验证通过了,主要是 letsencrypt 修改了规则,重新兼容新规则,并申请开通安全防护策略耽误了一些时间。 |
42
fishlee 2015-12-17 22:44:44 +08:00 via Android
谢谢分享了。
|
43
quericy 2015-12-18 11:45:12 +08:00
@johnjiang85 感谢,这次 2 分钟就搞定了
|
44
rio 2015-12-24 10:33:18 +08:00
@johnjiang85 又开始超时了
|
45
CloudXNS 2015-12-25 17:30:33 +08:00
CloudXNS 本版更新已兹磁,欢迎测试。~
https://www.cloudxns.net/Support/detail/id/1062.html |
48
janecc 2016-01-25 13:02:17 +08:00
不支持阿里 DNS ,怎么破解
|
50
baiyuxiong 2016-01-29 20:56:40 +08:00
这四个参数都表示什么意思?
ACCOUNT_KEY="letsencrypt-account.key" DOMAIN_KEY="example.com.key" DOMAIN_DIR="/var/www/example.com" DOMAINS="DNS:example.com,DNS:whatever.example.com" |
51
baiyuxiong 2016-01-29 21:13:50 +08:00
为什么没有 fullchain.pem 和 privkey.pem ?
nginx 应该怎么配置? |
52
a308057848 2016-02-03 17:21:47 +08:00
ACCOUNT_KEY 去哪里拿
|
53
clanned OP @a308057848 "执行过程中会自动生成需要的 key 文件。", 设置好名字就行,会自动生成。
|
55
panlilu 2016-02-08 16:33:53 +08:00
已用,非常赞,感谢已送上。
|
56
leobin 2016-03-03 17:18:16 +08:00
出现错误求教
Generate CSR...leob.csr error on line -1 of /dev/fd/63 3073984776:error:02001002:system library:fopen:No such file or directory:bss_file.c:169:fopen('/dev/fd/63','rb') 3073984776:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:172: 3073984776:error:0E078072:configuration file routines:DEF_LOAD:no such file:conf_def.c:197: Parsing account key... Parsing CSR... Traceback (most recent call last): File "/tmp/acme_tiny.py", line 198, in <module> main(sys.argv[1:]) File "/tmp/acme_tiny.py", line 194, in main signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca) File "/tmp/acme_tiny.py", line 70, in get_crt raise IOError("Error loading {0}: {1}".format(csr, err)) IOError: Error loading leob.csr: unable to load X509 request 3074353416:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: CERTIFICATE REQUEST |
60
yidongnan 2016-04-12 12:37:58 +08:00
@baiyuxiong fullchain.pem 和 privkey.pem 的问题解决了吗
|
61
Neo 2016-07-31 01:14:05 +08:00
Traceback (most recent call last):
File "/tmp/acme_tiny.py", line 198, in <module> main(sys.argv[1:]) File "/tmp/acme_tiny.py", line 194, in main signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca) File "/tmp/acme_tiny.py", line 123, in get_crt wellknown_path, wellknown_url)) 请问这个问题有解吗? |
63
Aduang 2016-12-08 00:52:46 +08:00
Traceback (most recent call last):
File "/tmp/acme_tiny.py", line 198, in <module> main(sys.argv[1:]) File "/tmp/acme_tiny.py", line 194, in main signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca) File "/tmp/acme_tiny.py", line 123, in get_crt wellknown_path, wellknown_url)) centos7 求救 |