"关键值不匹配"使用context.use_certificate_chain_file时

时间:2015-03-28 19:14:32

标签: 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))

为什么会出错?

2 个答案:

答案 0 :(得分:0)

  

为什么会出错?

错误从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为我们提供链文件。它将连接在一起的3或4个PEM编码证书:

cat `'/etc/ssl/certs/' + HOSTNAME + '.cabundle'`

答案 1 :(得分:0)

它现在正在工作,链条必须附加到crt。