如何在iOS 11中安装自签名证书

时间:2018-03-22 06:43:17

标签: ios ssl self-signed

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

我已经获得了自签名的根文件并将其转换为.der文件,并通过网络将其安装到我的iPad上。

ipad with cert

但与Answer不同,我无法在设置>上看到我的root ca证书。一般>关于>证书信任设置。

no cert??

iOS中可信任的证书是否有任何限制?我的iPhone和iPad都有这个问题。我的手术有什么不对吗?

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果在“常规”->“关于”->“证书信任设置”下看不到证书,则可能未安装ROOTCA。非常重要-必须是根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-----

它应该显示一连串的证书,直到ROOTCA。继续跟踪输出,注意表示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内部根CA 1”的我的证书(Kind = certificate)。我只需右键单击并选择“导出”,然后将其保存到.cer文件中。

Voila!现在,我可以将其拖放到模拟器中,并且ROOT CA将显示在General-> About ...下,并且可以启用它。

如果由于某种原因需要将PEM文件转换为DER / CER,只需使用以下命令:

$ openssl x509 -in myfile.pem -out myfile.der -outform DER

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

答案 2 :(得分:0)

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

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

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