
Estou executando um aplicativo Web PKI simples em PHP que usa comandos shell OpenSSL e armazena informações em um banco de dados de texto. Tenho que lidar com caracteres de entrada não ASCII (por exemplo, alemão), mas quando um novo certificado é criado, os campos se transformam em
[...] /C=DE/ST=H\xC3\xA4mburg/L=H\xC3\xA4mburg/O=\xC3\x9FBCD/OU=\xC3\xA4BC/ [...]
eu já adicionei
[req]
utf8 = yes
string_mask = utf8only
name_opt = multiline,-esc_msb,utf8
aos arquivos de configuração OpenSSL, e os certificados são criados usando
openssl req -utf8 [...]
openssl ca -utf8 [...]
O programa grava arquivos de configuração temporários usados para solicitar e criar o certificado do usuário. Verifiquei e os campos no arquivo de configuração do usuário estão corretos, assim como nos CA's. O problema aparece quando o OpenSSL cria os certificados. O banco de dados e os certificados contêm esses códigos em vez dos caracteres corretos.
Também tentei converter o arquivo de banco de dados para UTF-8, iconv
mas o arquivo permanece no formato US-ASCII.Esta abordagemaltera a file --mime-encoding
saída para utf-8, mas o OpenSSL continua a escrever novas entradas da mesma maneira que antes.
Também mencionarei que estou enviando o cabeçalho utf-8 e configurando AddDefaultCharset utf-8
em virtualhosts. A localidade é definida de_DE.utf8
no código e no servidor.
o que estou perdendo? Qualquer ajuda é apreciada.
Responder1
Eu estava lutando com isso por dias também, finalmente consegui funcionar.
-utf8
na linha de comando e utf8 = yes
na configuração parece um pouco redundante.
Usei -utf8 -nameopt multiline,utf8
na linha de comando, não escapei de nada no arquivo de configuração (tentei várias versões disso, mas nenhuma funcionou) que dizTexto Unicode UTF-8quando eu corro file <configfile>
.
Minha localidade e cli estão configurados para usar entrada e saída utf-8, a configuração é semelhante a:
[req]
prompt = no
distinguished_name = subject
[subject]
C = DE
ST = myutf8state
L = myutf8locality
O = myutf8organization
OU = myutf8organizational unit
CN = my.common.name
Achei que estas 2 perguntas sobre stackoverflow podem ajudar: