1

使用时context.use_certificate_chain_file出现关键错误(openssl.Context Python)。错误是:

Traceback (most recent call last):
  File "/home/user/public_html/application.py", line 363, in <module>
    context.use_privatekey_file('/etc/ssl/private/' + HOSTNAME + '.key')
OpenSSL.SSL.Error: [('x509 certificate routines', 'X509_check_private_key', 'key values mismatch')]

它说关键值不匹配,但我认为链条不会影响这一点。

如果我评论 context.use_certificate_chain_file 行,它可以完美运行(但在浏览器中会出现 ssl 验证错误)。

这是我的代码片段:

context = openssl.Context(openssl.SSLv23_METHOD)
context.set_options(openssl.OP_NO_SSLv2)
context.set_options(openssl.OP_NO_SSLv3)
context.use_certificate_file('/etc/ssl/certs/' + HOSTNAME + '.crt')
context.use_certificate_chain_file('/etc/ssl/certs/' + HOSTNAME + '.cabundle')
context.use_privatekey_file('/etc/ssl/private/' + HOSTNAME + '.key')
context.set_cipher_list(':'.join(supported_ciphers))

任何想法为什么它给出错误?

4

2 回答 2

0

它现在可以工作了,必须将链附加到 crt 上。

于 2015-03-29T05:47:31.710 回答
0

任何想法为什么它给出错误?

该错误是从 OpenSSL 向上传播的。它的错误 0x0B080074:

$ openssl errstr 0x0B080074
error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch

基于SSL 安装问题 - “键值不匹配”(但它们确实匹配?),您有两个问题之一。

首先,私钥与证书中的公钥不匹配。其次,您certificate_chain_file缺少构建从服务器证书到根的有效路径所需的中间证书。在这里,根将是签署您的证书的 CA。

因此,您的解决方法是(1)确保公钥/私钥对实际上是一对,或者(2)在链文件中包含必要的中间证书。

在不知道私钥 ( '/etc/ssl/private/' + HOSTNAME + '.key')、服务器证书 ( '/etc/ssl/certs/' + HOSTNAME + '.crt') 或链文件 ( '/etc/ssl/certs/' + HOSTNAME + '.cabundle') 的内容的情况下,我们真的无法为您提供有关如何修复它的更多详细信息。


您可以向我们提供服务器的证书:

cat '/etc/ssl/certs/' + HOSTNAME + '.crt' | openssl x509 -text -noout

您可以通过 cat'ing 为我们提供链文件。它将是 3 或 4 个 PEM 编码证书连接在一起:

cat `'/etc/ssl/certs/' + HOSTNAME + '.cabundle'`
于 2015-03-29T01:24:33.473 回答