如果您在 General->About->Certificate Trust Settings 下没有看到证书,那么您可能没有安装 ROOT CA。非常重要——需要是根 CA,而不是中间 CA。
使用 openssl 很容易确定:
$ openssl s_client -showcerts -connect myserver.com:443 </dev/null
这将显示证书链中证书的输出,如下所示:
Certificate chain
0 s:/C=US/ST=California/L=SAN FRANCISCO/O=mycompany.com, inc./OU=InfraSec/CN=myserver.com
i:/C=US/O=mycompany.com, inc./CN=mycompany.com Internal CA 1A
-----BEGIN CERTIFICATE-----
....encoded cert in PEM format....
-----END CERTIFICATE-----
它应该显示一串证书,一直到 ROOT CA。继续关注输出,注意表示 ISSUER 的“i:”值。最后,您应该到达 ROOT CA 并可以将其复制粘贴到 .pem 文件中(确保包含 BEGIN CERTIFICATE 和 END CERTIFICATE 行!)。现在,您可以通过拖放到模拟器窗口将其安装在模拟器上。
如果您的 ROOT CA 未列出,则在输出中找到顶层,然后从 Keychain Access.app 中将其导出。这假设您能够通过 Safari/Chrome 访问该网站,因此您必须首先手动信任该网站。
我的“openssl s_client”输出以显示的最后一个证书结束,颁发者如下:
i:/C=US/O=mycompany.com, inc./CN=mycompany.com 内部根 CA 1
我能够通过 Safari/Chrome 成功访问目标网站,这意味着 Keychain 已将其存储并信任它。所以,我刚刚通过 Spotlight 启动了 Keychain Access.app 并在搜索栏中输入了“mycompany”。它显示了我的“mycompany.com Internal Root CA 1”证书(Kind=certificate)。我只是右键单击并选择“导出”并将其保存到 .cer 文件中。
瞧!现在我可以将它拖放到我的模拟器上,ROOT CA 将显示在 General->About... 下,我可以启用它。
如果由于某种原因您需要将 PEM 文件转换为 DER/CER,只需使用以下命令:
$ openssl x509 -in myfile.pem -out myfile.der -outform DER
希望这会有所帮助,我已经这样做了几十次,并且认为是时候记下一些笔记,这样我就不会忘记了。