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

腾讯云 `API` 服务 `Let's Encrypt` 证书 `Renew` 失败

  •  
  •   zealzz ·
    zealzhangz · 2018-11-13 19:20:28 +08:00 · 4949 次点击
    这是一个创建于 2200 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一年多了之前 Renew 都是正常的,就在双十一当天 Renew 一直失败,各位 V 友有遇到这种情况吗?有思路的给个提示,下面是部分信息。

    1. 子域 api.xxxx.xx,域名在阿里云管理,DNS 配的 A 记录
    2. 使用的 standalone 模式, Renew 前已经把本地的 Nginx 关闭了。80、443 端口没被占用
    3. 把服务器重启后 Renew 也是一样的错
    4. 网上也看到一些类似情况,但也解决不了

    部分错误日志如下:

    {
      "identifier": {
        "type": "dns",
        "value": "api.xxxx.xx"
      },
      "status": "invalid",
      "expires": "2018-11-18T15:33:56Z",
      "challenges": [
        {
          "type": "http-01",
          "status": "invalid",
          "error": {
            "type": "urn:ietf:params:acme:error:connection",
            "detail": "Fetching http://api.xxxx.xx/.well-known/acme-challenge/xxxxxxxx: Error getting validation data",
            "status": 400
          },
          "url": "https://acme-v02.api.letsencrypt.org/acme/challenge/jgMy9WxHILHaUScF9joUpdXZ7uCRDSM2mabGDDn_22k/9189513629",
          "token": "xxxxxxxx",
          "validationRecord": [
            {
              "url": "http://api.xxxx.xx/.well-known/acme-challenge/xxxxxxxx",
              "hostname": "api.xxxx.xx",
              "port": "80",
              "addressesResolved": [
                "xx.xxx.xx.xx"
              ],
              "addressUsed": "xx.xxx.xx.xx"
            }
          ]
        }
      ]
    }
    2018-11-11 23:35:02,624:DEBUG:certbot.reporter:Reporting to user: The following errors were reported by the server:
    
    Attempting to renew cert (api.xxxx.xx) from /etc/letsencrypt/renewal/api.xxxx.xx.conf produced an unexpected error: Failed authorization procedure. api.xxxx.xx ( http-01): urn:ietf:params:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching http://api.xxxx.xx/.well-known/acme-challenge/k9NoezsP97OBAnv0hP_a6jbV_9OKhFey5QOqt9ON2nk: Error getting validation data. Skipping.
    All renewal attempts failed. The following certs could not be renewed:
      /etc/letsencrypt/live/api.xxxx.xx/fullchain.pem (failure)
    
    第 1 条附言  ·  2018-11-14 12:49:17 +08:00
    • V 友果然厉害!找到真正原因了:备案的原因。
    • 因为主域名是在阿里云备案的,还需要再腾讯云接入备案。否则 Letsecrypt Server 再使用 HTTP 协议验证的时候会被腾讯云墙。当前也发现一个绕过墙方法,使用 tls-sni renew 证书。
    • 但是因为安全问题:TLS-SNI-01 is deprecated, and will stop working soon.,但是现在至少还能用,再用一段时间,实在不行就只能接入备案了。
    19 条回复    2018-11-14 15:51:33 +08:00
    Cherishxxyy
        1
    Cherishxxyy  
       2018-11-13 20:40:03 +08:00
    根据你的描述判断,你用的是 Let's Encrypt 的 SSL 证书,使用的是阿里云的域名,不知道用的是哪家的服务器,但是该问题可能出在你的 DNS or SSL 证书 or Nginx 配置,这个和腾讯云没多大关系吧。。。
    Dk2014
        2
    Dk2014  
       2018-11-13 20:46:48 +08:00
    acme 命令呢,不清楚你这到底是用哪个模式
    ahu
        3
    ahu  
       2018-11-13 21:03:58 +08:00 via Android
    不知道双十一当天腾讯的 dns 挂了吗?那怎么能成功!
    ywgx
        4
    ywgx  
       2018-11-13 21:06:02 +08:00 via iPhone
    和良心云无关
    zealzz
        5
    zealzz  
    OP
       2018-11-13 22:01:17 +08:00 via Android
    @Cherishxxyy 虚拟机是腾讯云的,实在找不到问题,给腾讯云提了个工单,日志作为附件。小哥给我接了个日志的报错图。我想说我又不瞎能看到啊,感觉也应该和云关系不大,防火墙啥的也没开。真是蛋疼。接下来只能来研究工具的文档了,看看能不能 debug 一下。
    zealzz
        6
    zealzz  
    OP
       2018-11-13 22:02:16 +08:00 via Android
    @Dk2014 大兄弟说的啥模式,standalone 模式呀
    zealzz
        7
    zealzz  
    OP
       2018-11-13 22:03:02 +08:00 via Android
    @ahu DNS 是阿里云的,今天试了一样不行
    zealzz
        8
    zealzz  
    OP
       2018-11-13 22:03:39 +08:00 via Android
    @ywgx 应该是无关,就是找不到问题,蓝瘦
    danc
        9
    danc  
       2018-11-13 22:36:59 +08:00
    升级 acme,apt update && apt upgrade,关闭 nginx 其他占用 80 和 443 端口的服务,service nginx stop
    BOYPT
        10
    BOYPT  
       2018-11-14 00:02:13 +08:00
    你自己从第三方访问 http://api.xxxx.xx/能正确返回吗?也有可能你这个域名没备案,被腾讯云墙了。
    zealzz
        11
    zealzz  
    OP
       2018-11-14 01:02:15 +08:00 via Android
    @BOYPT 主域名在阿里云备案了,虚拟机在腾讯云上,证书过期之前访问一直是正常的。我明天吧 https 去掉看看 http 是否能正常访问。
    zealzz
        12
    zealzz  
    OP
       2018-11-14 01:03:14 +08:00 via Android
    @danc 试过了,还是不行😔
    zwh2698
        13
    zwh2698  
       2018-11-14 05:59:16 +08:00 via Android
    删掉,重新申请,就可以
    zealzz
        14
    zealzz  
    OP
       2018-11-14 12:41:40 +08:00
    @BOYPT 大胸弟,正解。的确是因为备案的原因。因为被腾讯云墙了所以 Letsencrypt 无法验证证书。发现一个方法 使用 tls-sni 可以绕过腾讯云的墙。
    zealzz
        15
    zealzz  
    OP
       2018-11-14 12:50:25 +08:00
    @zwh2698 是因为备案的原因☹️
    realpg
        16
    realpg  
       2018-11-14 14:22:32 +08:00
    acme.sh 不好么
    cloudxns,dnspod 都行
    BOYPT
        17
    BOYPT  
       2018-11-14 15:16:29 +08:00
    @zealzz #14 另外一个方法是走 dns-01 challenge 啦,这个需要修改 DNS 记录添加 TXT 记录来提供校验;
    手工操作太麻烦了,我用 caddy 做服务器,这些都自动化的。然后域名是托在 cloudflare 上,caddy 支持一大堆 DNS 托管服务的自动化签注
    zealzz
        18
    zealzz  
    OP
       2018-11-14 15:50:52 +08:00
    @BOYPT 赞👍
    zealzz
        19
    zealzz  
    OP
       2018-11-14 15:51:33 +08:00
    @realpg 赞👍,我找时间研究一下,以便不时之需
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:27 · PVG 13:27 · LAX 21:27 · JFK 00:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.