【问题标题】:Docker Swarm: Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet validDocker Swarm:来自守护进程的错误响应:验证根 CA 证书时出错:x509:证书已过期或无效
【发布时间】:2018-01-12 03:46:40
【问题描述】:

操作系统:CentOS 7 虚拟机

Docker 最新版本

执行的命令:

   1) docker swarm init
   2) docker swarm join --token SWMTKN-1-3iqtmbz55yvhxkahe2ncs7d9ebxzlzmw1pwhqzvmcemiolef63-3muc4qjs3mbvh53t8ktzzmb22 192.168.10.108:2377 
    Error: Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet valid

如您所见,swarm join 给了我这个错误。这个错误的原因是什么,它来自哪里?

问候 阿迪亚

【问题讨论】:

  • 您是在同一台机器上执行这两个命令还是在不同的机器上执行?您是否使用任何代理?
  • @Tarun Lalwani 两者都在不同的机器上执行。
  • 你在使用代理吗?
  • 尽管同时包含“HTTP_PROXY”和“NO_PROXY”,但遇到了同样的问题
  • 修复两台机器的时间,使它们处于同一时间。

标签: docker x509 docker-swarm docker-engine


【解决方案1】:

有类似的问题,因为 swarm init 生成了具有未来开始日期的 ca 证书。可能是由于ntp滞后。

可以使用以下命令获取 CA 证书信息:

docker swarm ca | openssl x509 -noout -text

输出将如下所示:

Certificate:
Data:
    Version: 3 (0x2)
    Serial Number:
        ...
Signature Algorithm: ecdsa-with-SHA256
    Issuer: CN=swarm-ca
    Validity
        Not Before: Oct 24 20:25:00 2018 GMT
        Not After : Oct 19 20:25:00 2038 GMT
    Subject: CN=swarm-ca
    Subject Public Key Info:
        Public Key Algorithm: id-ecPublicKey
            Public-Key: (256 bit)
            pub:
                ...
                ...
                ...
                ...
            ASN1 OID: prime256v1
            NIST CURVE: P-256
    X509v3 extensions:
        X509v3 Key Usage: critical
            Certificate Sign, CRL Sign
        X509v3 Basic Constraints: critical
            CA:TRUE
        X509v3 Subject Key Identifier:
            ...
Signature Algorithm: ecdsa-with-SHA256
     ...
     ...
     ...
     ...

您可以看到有效范围在 2018 年 10 月 24 日 20:25:00 GMT 和 10 月 19 日 20:25:00 2038 GMT 之间。如果尝试加入 swarm 的机器在该时间间隔内没有时钟,它将因该错误而失败。

【讨论】:

    【解决方案2】:

    我通过在两台机器上设置相同的日期来解决它。

    【讨论】:

      【解决方案3】:

      简单地删除证书并重新启动服务对我有用。

      【讨论】:

        【解决方案4】:

        当您的节点中的时间不同步时会产生此错误。 在初始群之后

        docker swarm init
        

        您可以使用以下命令查看 swarm 证书的限制时间

        docker swarm ca | openssl x509 -noout -text
        

        您的节点时间必须介于

        有效期
        不早于:格林威治标准时间 2019 年 2 月 20 日 10:21:00
        不晚于:格林威治标准时间 2 月 15 日 10:21:00 2039

        在linux中设置节点时间可以使用'timedatectl'命令

        自动同步时间,可以在每个节点使用follow命令

        timedatectl set-timezone asia/Tehran
        timedatectl set-ntp on
        

        您可以使用

        显示所有时区
        timedatectl list-timezones
        

        【讨论】:

          【解决方案5】:

          确实,运行 docker 节点的虚拟机之间的日期和时间不同步:

          以下命令帮助我解决了这个问题:

          systemctl stop ntpd ;  ntpdate *server* ; systemctl start ntpd
          

          作为docs 状态:

          ntpdate 通过轮询网络时间来设置本地日期和时间 协议 (NTP) 服务器作为服务器参数给出,以确定 正确的时间

          【讨论】:

            【解决方案6】:

            我为我做了以下工作

            • 更改时区(可以根据控制节点中的时区更改GMT):

              timedatectl set-timezone GMT

            • 更改节点机器中日期的格式

              date --set "格林威治标准时间 2021 年 12 月 21 日星期二 17:18:07"

            提示:通过运行此命令从 swarm 主节点获取日期格式

            docker swarm ca | openssl x509 -noout -text | grep "Not Before"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-05-19
              • 2016-12-12
              • 1970-01-01
              • 2018-06-30
              • 1970-01-01
              • 2013-01-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多