将自签名证书添加到iPhone Simulator?


87

我在API的端点处有一个自签名证书。我正在尝试使用模拟器测试某些东西,但正在获取“不受信任的服务器证书”。

我尝试在模拟器上使用Safari浏览器下载.crt文件,但这似乎不起作用。

iPhone模拟器从哪里获得钥匙串?如何添加受信任的证书,以便我的应用程序可以运行?

更新

我通过创建CA,然后使用iPhone供应工具添加CA证书来使其工作。然后,我可以在API服务器上获得由该CA证书签名的证书,并且NSConnection可以正常工作。由于某种原因,我无法使用自签名证书来使其正常工作。我需要使用预配置软件重新尝试。

我真正的问题是如何在模拟器上使用它?我认为模拟器使用实际计算机的钥匙串。


1
我最近用受​​CA证书信任的主机实现了这一目标,该证书已导入到开发Mac上的登录钥匙串中。(也就是说,我的本地Safari信任该站点,但不信任该模拟器。)令我惊讶的是,它不能与该模拟器一起使用。如何使用iPhone供应工具在模拟器上操作受信任的证书?
mpontillo

Answers:


113

仅用于信息,如果仍然有人遇到该问题:

只需将.cer文件拖放到正在运行的Simulator窗口中。您会看到Safari闪烁,然后显示证书(或证书颁发机构)的导入对话框...

适用于iOS 7模拟器(我认为iOS 6也适用)。


3
拖放对于iOS 7模拟器确实可以正常工作。我可以验证它在iOS 6.0 / 6.1模拟器上不起作用。
John Bowers 2014年

2
是我还是因为我已经升级到Xcode 6,所以这种拖放操作现在仅适用于iOS 8版本的模拟器。尝试使用iPhone 5s iOS 7和iOS 7.1模拟器,将证书拖到模拟器窗口时没有任何反应。而现在我被卡住,在任何事情不能测试我的应用程序,但iOS的8
弗雷德

2
找出iOS 7和7.1的解决方法:将.cer文件放在可访问的Web服务器上(如果需要,添加application / x-x509-ca-cert mime类型),然后在模拟器上使用Safari下载证书从Web服务器。然后,它会要求您像拖放一样将其安装。
弗雷德(Fred)

3
你是上帝,我的朋友
CommaToast

1
你是男人!我知道必须有一种快速的方法来做到这一点。
pqsk

44

对于那些发现无法在Simulator上拖放证书的人来说,最近的更改增加了一个额外的步骤

必须明确告知仿真器信任根CA。为此,请执行以下操作:

常规->关于->证书信任设置->为特定证书“启用对根证书的完全信任”

这里查看完整答案


13
我的运行ios 10.3的模拟器上根本没有“启用对根证书的完全信任”选项
Jesus Rodriguez

1
您是否解决了此问题-根证书未在下面列出Certificate Trust Settings?我的个人资料已添加,并包含证书-该证书在不到一个月前有效。重置我的模拟器缓存,现在添加了证书,但没有选择完全信任它。
克里斯普(Chrisp)

3
在我的情况下,“为根证书启用完全信任”选项仅针对根证书出现。对于中间证书或叶子证书,它不会出现。
约翰·吉拉塔

1
我还发现证书必须将CA基本约束选项设置为true:basicConstraints = CA:TRUE使用openssl生成证书时。否则,它将不会显示为受信任。
sandinmyjoints

3
看来,在12.2(可能还有较早的版本)上,该过程现在是转到常规>配置文件,选择证书,然后单击右上角的安装
MaxPRafferty,

23

我几个月都遇到过同样的问题,今天我终于用以下方法解决了它:

ADVTrustStore

您将要使用来自github的名为ADVTrustStore的项目。它做了一些花哨的魔术,但是它将正确地将证书安装到模拟器上的根信任存储中。

安装自定义证书的步骤

# Clone the repo
git clone https://github.com/ADVTOOLS/ADVTrustStore.git

# Enter the repo directory
cd ADVTrustStore/

# Copy your .crt file 
cp somewhere/something.crt my.crt

# conver to a .pem file
openssl x509 -in my.crt -out my.pem -outform PEM

# Install the pem in the simulators
./iosCertTrustManager.py -a my.pem

使用此过程,我可以使用带有自签名证书的SSL签名使GoogleStreetView图像在公司防火墙后面时正确呈现

背景

我使用的是CharlesProxy,但我注意到它已将证书正确安装到Simulator中,但它们未显示在“设置-配置文件”部分中。经过一番搜索,我发现了这个工具。可能还有其他一些工具,但就我而言,拖放操作在所有情况下均无法正常工作。Safari很好,但我的应用程序却不行。


3
提示:重新启动模拟器以安装新证书。
Kiko Seijo

1
Xcode 10.1和iPhone 5s 12.1模拟器帮了我大忙。您只需要确保告诉脚本将证书安装在正确的模拟器中即可。如果您将其与badssl.test结合使用(即badssl在docker中本地运行),则需要破解.pem以删除除实际证书之外的所有内容。
安德鲁·埃布林

这救了我一命。几乎没有社区支持将自签名证书安装到ios中。谢谢!
lsimonetti

我确认它可以在适用于iOS 12.4的iPhone X的Simulator 10.3中使用。
谢尔盖·巴沙罗夫

9

看一下Charles用来将其自签名证书安装到模拟器钥匙串中的shell脚本。http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

也可以看看:

看来在模拟器中安装自己的证书可能需要通过Safari将其安装在设备上,然后将结果行从设备的副本复制TrustStore.sqlite3到模拟器中。


@nailer答案已更新,并提供了更多参考,据我所知TrustStore.sqlite3中这些blob的格式是不透明的(并且可能会更改),因此其他人采取的方法似乎是通过Safari在设备上安装证书并将生成的TrustStore行复制到其模拟器中。
约拿(Jonah)2012年


2

使用iPhone Backup Extractor,我将iPhone复制TrustStore.sqlite3~/Library/Application Support/iPhone Simulator/6.0/Library/Keychains,覆盖了现有文件。我试图仅插入具有以下sqlite的一行,但无法正常工作。

sqlite3 ~/backup/iOS\ Files/TrustStore.sqlite3
sqlite3>.mode insert
sqlite3>.output working.sql
sqlite3>select * from tsettings;
sqlite3>.quit

现在,working.sql具有tsettings表的全部内容(在我的情况下为1行)。

sqlite3 ~/Library/Application\ Support/iPhone\ Simulator/6.0/Library/Keychains/TrustStore.sqlite3
sqlite3>INSERT INTO tsettings VALUES(X'...
sqlite3>.quit

同样,上述sqlite命令对我不起作用,但对于其他人而言可能是一个不错的起点。TrustStore.sqlite3从备份中将整个副本复制到模拟器中就可以了。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.