我正在 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 上的这两个问题很有帮助: