OpenSSL con rutas unicode
-
18-09-2019 - |
Pregunta
Tengo una implementación de SSL HandShake desde el lado del cliente, utilizando estas funciones: SSL_CTX_LOAD_VERIFY_LOCATIONS SSL_CTX_USE_CERTIFATE_CHAIN_FILE SSL_CTX_USE_PRIVATEKEK_FILE
Todas las funciones obtienen el tipo de char* para el parámetro de nombre de archivo. ¿Cómo puedo cambiarlo para admitir también ubicaciones de archivos de Unicode?
¡Gracias!
Solución
¿En qué plataforma? OpenSSL en POSIX admite rutas UTF-8, pero no en otras plataformas. Lo más probable es que tendrá que cargar manualmente los archivos de certificado usted mismo utilizando las funciones de E/S de archivos del sistema operativo estándar que admiten rutas Unicode, y luego analizar los datos sin procesar y cargarlos en OpenSSL, como VIA PEM_read_bio_X509
con sk_X509_NAME_push
, PEM_read_bio_PrivateKey/d2i_PrivateKey_bio
con SSL_CTX_use_PrivateKey
, d2i_X509_bio/PEM_read_bio_X509
con SSL_CTX_use_certificate
, etc.
Otros consejos
Quiero responder a la publicación anterior en lugar de crear una nueva respuesta, sin embargo, no pude responderla, así que creo una nueva respuesta. Según mis pruebas de SSL_CTX_LOAD_VERIFY_LOCATIONS y mirando el código OPENSSL, en realidad, OpenSSL usaría UTF-8 para la ruta del archivo también en Windows. En la función bio_new_file para abrir un archivo, elegiría UTF-8 para la ruta del archivo si se definen _win32 y cp_utf8. Esos se definen en Windows. Sin embargo, OpenSSL también tiene código para recurrir a la ruta ANSI si la ruta no es una UTF-8 caracteres válida. Entonces, con eso, en realidad OpenSSL funcionará con la ruta UTF-8 y ANSI en Windows.