Я пытаюсь создать очень простой Python HTTPS-сервер, используя SSL-сертификаты.Клиент требует, чтобы у меня был сертификат от одного из главных CA (не может быть самоподписанным), поэтому я купил его у GoDaddy.com.Клиент сказал мне, что у них уже есть корневые и промежуточные сертификаты от всех основных CA, установленных в их системах.Я не выполняю проверку сертификата клиента, но клиент выполняет проверку сертификата моего сертификата сервера.
GoDaddy предоставляет закрытый ключ (файл, который содержит «BEGIN PRIVATE KEY» и «END PRIVATE KEY), а такжеZIP-файл с двумя файлами:
xxxxxxxxxxxxxxxx.crt (which contains 1 certificate)
gd_bundle-g2-g1.crt (which contains 3 certificates)
Я не хочу устанавливать сертификаты на машину, я хочу загружать их только с помощью кода.Вот мой код сервера:
httpd = HTTPServer(('0.0.0.0', 443), Handler)
httpd.socket = ssl.wrap_socket(httpd.socket, cert_reqs = ssl.CERT_REQUIRED, keyfile='private.key', certfile='xxxxxxxxxxxxxxxx.crt', server_side=True, ca_certs='gd_bundle-g2-g1.crt')
httpd.serve_forever()
Сервер загружает сертификаты и запускается нормально.
Я написал базовый клиент для проверки SSL и проверки возможности взаимодействия с сервером:
req = requests.Request('POST', 'https://localhost:443/TESTURL', headers=headers, files=files)
prepared = req.prepare()
s = requests.Session()
resp = s.send(prepared, verify=False, cert='certs/gd_bundle-g2-g1.crt')
Но я получаю исключение в последней строке:
OpenSSL.SSL.Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]
Моя проблема с кодом сервера или кодом клиента?
Как я могу проверитьсервер с фиктивным клиентом?
Использую ли я здесь правильный сертификат клиента?
Я новичок в цепочках сертификатов SSL.