V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
s609926202
V2EX  ›  问与答

如何在双机热备上使用 let's encrypt 证书?

  •  
  •   s609926202 · 2017-08-02 22:12:41 +08:00 · 3665 次点击
    这是一个创建于 2465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用了 AWS 的 ELB 双机热备架构,同时鉴于赛门铁克不久就要被干掉的情况,决定使用 letsencrypt 证书,设置定时任务,每两个月更新一次,兴冲冲的下载 certbot,并且设置了定时任务,才发现:

    1:设置的方式 webroot 方法,也就是说在网站根目录下写一个.xxx 文件,每次访问时查看这个文件是否正确。但是问题来了,另一台服务器上的项目根目录下并没有这个文件啊,怎么办?

    2:或者说 letsencrypt 还有其他的认证方式吗?

    3:各位给支支招。。。

    23 条回复    2017-08-03 15:56:52 +08:00
    15015613
        1
    15015613  
       2017-08-02 22:16:13 +08:00 via Android
    1 的问题,定时用 rsync 同步应该可以解决。
    7654
        2
    7654  
       2017-08-02 22:18:30 +08:00
    域名认证
    coderfox
        3
    coderfox  
       2017-08-02 22:19:13 +08:00 via Android
    有 DNS 认证,你可以查查。

    不过双机的话,还是用同步工具(如上面提到的 rsync )比较好。
    ericFork
        4
    ericFork  
       2017-08-02 23:08:05 +08:00
    https://github.com/GUI/lua-resty-auto-ssl
    这个项目可以把证书放到 redis 里
    l0wkey
        5
    l0wkey  
       2017-08-02 23:10:27 +08:00 via iPhone
    证书不应该是在 elb 上的么
    neilp
        6
    neilp  
       2017-08-02 23:18:01 +08:00 via iPhone
    既然是双机热备,多同步一个证书文件也不是什么难事。 首选推荐自己同步证书。
    由于是双机热备, 所以其实存在一种情况就是主机宕掉,切到备机,此时证书过期了,那么将无法更新。 推荐使用 acme.sh 进行 dns 验证。
    Fishdrowned
        7
    Fishdrowned  
       2017-08-02 23:34:36 +08:00 via Android   ❤️ 1
    不用 DNS 验证也没问题,在入口用 nginx 把.well-known 的请求反代就可以了。我都是写一个公用配置,然后各入口 include 进去。
    s609926202
        8
    s609926202  
    OP
       2017-08-02 23:38:32 +08:00
    @neilp OK,O(∩_∩)O 谢谢你的建议
    s609926202
        9
    s609926202  
    OP
       2017-08-02 23:51:51 +08:00
    @Fishdrowned 牛逼、、我喜欢这个方法
    whileFalse
        10
    whileFalse  
       2017-08-03 00:02:15 +08:00
    建议使用 ELB 进行 https 卸载。
    用 DNS 验证;然后把证书加载到 ELB 上;业务服务器本身不处理 https。我就是这么干的。
    获取证书可以参考 https://github.com/xdtianyu/scripts/tree/master/le-dns
    ysc3839
        11
    ysc3839  
       2017-08-03 00:05:25 +08:00 via Android
    我个人是建议 DNS 认证。
    s609926202
        12
    s609926202  
    OP
       2017-08-03 00:21:07 +08:00
    @Fishdrowned 哥们你这个方法貌似对双机热备不可行把?反代这个我可以理解,但是你反代的 elb 不是就给了一个 CNAME 吗?然后通过 CNAME 到达任意一台机器,并不是固定的,,,所以你反代肯定是不行的啊,除非专门有一台机器拿来存存储证书文件,然后反代到可以确定的目的地。。。
    s609926202
        13
    s609926202  
    OP
       2017-08-03 00:22:57 +08:00
    @ysc3839
    @neilp
    @coderfox
    使用 DNS 后也得 rsync 进行两台机器上证书的同步吧,,,

    还是说两台机器上都使用 DNS 认证,然后各自生成一份证书文件?
    s609926202
        14
    s609926202  
    OP
       2017-08-03 00:23:55 +08:00
    @whileFalse ELB 进行 https 卸载这个是什么意思,没懂,,然后证书加载到 ELB,是需要上传生成好的证书到 elb 吗?
    msg7086
        15
    msg7086  
       2017-08-03 01:36:22 +08:00
    @s609926202 反代到某台实体机不行吗? AWS 我不熟……
    s609926202
        16
    s609926202  
    OP
       2017-08-03 02:11:32 +08:00 via iPhone
    @msg7086 呃,我们总共两台机器,没有多余的了,,而且为了这个貌似再购买一台不怎么划算,毕竟一台一个月的成本就得 200 多~~
    cxbig
        17
    cxbig  
       2017-08-03 05:45:32 +08:00
    通常的做法都是把证书方 ELB,EC2 只管内容分发。
    配置好 IAM,有很多脚本可以实现 Let ‘ s Encrypt 证书的替换

    其次可以使用 AutoScaling Group 或 CodeDeploy,脚本定期更新证书放 S3,挂上的时候自动抓下来放到指定位置。
    cxbig
        18
    cxbig  
       2017-08-03 05:49:22 +08:00
    2. 你可以用 AWS 自己的证书系统 ACM,非常方便。只要域名管理权在你手里,认证流程非常简单。
    我们公司测试环境的证书都是 ACM 生成的。
    whileFalse
        19
    whileFalse  
       2017-08-03 06:36:53 +08:00 via iPhone
    @s609926202 就是说业务服务器和 elb 之间使用 http 通讯,elb 对外提供 https 服务,这就叫 https 卸载。
    就是申请好证书上传到 IAM,然后和 elb 绑定。
    楼上说的 acm 证书管理在中国区没有开放,我没用过。
    a2213108
        20
    a2213108  
       2017-08-03 08:08:40 +08:00 via Android
    跑个题,Symantec 的证书可以在 namecheap 免费替换成同级的 comodo 证书。
    https://www.namecheap.com/symantec-replace/
    Tink
        21
    Tink  
       2017-08-03 09:14:29 +08:00
    为啥不在一台机器上自动更新完之后同步到另一台?
    ysc3839
        22
    ysc3839  
       2017-08-03 15:16:21 +08:00 via Android
    @s609926202 是要同步,不确定生成两个是否会吊销旧的那个。
    msg7086
        23
    msg7086  
       2017-08-03 15:56:52 +08:00
    @s609926202 没看懂你在说什么。你现在有两台实体机和一台 ELB,其中一台实体机做脚本,另一台实体机反代到这一台,为什么还要再买一台?我看得好懵啊。

    @ysc3839 当然不会。你想想嘛,第一,重复申请证书是很普通的事情,一个网站很多前端的情况很普遍,而私钥原则上是不应该离开服务器本机的,也就是说不支持重复申请证书的话客户就必须承担私钥过网络的风险。第二,吊销证书成本非常高,签署成本只要签署就行了,而吊销必须要维护吊销列表,而且所有的客户端都会去检查吊销列表,你想想这个列表得多大,客户每次更新吊销列表得下载多少数据。

    哦对了再说一次,一个账号对一个域名的认证,在一段时间内只需要一次。比如 a 域名你今天验证过了,那下个月你用同一个账号签 a 域名的证书是不需要再验证的。签 5 次 10 次不同的证书,只要域名相同就不需要再验证。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2154 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:07 · PVG 19:07 · LAX 04:07 · JFK 07:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.