
Estoy ejecutando una aplicación web PKI simple en PHP que usa comandos de shell OpenSSL y almacena información en una base de datos de texto. Tengo que lidiar con caracteres de entrada que no son ASCII (por ejemplo, alemán), pero cuando se crea un nuevo certificado, los campos se convierten en
[...] /C=DE/ST=H\xC3\xA4mburg/L=H\xC3\xA4mburg/O=\xC3\x9FBCD/OU=\xC3\xA4BC/ [...]
he añadido
[req]
utf8 = yes
string_mask = utf8only
name_opt = multiline,-esc_msb,utf8
a los archivos de configuración de OpenSSL, y los certificados se crean usando
openssl req -utf8 [...]
openssl ca -utf8 [...]
El programa escribe archivos de configuración temporales utilizados para solicitar y crear el certificado de usuario. Lo verifiqué y los campos en el archivo de configuración del usuario están bien, así como en los de CA. El problema aparece cuando OpenSSL crea los certificados. La base de datos y los certificados contienen estos códigos en lugar de los caracteres correctos.
También intenté convertir el archivo de la base de datos a UTF-8, iconv
pero el archivo permanece en formato US-ASCII.Este enfoquecambia lo que file --mime-encoding
genera a utf-8, pero OpenSSL continúa escribiendo nuevas entradas de la misma manera que antes.
También mencionaré que enviaré el encabezado utf-8 y lo configuraré AddDefaultCharset utf-8
en virtualhosts. La configuración regional está configurada de_DE.utf8
en el código y en el servidor.
¿Qué me estoy perdiendo? Se agradece cualquier ayuda.
Respuesta1
También estuve luchando con esto durante días y finalmente lo hice funcionar.
-utf8
en la línea de comando y utf8 = yes
en la configuración parece un poco redundante.
Lo usé -utf8 -nameopt multiline,utf8
en la línea de comandos, no escapé de nada en el archivo de configuración (probé varias versiones de eso pero ninguna funcionó) que diceTexto Unicode UTF-8cuando corro file <configfile>
.
Mi configuración regional y cli están configurados para usar entrada y salida utf-8, la configuración es similar a:
[req]
prompt = no
distinguished_name = subject
[subject]
C = DE
ST = myutf8state
L = myutf8locality
O = myutf8organization
OU = myutf8organizational unit
CN = my.common.name
Encontré que estas 2 preguntas en stackoverflow fueron de ayuda: