несоответствие значений ключей при использовании context.use_certificate_chain_file

При использовании 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))

Любые идеи, почему это дает ошибку?


person Sam Roberts    schedule 28.03.2015    source источник


Ответы (2)


Любые идеи, почему это дает ошибку?

Ошибка распространяется из OpenSSL. Его ошибка 0x0B080074:

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

Основываясь на проблеме с установкой SSL - "несоответствие значений ключей" (но они совпадают?), у вас есть одна из двух проблем.

Во-первых, закрытый ключ не соответствует открытому ключу в сертификате. Во-вторых, в вашем certificate_chain_file отсутствуют промежуточные сертификаты, необходимые для построения действительного пути от сертификата сервера к корню. Здесь корнем будет ЦС, подписавший ваш сертификат.

Таким образом, ваше исправление состоит в том, чтобы либо (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

Вы можете предоставить нам цепочку файлов, просто написав. Это будут объединенные вместе 3 или 4 сертификата в кодировке PEM:

cat `'/etc/ssl/certs/' + HOSTNAME + '.cabundle'`
person jww    schedule 29.03.2015

Теперь он работает, цепочка должна быть добавлена ​​​​к crt.

person Sam Roberts    schedule 29.03.2015