如何检查 iOS 上是否安装并信任证书

Mah*_*iya 5 security certificate ios configuration-profile swift

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

在浏览完 Apple 开发者论坛后,我意识到实现此目的的一种方法是检查配置文件中嵌入的证书是否已安装并受到用户信任。如果是,则隐式意味着(有例外)配置配置文件是由用户安装的。

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

有人有这样做的经验吗?

iUr*_*rii 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")
    }
}
Run Code Online (Sandbox Code Playgroud)