OpenSSL 将字符转换为 UTF-8 文字

OpenSSL 将字符转换为 UTF-8 文字

我正在 Php 中运行一个简单的 PKI Web 应用程序,该应用程序使用 OpenSSL shell 命令并将信息存储在文本数据库中。我必须处理非 ASCII 输入字符(例如德语),但是当创建新证书时,这些字段会变成

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

我已经添加

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

到 OpenSSL 配置文件,并使用创建证书

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

该程序写出用于请求和创建用户证书的临时配置文件。我已经检查过,用户配置文件中的字段以及 CA 中的字段都很好。 OpenSSL 创建证书时会出现此问题。数据库和证书包含这些代码而不是正确的字符。

我还尝试使用将数据库文件转换为 UTF-8,iconv但文件仍保持 US-ASCII 格式。这种方法将输出更改file --mime-encoding为 utf-8,但 OpenSSL 继续以与以前相同的方式写入新条目。

我还会提到我正在发送 utf-8 标头并AddDefaultCharset utf-8在虚拟主机中进行设置。区域设置de_DE.utf8在代码和服务器上设置。

我缺少什么?任何帮助表示赞赏。

答案1

我也为此苦苦挣扎了好几天,终于成功了。

-utf8在命令行和utf8 = yes配置中似乎有点多余。

-utf8 -nameopt multiline,utf8在命令行上使用,我没有转义配置文件中的任何内容(我尝试了几个版本,但没有一个有效),上面写着UTF-8 Unicode 文本当我跑步时file <configfile>

我的语言环境和 cli 配置为使用 utf-8 输入和输出,配置类似于:

[req]
prompt = no
distinguished_name = subject

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

我发现 stackoverflow 上的这两个问题很有帮助:

相关内容