【问题标题】:How to install self-signed certificates in iOS 11如何在 iOS 11 中安装自签名证书
【发布时间】:2018-03-22 06:43:16
【问题描述】:

我一直在我的小型办公室的 Intranet 中使用自签名证书,升级到 iOS 11 后,这些证书对我不起作用。 (Chrome 和其他浏览器对它们很满意。)

我有我的自签名根 ca 文件并将其转换为 .der 文件,并通过网络将其安装到我的 iPad 上。

但与Answer 不同,我在“设置”>“常规”>“关于”>“证书信任”设置中看不到我的根 ca 证书。

在 iOS 中信任证书是否有任何限制?我的 iPhone 和 iPad 都有这个问题。我的程序有什么问题吗?

我使用这些代码来制作我的 ca 证书。

openssl genrsa -des3 -out rootCA.key 4096

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

openssl x509 -in rootCA.crt -out cert.der -outform DER

【问题讨论】:

    标签: ios ssl self-signed


    【解决方案1】:

    如果您在 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
    

    希望这会有所帮助,我已经这样做了几十次,并且认为是时候记下一些笔记,这样我就不会忘记了。

    【讨论】:

      【解决方案2】:

      显然ios不喜欢没有Common Name的证书,所以只需用非空CN重新生成它,它就会出现在根证书列表中

      【讨论】:

      • 我遇到了与 OP 相同的问题,甚至在证书中包含所有参数也无法显示。
      【解决方案3】:

      只需使用以下命令,然后空投或通过电子邮件向自己发送该证书。 看到提示时,请务必回答所有问题

      openssl genrsa -out privatekey.pem 1024
      openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 1825
      openssl pkcs12 -export -out public_privatekey.pfx -inkey privatekey.pem -in publickey.cer
      

      在使用此命令之前,我遇到了同样的问题。我不知道为什么会发生这种情况,但该命令有效。 干杯!

      【讨论】:

      • pfx/pcks12 文件包含私钥和证书。我不认为您真的想将 CA 的私钥放入您的设备中。使用 PEM 或 DER 格式应该可以正常工作,如果他们不这样做,那么你首先创建 CA 的方式有问题
      • 此命令适用于我需要 MITM 代理进行网络调试的场景。我不会将该命令用于其他任何事情。 “如果他们不这样做,那么您首先创建 CA 的方式就有问题”,这与自签名 CA 有关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 2012-07-30
      • 1970-01-01
      • 2017-05-04
      相关资源
      最近更新 更多