V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cnnblike
V2EX  ›  SSL

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

  •  
  •   cnnblike · 2016-08-29 13:11:56 +08:00 · 4116 次点击
    这是一个创建于 3038 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是这样子的,人在国外,所以访问国内不是很快,打算在 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 服务商了呢。。

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

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

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

    另外域名的话可以选择 namesilo 家,价格实惠,口碑不错, com 域名 8.99USD 一年(注册续费同价)提供免费的隐私保护。
    https://www.namesilo.com
    优惠码: ONEAFF
    首次注册或者转移域名可以优惠 1USD
    cnnblike
        6
    cnnblike  
    OP
       2016-08-29 14:14:27 +08:00 via iPhone
    @wevsty 中心机分发证书我考虑过,但是我记得证书的签发是分成三部分吧。
    1.向服务器提出申请。
    2.获得服务器给的 challenge ,把某个文件放在某个目录下。
    3.从服务器获得证书。
    问题在于第二步怎么把这个要放的文件放在这个目录下呢?这可不只是要放在中心机的目录下,还是要放在所有从机的目录下的啊!莫不是要预先通过 git 部署一遍文件?
    dzxx36gyy
        7
    dzxx36gyy  
       2016-08-29 14:32:01 +08:00 via Android
    @cnnblike 你到底在想啥……请使用 acme 脚本通过 dns 解析方式验证签发证书规避分区解析导致的常规方式签发出现问题,然后你所需要考虑的只是分发证书了。
    wevsty
        8
    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
        9
    JJaicmkmy  
       2016-08-29 14:53:45 +08:00
    在一台机器上生成证书,然后用 rsync 把证书同步到其他机器。这样就可以了吧?
    ershiwo
        10
    ershiwo  
       2016-08-31 20:54:51 +08:00   ❤️ 1
    我自己的部署方案: https://www.ershiwo.com/2016/03/use-lets-encrypt-on-multi-servers.html
    核心思想是用 DNS 验证,然后同步证书自动重载 apache2 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3260 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:29 · PVG 20:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.