OpenSSL konvertiert Zeichen in UTF-8-Literale

OpenSSL konvertiert Zeichen in UTF-8-Literale

Ich führe eine einfache PKI-Webanwendung in PHP aus, die OpenSSL-Shell-Befehle verwendet und Informationen in einer Textdatenbank speichert. Ich muss mit Nicht-ASCII-Eingabezeichen (z. B. Deutsch) umgehen, aber wenn ein neues Zertifikat erstellt wird, werden die Felder zu

[...] /C=DE/ST=H\xC3\xA4mburg/L=H\xC3\xA4mburg/O=\xC3\x9FBCD/OU=\xC3\xA4BC/ [...]

Ich habe hinzugefügt

[req]
utf8                = yes
string_mask         = utf8only
name_opt            = multiline,-esc_msb,utf8

zu den OpenSSL-Konfigurationsdateien, und die Zertifikate werden erstellt mit

openssl req -utf8 [...]
openssl ca -utf8 [...]

Das Programm erstellt temporäre Konfigurationsdateien, die zum Anfordern und Erstellen des Benutzerzertifikats verwendet werden. Ich habe es überprüft und die Felder in der Benutzerkonfigurationsdatei sowie in den CAs sind in Ordnung. Das Problem tritt auf, wenn OpenSSL die Zertifikate erstellt. Die Datenbank und die Zertifikate enthalten diese Codes anstelle der richtigen Zeichen.

Ich habe auch versucht, die Datenbankdatei in UTF-8 zu konvertieren, iconvaber die Datei bleibt im US-ASCII-Format.Dieser Ansatzändert die file --mime-encodingAusgabe in UTF-8, OpenSSL schreibt neue Einträge jedoch weiterhin auf die gleiche Weise wie zuvor.

Ich werde auch erwähnen, dass ich den UTF-8-Header sende und ihn in virtuellen Hosts einstelle . Das Gebietsschema ist im Code und auf dem Server AddDefaultCharset utf-8festgelegt .de_DE.utf8

Was übersehe ich? Jede Hilfe ist willkommen.

Antwort1

Ich habe auch tagelang damit gekämpft, bis es endlich funktioniert hat.

-utf8auf der Befehlszeile und utf8 = yesin der Konfiguration scheint etwas überflüssig.

Ich habe es -utf8 -nameopt multiline,utf8auf der Kommandozeile verwendet, ich habe nichts in der Konfigurationsdatei maskiert (ich habe mehrere Versionen davon ausprobiert, aber keine hat funktioniert), die besagtUTF-8 Unicode-Textwenn ich laufe file <configfile>.

Mein Gebietsschema und meine Befehlszeilenschnittstelle sind für die Verwendung von UTF-8-Eingabe und -Ausgabe konfiguriert. Die Konfiguration ähnelt der folgenden:

[req]
prompt = no
distinguished_name = subject

[subject]
C = DE
ST = myutf8state
L = myutf8locality
O = myutf8organization
OU = myutf8organizational unit
CN = my.common.name

Diese beiden Fragen auf Stackoverflow haben mir geholfen:

verwandte Informationen