Как uwsgi кодирует переменную окружения HTTPS_CLIENT_CERTIFICATE?

Я пытаюсь использовать строку сертификата в среде ['HTTPS_CLIENT_CERTIFICATE']. Моя цель состоит в том, чтобы приложение Flask (которое действует как CA) загружало сертификат и создавало копию с некоторыми измененными атрибутами или периодом действия.

Переменная правильно заполняется в среде, но строка (преобразованная в байты) не анализируется стандартными криптографическими библиотеками python. Я пытался с обоими: - cryptography.x509.load_der_x509_certificate(cert_bytes, default_backend()) - OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, cert_bytes) Оба жалуются, что не могут загрузить сертификат.

Я почти уверен, что проблема как-то связана с форматом переменной среды (по крайней мере, к моменту получения кода Python), потому что когда я работаю с файлами, я могу читать / писать свой сертификат в форматах PEM и DER. без проблем.

Обратите внимание, что uwsgi устанавливает HTTPS_CLIENT_CERTIFICATE в кодировку DER сертификата, предлагаемого клиентом с использованием i2d_X509: https://github.com/unbit/uwsgi/blob/master/plugins/http/https.c#L186

Когда кодируется utf-8, строка окружения выглядит (много общих последовательностей символов) похожей на кодировку DER, которую я могу получить из сертификата, работающего из файла PEM. Но строка сертификата среды примерно вдвое длиннее.

У кого-нибудь есть рабочий пример кода Python для использования в среде ['HTTPS_CLIENT_CERTIFICATE']?

0 ответов

Другие вопросы по тегам