一个快速获取/更新 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 条回复
Cavolo
2015-12-07 20:17:07 +08:00
get ,感谢楼主
ahu
2015-12-07 20:26:01 +08:00
我就知道会有,好快!
ahu
2015-12-07 20:35:13 +08:00
@clanned 何不把本文内容设为该项目的 README.md
clanned
2015-12-07 20:50:24 +08:00
@ahu 已经添加到 README-CN.md ,谢谢建议
mx1700
2015-12-07 21:05:01 +08:00
为什么我着没有 /etc/ssl/openssl.cnf 文件。。。生成失败
pupboss
2015-12-07 21:16:00 +08:00
话说这个有没有可能像 StartSSL 一样,那谁脑子一抽就给封了
lution
2015-12-07 21:31:04 +08:00
Lets Encrypt 的认证一定要通过 80 端口吗? 可以通过其他端口( 443 )来进行认证吗?
skydiver
2015-12-07 21:53:13 +08:00
@lution 你还没有证书呢,怎么通过 443 。。。
yeyeye
2015-12-07 22:06:10 +08:00
请收下我的膝盖吧!
yeyeye
2015-12-07 22:20:52 +08:00
@clanned 细细看了楼主 2 遍正文,有一个疑问 /需求想提出来。

在这个浮躁的社会,一个 IP 用 SNI 搞好几个证书将是常态( sha256 就把 IE6 刷掉了,以后又不准签发 sha1 证书,所以 SNI 必然很快会是常态)

所以楼主可否解决此问题,一个脚本直接可以处理多个证书,我想这个问题处理好,就能满足大部分的欲望了……
clanned
2015-12-07 22:27:06 +08:00
@pupboss startssl 有段时间被封过?最近两年都可以正常使用


@lution 用官方客户端可以用 standalone 模式,指定端口,这样客户端会自己建一个 Web 服务器用于认证。


@mx1700 是不是没有安装 OpenSSL ?还是自己编译了 OpenSSL ,找下

/usr/local/ssl/openssl.cnf
/usr/lib/ssl/openssl.cnf
/etc/ssl/openssl.cnf
clanned
2015-12-07 22:30:31 +08:00
@yeyeye 你是说一个证书多个域名吗? DOMAINS="DNS:example.com,DNS:whatever.example.com",这个配置是两个域名的例子,你按照格式添加就行了,最好不要太多
oott123
2015-12-07 22:46:36 +08:00
@mx1700 CentOS 好像是 /etc/pki/ssl 还是 /etc/ssl/pki 目录下
xhat
2015-12-07 22:47:12 +08:00
dns query timed out 是怎么回事,难道 dnspod 在国外不被解析么
xhat
2015-12-07 22:48:13 +08:00
@clanned @mx1700
/etc/pki/tls/openssl.cnf
yylzcom
2015-12-07 23:00:50 +08:00
@clanned 一个服务器上好几个网站需要好几个证书,这个有没有什么办法呢
imWBB
2015-12-07 23:43:44 +08:00
试了 很好用。
clanned
2015-12-07 23:44:49 +08:00
@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"
imxieke
2015-12-07 23:54:45 +08:00
支持通配符不?(我想我自己已经有答案了 )
yeyeye
2015-12-08 00:09:47 +08:00
@clanned 看你的解释感觉这个 Let's encrypt 简直不能更棒了,完全不像一个刚出生的婴儿……还能搞自动化,验证方式也多样化。如果不被打压,确实很赞!以前 startssl 被墙了一次(使用了 Startssl 的国外服务器站点都被墙了一小段时间,我记得是很短的一个时间,几个小时?几天?)

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

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

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

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

© 2021 V2EX