我在API的端点处有一个自签名证书。 我正在尝试使用模拟器测试某些东西,但正在获取"不受信任的服务器证书"。
我尝试在模拟器上使用Safari浏览器下载.crt文件,但这似乎不起作用。
iPhone Simulator是从哪里获得钥匙串的? 如何添加受信任的证书,以便我的应用程序可以运行?
更新
我通过创建CA,然后使用iPhone供应工具添加CA证书来使其工作。 然后,我可以在API服务器上获得由该CA证书签名的证书,并且NSConnection可以正常工作。 由于某种原因,我无法使用自签名证书来使其正常工作。 我需要使用预配软件重新尝试。
我的真正问题是如何在模拟器上使用它? 我认为模拟器使用实际计算机的钥匙串。
		
		
- 
最近,我使用了受CA证书信任的主机,该主机已导入到开发Mac上的登录钥匙串中。 (也就是说,我的本地Safari信任该站点,但不信任该模拟器。)令我感到惊讶的是,它无法与该模拟器一起使用。 如何使用iPhone供应工具在模拟器上操作受信任的证书?
 
 
	  
仅用于信息,如果仍然有人遇到该问题:
只需将.cer文件拖放到正在运行的Simulator窗口中。您会看到Safari闪烁,然后显示证书(或证书颁发机构)的导入对话框...
适用于iOS 7模拟器(我认为iOS 6也适用)。
		
		
- 
拖放对于iOS 7模拟器确实可以正常工作。我可以验证它在iOS 6.0 / 6.1模拟器上不起作用。
 
- 
是我还是因为我已经升级到Xcode 6,所以这种拖放操作现在仅适用于iOS 8版本的模拟器。尝试使用iPhone 5s iOS 7和iOS 7.1模拟器,将证书拖到模拟器窗口时没有任何反应。现在,我陷入困境,无法在iOS 8以外的任何设备上测试我的应用程序。
 
- 
找出iOS 7和7.1的解决方法:将.cer文件放在可访问的Web服务器上(如果需要,添加application / x-x509-ca-cert mime类型),然后在模拟器上使用Safari下载证书从Web服务器。然后,它将要求您像拖拽它一样安装它。
 
- 
看来,这种技巧永远只适用于最新的iOS版本。但是,也许-如果没有"真正的" Web服务器可用,您可以通过在当前运行的任何iOS版本中打开safari应用程序来尝试拖放技巧,然后将其拖放到safari窗口中。至少值得一试。
 
- 
哪些文件是.cer文件?我有三个文件:private.key,certificate_request.csr和certificate.crt。 ... 没关系。我只是用我的certificate.crt文件,这似乎起作用了。 :-)
 
- 
引用的" .cer"文件等于您的certificate.crt,因为这是您要信任的(可能是已签名的)最终证书(或CA / Sub-CA)。在我的情况下,它是Base64编码(又名PEM)证书。我没有尝试其他类型(DER或PKCS12),但是如果iOS支持它们,它们也可能工作(支持.p12导入您自己的证书+私钥用于签名,例如S / MIME邮件签名)。
 
- 
你是神我的朋友
 
- 
你这个男人!我知道必须有一种快速的方法来做到这一点。
 
- 
简要说明一下:也可以使用.pem和其他公认的证书类型。发生的情况是,模拟器打开了浏览器窗口以打开拖动的文件,因此该文件应适用于从Mac到模拟器的各种传输。
 
- 
为了更加清晰,请将.cer文件从Finder拖到模拟器中。从钥匙串访问中拖动将不起作用。
 
- 
此方法DID对我来说不正确-适用于Safari,但无法解决Google Street View的任何问题
 
 
	  
对于那些发现无法在Simulator上拖放证书的人,最近的更改增加了一个额外的步骤。
必须明确告知仿真器信任根CA。为此,请执行以下操作:
General -> About -> Certificate Trust Settings ->"Enable Full Trust for Root Certificate" for your particular certificate
在此处查看完整答案:
		
		
- 
运行ios 10.3的模拟器上根本没有"启用对根证书的完全信任"选项
 
- 
您是否解决了此问题-根证书未在Certificate Trust Settings下列出?我的个人资料已添加,并包含证书-该证书仅在不到一个月前有效。重置我的模拟器缓存,现在添加了证书,但没有选择完全信任它。
 
- 
就我而言,"为根证书启用完全信任"选项仅针对根证书出现。对于中间证书或叶子证书,它不会出现。
 
- 
我还发现,使用openssl生成证书时,证书必须将CA基本约束选项设置为true:basicConstraints = CA:TRUE。否则,它将不会显示为可信任。
 
- 
拖动时,我什至无法加载file:/// path_to_cert。进度栏永远不会在Safari中完成,并且Im从未提示安装证书。版本10.1(SimulatorApp-877 CoreSimulator-581.2)
 
- 
不适用于iOS模拟器iOS12。似乎适用于我使用的设备。
 
- 
看来,在12.2(可能还有较早的版本)上,该过程现在是转到常规>配置文件,选择证书,然后单击右上角的install。
 
 
	  
 
我几个月都遇到过同样的问题,今天我终于用以下方法解决了它:
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可以,但是我的应用程序不行。
		
		
- 
提示:重新启动模拟器以安装新证书。
 
- 
Xcode 10.1和iPhone 5s 12.1模拟器帮了我大忙。 您只需要确保告诉脚本将证书安装在正确的模拟器中即可。如果您在使用badssl.test一起使用这个(即badssl在搬运工本地运行),您将需要破解的。质子交换膜去除,除了实际的证书一切。
 
- 
这救了我一命。 几乎没有社区支持将自签名证书安装到ios中。 谢谢!
 
- 
我确认它可以在带有iOS 12.4的iPhone X的Simulator 10.3中使用。
 
 
	  
看一看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复制到模拟器的证书中。
		
		
- 
关于脚本中的值如何编码的任何想法?
 
- 
@nailer答案已更新,并提供了更多参考,据我所知,TrustStore.sqlite3中这些blob的格式是不透明的(并且可能会更改),因此其他人采取的方法似乎是通过Safari在设备上安装证书并将生成的TrustStore行复制到其模拟器中。
 
 
	  
使用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