ssl.SSLError: [SSL] PEM lib (_ssl.c: 3833) в библиотеке python ssl - PullRequest
1 голос
/ 24 сентября 2019

, поэтому я работал с проверкой сертификата X509 на моем IoT-концентраторе, чтобы отправлять / получать сообщения из моего приложения.Однако он продолжает выбрасывать ошибку ssl.SSLError: [SSL] PEM lib (_ssl.c:3833).

У меня есть правильный сертификат, закрытый ключ и пароль.Поэтому я перешел на python github, чтобы проверить, что означает ошибка, и строка 3833 в файле _ssl.c означает

r = SSL_CTX_use_certificate_chain_file(self->ctx,
        PyBytes_AS_STRING(certfile_bytes));
    PySSL_END_ALLOW_THREADS_S(pw_info.thread_state);
    if (r != 1) {
        if (pw_info.error) {
            ERR_clear_error();
            /* the password callback has already set the error information */
        }
        else if (errno != 0) {
            ERR_clear_error();
            PyErr_SetFromErrno(PyExc_OSError);
        }
        else {
            _setSSLError(NULL, 0, __FILE__, __LINE__); <--- THIS IS LINE 3833
        }
        goto error;
    }

Означает ли это, что мой сертификат неверен?В настоящее время мой сертификат находится в таком месте, как C: /Certificate/MyCertName.pfx. Спасибо за чтение и любую помощь!

1 Ответ

1 голос
/ 24 сентября 2019

Это означает, что SSL_CTX_use_certificate_chain_file (, который является частью OpenSSL ) возвратил код ошибки, и ни один из двух типичных случаев не описывает ситуацию, поэтому код Python не может рассказать вам больше об этом.

Таким образом, единственное руководство - проверить, что именно получает эта функция, и прочитать ее документацию (и исходный код, если этого недостаточно), чтобы попытаться выяснить, почему она не работает.Если этого недостаточно, вам придется запустить процесс в отладчике C, чтобы проверить то же самое in vivo.


Мое (слепое) предположение: файл сертификата может быть неправильным / неподдерживаемымформатировать / шифровать или не содержать правильную цепочку сертификатов в соответствии со стандартом TLS .В частности, документация гласит:

SSL_CTX_use_certificate_chain_file() загружает цепочку сертификатов из file в ctx.Сертификаты должны быть в формате PEM и должны быть отсортированы, начиная с сертификата субъекта (фактического сертификата клиента или сервера), за которым следуют промежуточные сертификаты CA, если это применимо, и заканчивая СА высшего уровня (корневой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...