Python SSL X509: KEY_VALUES_MISMATCH

"""Python HTTPS server"""

from http.server import HTTPServer, SimpleHTTPRequestHandler
import ssl

# https://stackoverflow.com/a/40822838/2715716
HTTPD = HTTPServer(('localhost', 4443), SimpleHTTPRequestHandler)

# Ubuntu on Windows:
# - Generate key:
# `openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365`
# - Strip passphrase:
# `openssl rsa -in key.pem -out key-no-pass.pem`
HTTPD.socket = ssl.wrap_socket(HTTPD.socket,
                              keyfile='key-no-pass.pem', certfile='cert.pem', server_side=True)

HTTPD.serve_forever()

Приведенное выше выдает мне ssl.SSLError: [X509: KEY_VALUES_MISMATCH] несоответствие значений ключа (_ssl.c:2846). Есть ли способ узнать несовпадающие значения?

Я попытался использовать openssl verify -verbose -CAfile cert.pem в надежде, что он скажет мне, какие значения не совпадают, но я не знаю, как его использовать, и написанная мной команда просто открывает своего рода интерактивную подсказку.

Я ничего не знаю о сертификатах или Python, я только python -m SimpleHTTPServer. Это я пытаюсь получить самозаверяющий сертификат, чтобы Chrome отвлек меня от необходимости использовать HTTPS для некоторых вещей WebRTC для работы на localhost.


person Tomáš Hübelbauer    schedule 14.01.2017    source источник


Ответы (1)


Вы получаете эту ошибку, если указанный вами закрытый ключ не соответствует открытому ключу в сертификате, который вы пытаетесь использовать. Убедитесь, что используемый вами закрытый ключ соответствует открытому ключу в сертификате. Это можно сделать, сравнив выходные данные следующих команд, которые должны быть одинаковыми:

$ openssl x509 -noout -modulus -in cert.pem
$ openssl rsa -noout -modulus -in key-no-pass.pem
person Steffen Ullrich    schedule 15.01.2017
comment
Это интересно. Оба значения одинаковы, проверены программно. - person Tomáš Hübelbauer; 15.01.2017
comment
@TomášHübelbauer: используя именно ваш код с ключом и сертификатом, сгенерированным точно так, как написано в комментариях к коду, я не получаю эту ошибку, и сервер работает нормально. Вы действительно уверены, что получаете доступ к тому же ключу и сертификату из программы, что и модуль? - person Steffen Ullrich; 15.01.2017
comment
Я проверю вчетверо и вернусь, должно быть, я как-то читаю другой сертификат. --- - person Tomáš Hübelbauer; 16.01.2017
comment
Да, теперь это работает. Не знаю, почему раньше не было. Запускается мучительно медленно, но работает. Chrome не доверяет этому сертификату, но этого достаточно, чтобы заставить его замолчать о необходимости быть в безопасном источнике для использования некоторых функций JS. - person Tomáš Hübelbauer; 16.01.2017
comment
Сравнение с использованием diff: diff <(openssl x509 -noout -modulus -in cert.pem) <(openssl rsa -noout -modulus -in key-no-pass.pem) - person Pascal Polleunus; 26.08.2020