【发布时间】:2020-07-30 16:39:51
【问题描述】:
我使用pyopenssl 生成了一个 PEM 证书链(CA、中间和叶),并且我想确认我正确定义了所有内容。
这是我采取的步骤:
- 我制作了三个 PEM 证书,自签名 CA 并在 this question 之后定义了基本约束
crypto.X509Extension(b'basicConstraints', False, b'CA:TRUE') - 我将 CA 和中间证书复制到
/usr/local/share/ca-certificates(作为 crt 文件)并运行sudo update-ca-cert - 我已经建立了一个基于this OpenSSL example的简单服务器
- 我尝试使用 CA 证书运行服务器并执行
openssl s_client -connect localhost:4433 -CApath /etc/ssl/certs- 效果很好,得到了Verify return code: 0 (ok) - 做了同样的事情,但这次服务器使用了中间证书 - 也很棒,
Verify return code: 0 (ok) - 做了同样的事情,但这次服务器使用叶子证书 - 这次我得到了
Verify return code: 24 (invalid CA certificate)
此外,我尝试验证证书并获得以下信息:
$ openssl verify 1-ca.pem
1-ca.pem: OK
$ openssl verify 2-intermediate.pem
2-intermediate.pem: OK
$ openssl verify 3-leaf.pem
C = NL, ST = Amsterdam, L = Zaandam, O = FakeDigiCert, OU = FakeFake, CN = www.fakedigicert.nl
error 24 at 1 depth lookup: invalid CA certificate
error 3-leaf.pem: verification failed
为什么服务器证书离CA超过一步后CA证书突然失效?
【问题讨论】:
-
您并没有明确说明您在哪个证书中放入了什么,但您说“CA 和中间”,就好像中间不是 CA,它是。你所拥有的是一个根 CA、一个中间 CA 和一个终端实体,也就是叶。 OpenSSL 要求/每个中间 CA 具有 BasicConstraints.ca=true 否则您会收到验证错误 24;至少到目前为止它不需要根 CA,除非代码设置了“严格”标志,但根 应该仍然拥有它。
-
@dave_thompson_085 这确实是问题所在。我假设中间证书不一定是 CA。一旦我添加了基本约束,验证就通过了。谢谢!
标签: ssl openssl ssl-certificate pyopenssl