向 iphone Simulator 添加自签名证书?

Posted

技术标签:

【中文标题】向 iphone Simulator 添加自签名证书?【英文标题】:Adding a self-signed certificate to iphone Simulator? 【发布时间】:2011-01-14 06:01:54 【问题描述】:

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

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

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

更新

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

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

【问题讨论】:

我最近使用了一个受 CA 证书信任的主机,该证书被导入到开发 Mac 上的登录钥匙串中。 (也就是说,我本地的 Safari 信任该站点,但不信任模拟器。)我很惊讶它不能与模拟器一起使用。如何使用 iPhone 配置工具来操作模拟器上的可信证书? 【参考方案1】:

仅供参考,如果有人仍然遇到该问题:

只需将 .cer 文件拖放到正在运行的模拟器窗口中即可。您会看到 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 服务器下载证书。然后它会要求您安装它,就像您拖放它一样。 你是神我的朋友 你就是那个男人!我知道必须有一种快速的方法来做到这一点。【参考方案2】:

对于那些发现在模拟器上拖放证书不起作用的人,最近有一个更改增加了一个额外的步骤

必须明确告知模拟器信任根 CA。前往:

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

见full answer here:

【讨论】:

运行 ios 10.3 的模拟器上没有任何“为根证书启用完全信任”选项 您是否解决过这个问题——根证书未列在Certificate Trust Settings 下?我的个人资料已添加并包含一个证书——这刚刚工作不到一个月。重置我的模拟器缓存,现在添加了证书,但没有选项可以完全信任它。 就我而言,“为根证书启用完全信任”选项仅针对根证书显示。它不会出现在中间证书或叶证书中。 我还发现使用openssl生成证书时,证书必须将CA基本约束选项设置为true:basicConstraints = CA:TRUE。否则它不会显示为受信任的。 看来在 12.2(可能还有早期版本)上,程序现在是转到一般 > 配置文件,选择证书,然后点击右上角的安装【参考方案3】:

几个月来我都遇到同样的问题,今天我终于解决了:

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,我注意到它正在将证书正确安装到模拟器中,但它们没有显示在 设置 - 配置文件部分。然后经过一番搜索,我发现了这个工具。可能还有其他一些工具,但就我而言,拖放在所有情况下都无法正常工作。 Safari 会很好,但不是我的应用程序。

【讨论】:

提示:重启模拟器以安装新证书。 这对我来说是 Xcode 10.1 和 iPhone 5s 12.1 模拟器的诀窍。你只需要确保你告诉脚本在正确的模拟器中安装证书。如果您将它与 badssl.test 结合使用(即 badssl 在 docker 本地运行),您将需要破解 .pem 以删除除实际证书之外的所有内容。 这救了我的命。几乎没有社区支持将自签名证书安装到 ios 中。谢谢! 我确认它适用于带有 iOS 12.4 的 iPhone X 模拟器 10.3。【参考方案4】:

对于任何使用 OS X Catalina 的人,请查看:https://forums.developer.apple.com/thread/124056。

Catalina 当前阻止访问桌面、文档和下载文件夹。 我将证书文件移动到共享文件夹,然后将文件从那里拖放到模拟器。

【讨论】:

上帝保佑你健康:)【参考方案5】:

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

另见:

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

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

【讨论】:

@nailer 答案更新了更多参考资料,据我所知,TrustStore.sqlite3 中这些 blob 的格式是不透明的(并且可能会发生变化),因此其他人采取的方法似乎是通过 Safari 在设备上安装证书并将生成的 TrustStore 行复制到他们的模拟器中。【参考方案6】:

拖放过去可以工作,但对我来说它在 XCode 12 上不起作用。对我有用的是在模拟器上打开 Safari 浏览器,然后输入 .crt 证书文件的文件 URL。 例如。

file:///Users/[folder_path]/[certificate.crt]

之后,您必须转到 Simulator Settings 并通过导航到 General > Profiles 部分来安装证书。

【讨论】:

【参考方案7】:

对于IOS14,拖拽后需要前往:

General -> Profile -> select you profile -> install

然后:

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

另见https://developer.apple.com/library/archive/qa/qa1948/_index.html

【讨论】:

第一个路径是常规 -> 配置文件 -> 选择您的配置文件 -> 安装时不使用关于 iPHone X sim 没有 General -> Profile 但有第二个选项【参考方案8】:

使用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 从备份复制到模拟器中就可以了。

【讨论】:

【参考方案9】:

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

【讨论】:

以上是关于向 iphone Simulator 添加自签名证书?的主要内容,如果未能解决你的问题,请参考以下文章

倒腾HTTPSNginx for Docker自签名SSL证书

iOS:处理 TARGET_IPHONE_SIMULATOR 宏

iPhone 6 Simulator,iOS 8 上奇怪的 TabBar 背景问题

警告:无法为签名者“iPhone Distribution:XXXXXX”构建自签名根的链

Xcode Iphone Simulator 转风景

iPhone Simulator - 模拟慢速连接?