如何检查证书是不是在 iOS 上安装和信任

Posted

技术标签:

【中文标题】如何检查证书是不是在 iOS 上安装和信任【英文标题】:How to check if a Certificate is installed and trusted on iOS如何检查证书是否在 iOS 上安装和信任 【发布时间】:2021-02-20 13:28:03 【问题描述】:

我有一个应用程序会提示用户下载并安装配置文件。该配置文件包含一个嵌入其中的根 CA。下载后,我想检查设备上是否安装了配置文件。

浏览 Apple 开发者论坛后,我意识到一种方法是检查配置文件中嵌入的证书是否已安装并被用户信任。如果是,则暗示(有例外)配置文件是由用户安装的。

我查看了this link,其中 OP 有类似的要求,但显然它无法检测到证书是否已安装。

有人有这方面的经验吗?

【问题讨论】:

我只能赞成并评论说检查证书信任是一种相当迂回的方式。我试过看看你是否可以使用payloadIdentifier,但想出了吸管; Apple 文档与我预期的一样粗略(但话又说回来,这不是我的专长)。顺便说一句,我至少会支持另一个 Q/A。 如果 objc 示例代码是您的答案,只需将其转换为 Swift @iUrii Objective-C 也不行! 【参考方案1】:

您不能使用SecTrustEvaluateAsyncWithError 来识别证书是否已安装(受信任),例如:

// Load cert
guard let filePath = Bundle.main.path(forResource: "your_cert", ofType: "crt"),
      let data = try? Data(contentsOf: URL(fileURLWithPath: filePath)),
      let certificate = SecCertificateCreateWithData(nil, data as CFData)
else 
    return


// Check
var secTrust: SecTrust?
if SecTrustCreateWithCertificates(certificate, SecPolicyCreateBasicX509(), &secTrust) == errSecSuccess, let trust = secTrust 
    SecTrustEvaluateAsyncWithError(trust, .main)  trust, result, error in
        print("Cert is", result ? "installed" : "not installed")
    

【讨论】:

感谢您的回答。我无法加载证书。任何线索为什么会发生这种情况? 检查您的证书是否已添加到您的捆绑包以及证书的名称和分机。

以上是关于如何检查证书是不是在 iOS 上安装和信任的主要内容,如果未能解决你的问题,请参考以下文章

如何列出OpenSSL信任的证书?

如何在 Android 设备上安装受信任的 CA 证书?

DirectX 9安装出现不能信任一个安装所需的压缩文件。请检查加密服务是不是启用并且Cabinet文件证书是不是有效

解决Charles抓包ssl证书信任问题

如何在 Java 中以编程方式检查 SSL 证书到期日期

如何在 Chrome 信任的本地 Windows 虚拟主机开发机器上创建/安装自签名 SSL 证书? [复制]