这与 macOS 有关。
我需要使用 native Mac 应用程序内部的 API 检索导入并在 Keychain 上可用的签名身份列表(证书 + 私钥)。我可以运行以下命令行并解析结果:
> /usr/bin/security find-identity -v -p codesigning
>
> 1) 0123456789ABCDEF0123456789ABCDEF01234567 "iPhone Developer: John Doe (GTHESFW12)"
> 2) 0123456789ABCDEF0123456789ABCDEF01234567 "iPhone Distribution: ABC Inc (12356DGEWS)"
> 2 valid identities found
但我正在寻找一种通过 native 安全 API 来实现此目的的方法。有办法做到这一点吗?
最佳答案
@JamesBucanek,比你提供的链接!以下是使用钥匙串(keychain)服务 API 生成的代码。可能对其他人有用:
let query: [String: Any] = [
kSecClass as String: kSecClassIdentity,
kSecReturnRef as String: kCFBooleanTrue,
kSecMatchLimit as String: kSecMatchLimitAll
]
var items: CFTypeRef?
// Get list of all SecIdentity from Keychain without limiting search and without any filtering applied
guard SecItemCopyMatching(query as CFDictionary, &items) == errSecSuccess, let array = items as? NSArray else {
return
}
for item in array {
let identity = item as! SecIdentity
var certificate: SecCertificate?
// Get SecCertificate out of SecIdentity object (it contains both SecCertificate and SecKey
if SecIdentityCopyCertificate(identity, &certificate) == errSecSuccess {
var commonName: CFString?
// Print name for each certificate
if SecCertificateCopyCommonName(certificate!, &commonName) == errSecSuccess {
print(commonName! as String)
}
}
}
关于objective-c - 通过 API 检索签名身份列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50427607/