多服务器部署 let's encrypt 的几个问题

2016-08-29 13:11:56 +08:00
 cnnblike

是这样子的,人在国外,所以访问国内不是很快,打算在 hyper.sh 上和网易蜂窝上各自部署一个 docker 镜像,用来放自己的静态博客,用 route53 之类的服务弄个分区解析。这其实难度并不是很高,我个人估计只要把镜像 push 到两个网站,然后 hexo deploy 的设置项弄成两个 git 同步就行了。

但是麻烦往往是因为想折腾才出来的。想给博客加上 ssl ,这个时候麻烦就来了, let's encrypt 的原理决定了只能对其中一个的请求生效吧?

我只能想到一个主-从同步证书的方案,通过 git 的 post-receive hook 做同步,但是问题还是大,以哪个 docker 为主应该是根据 let's encrypt 的服务器解析到哪个 docker 的 IP 来决定的,谁主谁从?更有普遍性的,如果我以后打算更多的 docker 提供服务的话,我该怎么把他修改成 1 主-多从的方案呢?

我怎么弄可以让整个实现方案优雅一点?暂时不考虑 dns 记录验证 Domain Validation 的方式,那个对 DNS 服务商的 API 依赖较高,指不定我哪天就换 DNS 服务商了呢。。

顺便求问,因为现在已经有国外的地址和信用卡了,所以打算把在万网买的域名都放到国外的域名商那边,求问哪个域名商靠谱一点价格稳健一点?

3957 次点击
所在节点    SSL
10 条回复
UnisandK
2016-08-29 13:24:52 +08:00
ACME 验证就无所谓解析到哪个 CDN 了吧
cnnblike
2016-08-29 13:31:24 +08:00
@UnisandK 不是 CDN ,是直接在源站做验证吧,比方说 A 服务器和 B 服务器发现证书还有 30 天过期,那怎么办比较好?
是 A 服务器申请做验证,然后对 le 的服务器发出请求,接着 le 因为 le 自己的 dns 问题去请求 B 的证书了,这怎么办呢?

到底 A 服务器当源还是 B 服务器当源呢?
UnisandK
2016-08-29 13:40:14 +08:00
@cnnblike 我没表述清楚,我的意思是 let's 是可以验证页面内容的,只要从机( CDN )连主机的验证文件都一起同步过去了的话那边无论解析到哪个 IP 上都能通过验证吧
cnnblike
2016-08-29 13:44:34 +08:00
@UnisandK 哦……你的意思是,主在接到 let's encrypt 发出的请求后把 challenge 文件同步到从上面是不是?感觉有点怪怪的……因为我的打算是主从的网站文件也不一样,一个放中文版本,一个放英文版本这种,我再想想,应该确实可以
wevsty
2016-08-29 13:49:57 +08:00
是哪个机器申请证书和你最终由多少 docker 使用这个证书关系并不大,反正你最后始终得同步证书。而且既然是同步证书,哪个证书最新的就自动同步到其他全部机器也就完事了,或者直接分发证书。
比如,找个域名指向所谓的中心机也就是申请证书的机器,定期自动更新证书,然后其他机器上定期自动通过脚本使用 stfp 下载覆盖本机的证书也就行了。如果后期要变更申请证书的机器,把域名指向新机器就行了。

另外域名的话可以选择 namesilo 家,价格实惠,口碑不错, com 域名 8.99USD 一年(注册续费同价)提供免费的隐私保护。
https://www.namesilo.com
优惠码: ONEAFF
首次注册或者转移域名可以优惠 1USD
cnnblike
2016-08-29 14:14:27 +08:00
@wevsty 中心机分发证书我考虑过,但是我记得证书的签发是分成三部分吧。
1.向服务器提出申请。
2.获得服务器给的 challenge ,把某个文件放在某个目录下。
3.从服务器获得证书。
问题在于第二步怎么把这个要放的文件放在这个目录下呢?这可不只是要放在中心机的目录下,还是要放在所有从机的目录下的啊!莫不是要预先通过 git 部署一遍文件?
dzxx36gyy
2016-08-29 14:32:01 +08:00
@cnnblike 你到底在想啥……请使用 acme 脚本通过 dns 解析方式验证签发证书规避分区解析导致的常规方式签发出现问题,然后你所需要考虑的只是分发证书了。
wevsty
2016-08-29 14:45:53 +08:00
@cnnblike 不需要所有机器都有,第二步的认证文件只要确保认证的时候能访问到就行了,不需要所有机器都有一份。
比如有支持 FTP 验证或者 SMTP ,那么你只需要把 FTP 认证端口全部转发到中心机就行了。
参考项目: https://github.com/srvrco/getssl
在比如 DNS 验证也可以的。我的理解是 DNS 验证应该是只要第一次添加记录就行了,后续续期不需要更改 DNS ,所以也不需要用到 DNSAPI 之类的。就算需要的话也有一堆项目提供常见的 DNSAPI 支持
参考项目: https://github.com/Neilpang/acme.sh
以上项目都是
https://letsencrypt.org/docs/client-options/
很多选择可以参考。
JJaicmkmy
2016-08-29 14:53:45 +08:00
在一台机器上生成证书,然后用 rsync 把证书同步到其他机器。这样就可以了吧?
ershiwo
2016-08-31 20:54:51 +08:00
我自己的部署方案: https://www.ershiwo.com/2016/03/use-lets-encrypt-on-multi-servers.html
核心思想是用 DNS 验证,然后同步证书自动重载 apache2 。

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

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

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

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

© 2021 V2EX