Estou executando um aplicativo da Web PKI simples no Php que usa comandos do shell OpenSSL e armazena informações em um banco de dados de texto. Eu 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/ [...]
Adicionei
[req]
utf8 = yes
string_mask = utf8only
name_opt = multiline,-esc_msb,utf8
para os arquivos de configuração do 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 de usuário. Eu verifiquei e os campos no arquivo de configuração do usuário estão bem, assim como nas CA's. O problema aparece quando o OpenSSL cria os certificados. O banco de dados e os certs contêm esses códigos em vez dos caracteres corretos.
Eu também tentei converter o arquivo de banco de dados para UTF-8 usando iconv
, mas o arquivo permanece no formato US-ASCII. Esta abordagem altera o que file --mime-encoding
produz para utf-8, mas o OpenSSL continua a escrever novas entradas da mesma forma que antes.
Também mencionarei que estou enviando o cabeçalho utf-8 e configurando AddDefaultCharset utf-8
em virtualhosts. A localidade está definida como de_DE.utf8
no código e no servidor.
O que estou perdendo? Qualquer ajuda é apreciada.