4

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

在浏览了 Apple Developer Forums 之后,我意识到这样做的一种方法是检查嵌入在配置文件中的证书是否已安装并被用户信任。如果是,则暗示(有例外)配置文件是由用户安装的。

我浏览了这个链接,其中 OP 有类似的要求,但显然它无法检测到证书是否已安装。

有没有人有这样做的经验?

4

1 回答 1

0

您无法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")
    }
}
于 2020-11-13T13:23:45.970 回答