关于ssl:向iPhone模拟器添加自签名证书?

Adding a self-signed certificate to iphone Simulator?

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

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

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

更新

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

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


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

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

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


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

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

General -> About -> Certificate Trust Settings ->"Enable Full Trust for Root Certificate" for your particular certificate

在此处查看完整答案:


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

ADVTrustStore

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

安装自定义证书的步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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可以,但是我的应用程序不行。


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

也可以看看:

  • iPhone TrustStore CA证书
  • http://redgreenrefactor.eu/blog/testing-https-on-iphone-simulator/

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


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

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

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

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

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


看看iostrust Ruby gem:http://github.com/yageek/iostrust