如何检查证书是不是在 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 上安装和信任的主要内容,如果未能解决你的问题,请参考以下文章