中间 CA(go daddy)签署的有效证书不适用于少数客户(docker alpine)

Valid certificate signed by intermediate CA(go daddy) doesnt work with few clients(docker alpine)

我已经从 Azure 购买了域和证书。该证书由 Go Daddy 作为 azure 合作伙伴提供,并使用 Go daddy 的中间证书签名,因此它始终需要将证书链接到 Root CA。

我们的网站用作我们客户的 REST 界面,因此客户使用 Java SDK 或纯脚本。在我们的例子中,恰好是来自 microsoft 的 zulu jdk image(11u5-zulu-alpine) 甚至我尝试使用 ubuntu 16.04 LTS 并得到相同的错误。

如果我们甚至尝试使用正确的证书 curl 到我们的站点,我们会收到如下错误,这是因为缺少中间 CA!

curl: (60) server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

使用 java SDK 我们得到 javax.net.ssl.SSLHandshakeException

我有 3 个问题。

  1. 我们是否需要将中间和根证书与我们的域证书捆绑并部署它。(证书是 pfx 格式)
  2. 告诉我们的客户安装捆绑证书(根证书和中间证书)以使其正常工作是否是一个好习惯。
  3. GoDaddy 是否需要更新 Ubuntu,alpine 打包仓库中的 bundle 证书 还是我的理解有误

最后,我对证书的工作原理有了一个清晰的认识 w.r.t 客户端和服务器,但是对于图片中的中间 CA,我无法准确理解应该将中间 CA 放在哪里。我读了一些帖子在 SO 上,但仍不清楚。请耐心等待,如果有人可以向我解释这种方法的一般工作原理以及什么是好的做法。

  1. Do we need to bundle the intermediate and root certificate with our domain certificate and deploy it.( the certificate is in pfx format)

您一定要将服务器配置为发送所有必需的中间证书;这是 TLS 标准所要求的。 (尽管如果您不这样做,客户可以选择尝试通过其他方式获取它们,例如缓存或存储库或 AIA,并且有时 他们这样做。)服务器是否发送根是可选的;标准实际上是相反的,通过说服务器可以省略根,其中全大写 'MAY' 调用 RFC 2119 中定义的含义。例如对于 RFC5246 7.4.2 中的 TLS1.2:

      This is a sequence (chain) of certificates.  The sender's
      certificate MUST come first in the list.  Each following
      certificate MUST directly certify the one preceding it.  Because
      certificate validation requires that root keys be distributed
      independently, the self-signed certificate that specifies the root
      certificate authority MAY be omitted from the chain, under the
      assumption that the remote end must already possess it in order to
      validate it in any case.

如何 执行此操作取决于您使用的网络服务器软件,您没有确定。尽管根据您指定的 Java 版本这一事实,我可以推测它 可能 是 Tomcat,或者基于 Tomcat 的东西,例如 Jboss/Wildfly.即使那样,Tomcat 的 SSL/TLS 配置也会根据版本和您使用的连接器类型 'stack'(纯 Java JSSE,或 Tomcat Native,又名APR Apache Portable Runtime,其实就是OpenSSL)。但是,'pfx' (PKCS12) 文件绝对可以同时包含私钥和匹配的 (EE) 证书 加上它需要的链证书,这是一种方便的方式一次处理整个kaboodle。

对于直接从 GoDaddy 获得的证书,他们提供了从 https://www.godaddy.com/help/install-ssl-certificates-16623 链接到许多常见服务器的说明。我不知道他们是否为 Azure 使用任何不同的链接来改变这些指令。

如果您的服务器 public 可以访问,在端口 443,https://www.ssllabs.com/ssltest 将检查它是否正确处理链证书,以及许多其他事情。还有其他工具,但我不熟悉它们;对于非 public 服务器,我通常只是手动查看。

  1. Is it a good practice to tell our clients to install the bundle certificates ( root and intermediate) in order to get this working.

客户端不应安装中间证书,因为如上所述,服务器应发送它们。 GoDaddy 根已被大多数官方信任库接受多年,因此 大多数 使用默认设置的客户端不需要添加它们。但是,有些人可能;特别是 Ubuntu 16.04 可能太老了,没有预装 GoDaddy。任何希望使用自定义信任库的客户,and/or 一个 pin,必须确保将其设置为 include/allow 您的证书的信任链。

  1. Does GoDaddy needs to update the bundle certificate in the packing repositories of Ubuntu ,alpine Or is my understanding wrong

GoDaddy 将其根提供给(AFAIK 全部)主要的信任库程序,如上所述。 IINM Ubuntu 使用 Mozilla/NSS 列表,今天肯定包括 GoDaddy,但如上所述我不能确定 16.04。我不知道高山。 CA 不要求信任库程序包含中间体(尽管程序或用户可能能够将选定的中间体添加为受信任的,具体取决于所使用的软件)。