Получение списка подписывающих удостоверений через API - PullRequest
0 голосов
/ 19 мая 2018

Это связано с macOS.

Мне нужно получить список подписывающих удостоверений (сертификат + закрытый ключ), импортированных и доступных в связке ключей, используя API из собственного приложения Mac.Я могу запустить следующую командную строку и проанализировать результат:

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

Но я ищу способ сделать это с помощью встроенного API безопасности.Есть ли способ сделать это?

1 Ответ

0 голосов
/ 20 мая 2018

@ JamesBucanek, чем вы за ссылку!Вот результирующий код с использованием API Keychain Services.Может быть, это будет полезно другим людям:

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)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...