python - 使用 context.use_certificate_chain_file 时为 "key values mismatch"

标签 python ssl openssl gnutls

使用 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))

知道为什么会报错吗?

最佳答案

Any ideas why its giving the error?

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

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

基于 SSL install problem - “key value mismatch” (but they do match?) ,你有两个问题之一。

首先,私钥与证书中的公钥不匹配。其次,您的 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'`

关于python - 使用 context.use_certificate_chain_file 时为 "key values mismatch",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29321434/

相关文章:

apache - 在 Apache2.4 上扫描期间检测到 SHA-1 密码套件

ssl - 为 logstash-output-stomp 使用 SSL

ssl - 使用包括中间证书在内的 key 将 PFX 转换为 PEM

openssl - 如何将 .p12 转换为 .crt 文件?

ssl - 使用 OpenSSL 生成具有主体名称的客户端证书

python - 从文本文件中删除单个值

python - 文本预处理+Python+CSV : Removing special characters from a column of a CSV

python - 从 python 中的两个列表创建 Pandas df

python - 如何使用 python pika 将 msg 发布到带有自签名证书的 rabbitmq 服务器?

python - 通过单击另一个复选框禁用复选框 (HTML/DJANGO)