python - tutorial - para que se usa elastic search
ssl con certificado autofirmado usando python (1)
Estoy intentando construir un servidor simple en Python usando mi certificado autofirmado. Creé archivos .cer, .pfx, .pvk usando makecert.
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile="ServerSSL.cer")
Traceback (most recent call last):
File "ssl_server.py", line 4, in <module>
context.load_cert_chain(certfile="ServerSSL.cer")
ssl.SSLError: [SSL] PEM lib (_ssl.c:2580)
¿Que hice mal? También traté de convertir mi archivo cer a pem cambiando el sufijo y obtuve el mismo error.
Cuando eche un vistazo a la fuente original de _ssl.c:2580
, puede ver que SSL_CTX_use_certificate_chain_file
fallado. Como ni pw_info.error
ni errno
están configurados, no es fácil encontrar la causa. El problema puede ser causado por el archivo crt
. Ábrelo en un editor de texto y verifica si el archivo se ve exactamente como debería ser: también verifica líneas nuevas. Si no coinciden EXACTAMENTE, la llamada a la función fallará.
2567: PySSL_BEGIN_ALLOW_THREADS_S(pw_info.thread_state);
2568: r = SSL_CTX_use_certificate_chain_file(self->ctx, certfile_bytes);
2569: PySSL_END_ALLOW_THREADS_S(pw_info.thread_state);
2570: if (r != 1) {
2571: if (pw_info.error) {
2572: ERR_clear_error();
2573: /* the password callback has already set the error information */
2574: }
2575: else if (errno != 0) {
2576: ERR_clear_error();
2577: PyErr_SetFromErrno(PyExc_IOError);
2578: }
2579: else {
2580: _setSSLError(NULL, 0, __FILE__, __LINE__);
2581: }
2582: goto error;
La documentación también dice:
Los certificados deben estar en formato PEM y deben ordenarse comenzando por el certificado del sujeto (certificado real de cliente o servidor), seguido de certificados de CA intermedios, si corresponde, y finalizando en la CA de nivel más alto (raíz).