HTTPS不能使用两个中间证书

我正尝试使用XCA软件创build自己的证书颁发机构。 我已成功创build了根CA( Fisir Technologies CA )和中间CA( Fisir Technologies Intermediate CA X1 )。 但是,我希望在第一个中间CA( Fisir Technologies Intermediate CA X1 )下有另一个中间CA( Fisir Technologies Endpoint CA WWW )。 第二个中间CA应该发布最终实体证书

我已经完成了这一切,并导入我的根CA作为受信任的根证书颁发机构(在Windows上)。 然后,我创build了一个由第二个中间CA签名的新HTTPS证书。 我试图用Windows上的默authentication书查看器打开它,但它告诉我,它没有足够的信息来validation证书。 这是我所期望的,因为我只安装了根CA.

所以我创build了一个证书链,包括根CA,两个中间CA和HTTPS证书。 我把它上传到我的VPS上,在nginx中设置了HTTPS服务器并尝试访问它。 但谷歌浏览器欢迎我的NET::ERR_CERT_INVALID错误。

我点击了地址栏中的红色锁,表示证书无效。 所以我select查看证书,并在Windows默authentication书查看器中再次打开证书。 但是没有显示任何错误。 我查看了证书path,显示正确:

证书path

还说这个证书是有效的。 此外,我所能find的每个在线HTTPS检查器都没有显示任何设置问题(当然,除了不受信任的根CA之外)。

我试图修改证书的各种属性,但它永远不会工作。 然后我尝试了第一次发出完全相同的证书,但是这次我用第一个中间CA签名。 我刷新页面,它的工作。

但是我想使用第二个中间CA来颁发证书。 任何人都知道问题可能是什么?

您可以通过https://php.technologies.fisir.net查看自己的问题。

谢谢。

这里有几个问题:

  1. 您的根CA证书在其basicConstraints pathlen中有一个pathlen – 不需要和不使用,但不应该导致问题。
  2. 您在根CA证书上有一个证书策略 – 您的根CA可以更好地应用到下级CA. 如果您想在后一天更改政策,或者添加其他政策,则必须向所有依赖方辞职并重新颁发您的根CA证书。 同样,它不应该导致你的报告问题。

然而…

  1. 您的CRL分发点( http://crl.ca.technologies.fisir.net/root.crl )中的根CA CRL无法访问。 你的依赖方不能链式构build,因为不能检查撤销。 这假定他们检查。
  2. 您的第一个从属CA的CRL也无法访问http://crl.ca.technologies.fisir.net/intermediate-x1.crl – 与上面相同。
  3. 您的证书颁发机构的CRL也无法访问http://crl.ca.technologies.fisir.net/x1-endpoint-www.crl – 这里有一个模式形成;-)
  4. 权限信息访问扩展中的OCSP服务器不可访问(它甚至不会parsing为IP地址)。 使用OCSP检查撤销的依赖方将失败。

我猜你的问题是依赖方(Chrome等)无法检查撤销,因此无法成功build立一个证书链。