一个快速获取/更新 Let's encrypt 证书的 shell script

2015-12-07 20:10:44 +08:00
 clanned
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
```
23515 次点击
所在节点    分享创造
63 条回复
TrustyWolf
2015-12-08 00:17:10 +08:00
我有强迫症,绝对不会在运行着网站的服务器上额外安装任何东西...
So. 感觉 StartSSL 要方便不少。
yylzcom
2015-12-08 00:18:36 +08:00
@TrustyWolf 这个不会长时间占用 80 端口,而且整个过程首次也就不到 5 分钟,设置好之后就是几秒钟甚至自动续期... 比 StartSSL 方便...
TrustyWolf
2015-12-08 00:38:27 +08:00
@yylzcom 我比较希望 Let's Encrypt 能增加证书的有效期和域名的认证方式,比如通过添加 DNS 的 TXT 记录之类的。
clanned
2015-12-08 08:10:37 +08:00
@yylzcom 并没有占用 80 端口,只是在你的 Web 目录写了认证域名的临时文件


@TrustyWolf 没有安装额外依赖,就是再发 HTTP 请求下载证书,比 startssl 方便很多。应该不会有 txt 认证,这个是认证域名解析,就算是你拿到免费的动态域名解析服务也可以签证书。


@imxieke 不支持通配符野证书
dallaslu
2015-12-08 09:04:52 +08:00
@clanned 野卡证书……
johnjiang85
2015-12-08 12:17:35 +08:00
@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 。
Niphor
2015-12-08 13:38:29 +08:00
只能通过 80 端口略蛋疼啊

我开发板用的家用网络 80 被封了...
xhat
2015-12-08 14:55:29 +08:00
@johnjiang85 消息来的太慢,已换 cloudxns 成功
mx1700
2015-12-08 16:58:42 +08:00
我用的阿里的 DNS 解析,报错 DNS query timed out
但 nslookup 检查 8.8.8.8 是能解析的,这是不想让我用吗
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
```
lution
2015-12-08 18:19:13 +08:00
@johnjiang85 我这里始终都是 DNS query timed out
clanned
2015-12-08 18:35:44 +08:00
@imxieke 你的操作系统、环境是什么? argparse 是 libpython2.7-stdlib 标准库里的内容
imxieke
2015-12-08 18:41:49 +08:00
@clanned centos 6.5 64 位, python2.6 是 python 版本低了?
xhat
2015-12-08 18:42:02 +08:00
@imxieke
yum install python-argparse
imxieke
2015-12-08 18:52:44 +08:00
@xhat 好的 我在升级 python ,等下我试试 谢谢哈
johnjiang85
2015-12-09 09:53:52 +08:00
@lution 现在国内 letsencrypt 解析 timed out 非常多,包括 DNSPod 、阿里等的 DNS 基本都是 timed out ,无法验证通过。 0x20 问题我们是使用国外节点进行测试的。
lution
2015-12-09 09:59:52 +08:00
@johnjiang85 感谢回复,因为这个问题已经迁到 CloudFlare 了,说实话,感觉真不错。
johnjiang85
2015-12-09 12:04:41 +08:00
测试感觉现在 letsencrypt 的验证规则一直在变, 12.09 的最新规则 DNSPod 、 ali 、 XNS 等都无法验证通过了,都报 timed out 错误, DNSPod 这边修改后的解析程序,测试已经可以验证通过,本周将从免费版逐步灰度更新。
主要修改内容有:1. 支持 0x20 encode ( letsencrypt 貌似已经修改了该规则,不再需要了,但是还是会进行支持). 2.对 CAA 请求进行应答
dot
2015-12-09 19:08:15 +08:00
我用安全宝倒是一次过了……从 DNSPod 出来的……
quericy
2015-12-13 18:38:20 +08:00
@johnjiang85
我说用官方的 no root 工具咋一直报 dns 查询错误
原来是这样 orz

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/241819

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX