objective-c - 通过 API 检索签名身份列表

标签 objective-c swift macos security certificate

这与 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/

相关文章:

objective-c - Objective C - 手动数组 FIFO 队列

ios - 如何停止 View Controller 以获取 tableView 单元格 subview 的触摸?

ios - Collection View 自动调整大小并设置重复背景

ios - 这个 SKShapeNode 渐变着色代码有什么问题?

swift - 如何使 NSVisualEffectView 仅在内容位于其下方时出现

java - MacOS 上的 mongo-java-driver 问题

ios - interactivePopGestureRecognizer - 弹出或返回当前 View Controller

swift - CALayer.shadowOffset是如何从CGSize设置的?

html - Window 和 Mac 之间的字体对齐问题

iOS:滑动表格 View 单元格时是否可以覆盖 show-red-delete-button-method?