我正在尝试使用 XCA 软件创建自己的证书颁发机构。我已成功创建根 CA ( Fisir Technologies CA
) 和中间 CA ( Fisir Technologies Intermediate CA X1
)。但是,我想Fisir Technologies Endpoint CA WWW
在第一个中间 CA ( ) 下再创建一个中间 CA ( ) Fisir Technologies Intermediate CA X1
。第二个中间 CA 应该颁发最终实体证书。
我已完成所有这些操作,并将我的根 CA 作为受信任的根证书颁发机构导入(在 Windows 上)。然后,我创建了一个由第二个中间 CA 签名的新 HTTPS 证书。我尝试使用 Windows 上的默认证书查看器打开它,但它告诉我它没有足够的信息来验证证书。这正是我所期望的,因为我只安装了根 CA。
因此,我创建了一个证书链,包括根 CA、两个中间 CA 和 HTTPS 证书。我将其上传到我的 VPS,在 nginx 中设置 HTTPS 服务器并尝试访问它。但 Google Chrome 却显示错误NET::ERR_CERT_INVALID
。
我点击了地址栏中的交叉红锁,它说证书无效。所以我选择查看证书,它在 Windows 默认证书查看器中再次打开它。但它没有显示任何错误。我查看了证书路径,它显示正确:
它还说证书有效。此外,我找到的每个在线 HTTPS 检查器都没有显示设置存在任何问题(当然,不受信任的根 CA 除外)。
我尝试修改证书的各种属性,但始终无法成功。然后我尝试颁发与第一次完全相同的证书,但这次我使用第一个中间 CA 对其进行签名。我刷新了页面,它成功了。
但我想使用第二个中间 CA 颁发证书。有人知道问题可能是什么吗?
您可以在以下网址亲自检查问题:https://php.technologies.fisir.net。
谢谢。
答案1
这里有几个问题:
- 您的根 CA 证书
pathlen
中有一个basicConstraints
- 不需要且未使用,但它不会造成问题。 - 您的根 CA 证书上有证书策略 - 这会得到更好的应用经过将您的根 CA 颁发给下属 CA。如果您希望在稍后更改策略,或添加另一项策略,则必须重新颁发根 CA 证书并向所有依赖方重新颁发。同样,这不应该导致您报告的问题。
然而...
- 您的根 CA CRL 位于您的 CRL 分发点http://crl.ca.technologies.fisir.net/root.crl无法访问。您的依赖方无法建立链,因为无法检查撤销。这假设他们检查。
- 您的第一个下属 CA 的 CRL 也无法访问http://crl.ca.technologies.fisir.net/intermediate-x1.crl- 与上相同。
- 您的颁发 CA 的 CRL 也无法访问http://crl.ca.technologies.fisir.net/x1-endpoint-www.crl- 这里形成了一种模式 ;-)
- 授权信息访问扩展中的 OCSP 服务器无法访问(甚至无法解析 IP 地址)。使用 OCSP 检查撤销的依赖方将失败。
我猜测您的问题是由于依赖方(Chrome 等)无法检查撤销,因此无法成功构建证书链。