使用 OpenSSL 创建的客户端证书无法安装在 iOS 上

问题描述 投票:0回答:1

我正在使用运行 Ubuntu 22.04 的虚拟专用服务器。在 VPS 上,我使用 Apache Web 服务器来提供内容,例如 wiki。

为了确保只有我可以访问内容,我已将 Apache 配置为期望客户端通过客户端证书对自己进行身份验证。

我在 Ubuntu 服务器上使用 OpenSSL 创建 CA,然后用它创建客户端证书。客户端证书使用导出密码。

我可以在 Windows 10 上的 Firefox 和 Chrome 中的 Android 手机上毫无问题地安装和使用生成的客户端证书。因此,原则上证书和密码似乎都工作得很好。但是,具有相同导出密码的相同证书将无法在我的 iPad 上安装,并声称密码不正确。

我如何创建 CA

我已使用这些 OpenSSL 命令来创建 CA 密钥和证书:

注意:在寻找此问题的解决方案时,我发现这篇文章表明iOS无法处理使用OpenSSL 3.x创建的证书。因此,我在以下命令中使用了 OpenSSL 1.1.1。

openssl genrsa -aes256 -out ca.key
openssl req -x509 -new -nodes -key ca.key -sha512 -days 365 -out ca.crt

我如何创建客户端证书

这些是我用来创建客户端证书的 OpenSSL 命令:

openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem > client-request.pem
openssl x509 -req -in client-request.pem -days 365 -CA ca.crt -CAkey ca.key -set_serial 01 > client-cert01.pem

客户端密钥已分配有密码。

然后我将它们转换为 .pfx 文件,如下所示:

openssl pkcs12 -export -in client-cert01.pem -inkey client-key.pem -out client-cert01.pfx

.pfx 文件分配有导出密码。

如上所述,生成的 .pfx 文件适用于 Windows 上的 Firefox 和 Android 上的 Chrome,但如果我尝试使用相同的密码在 iPad 上安装相同的 .pfx 文件,则 iOS 将拒绝该密码。

The client certificate shown as an identity in my iOS settings screen.Entering the password has failed.

我尝试使用 OpenSSL 3 和 OpenSSL 1.1.1 生成证书和密钥,我尝试将证书导出为 .p12 格式(尽管我不确定这会产生很大的差异),我也尝试创建Mac Mini 上的证书请求而不是 Linux 服务器本身。然而,这些都没有任何效果。

有谁知道问题可能是什么或者我可能缺少什么?

ios ssl openssl ssl-certificate client-certificates
1个回答
0
投票

我找到了问题的原因。这有点尴尬,因为这是一个公然的用户错误。

在 Windows 上的 Firefox 上,导入证书时系统会要求您提供证书导出密码。

在 Android 版 Chrome 上,导入证书时系统会要求您提供证书导出密码。

在 iOS 上,导入证书时会要求您输入“代码”。不过,这个第一个密码提示不是指的是证书的导出密码,而是你的iPad的密码。仅在正确输入您的 iPad 密码后才会提示导出密码...

© www.soinside.com 2019 - 2024. All rights reserved.