Доступ к цепочке для ключей показывает <key>как имя в диалогах вместо того, с чем я создал ключ - PullRequest
0 голосов
/ 15 ноября 2018

Я создаю асимметричный ключ подписи в macOS, используя этот код:

const NSData* SignKeyTag = [@"ca.website.signRSA2048" dataUsingEncoding:NSUTF8StringEncoding];
const NSNumber* SignKeySize = @2048;
const SecKeyAlgorithm SigningAlg = kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384;
const NSString* SignKeyType = (id)kSecAttrKeyTypeRSA;
const NSString* SignKeyLabel = @"Signing Key";

NSDictionary* attributes =
                @{
                    (id)kSecAttrKeyType:            SignKeyType,
                    (id)kSecAttrKeySizeInBits:      SignKeySize,
                    (id)kSecAttrLabel: SignKeyLabel,
                    (id)kSecAttrDescription: SignKeyLabel,
                    (id)kSecPrivateKeyAttrs:
                        @{
                            (id)kSecAttrIsPermanent:    @YES,
                            (id)kSecAttrApplicationTag: SignKeyTag,
                        },
                 };

CFErrorRef error = NULL;
myPrivKeyRef = SecKeyCreateRandomKey((__bridge CFDictionaryRef)attributes, &error);

Это отлично работает, и я могу подписать и проверить без проблем. Проблема, с которой я сталкиваюсь, заключается в том, что если необходимо дать разрешение на доступ к ключу, в диалоговом окне, запрашивающем у пользователя Разрешить / Запретить / Всегда разрешать доступ к ключу, отображается имя <key> вместо любой метки / тега / описания я даю. Также, если я редактирую ключ в Keychain Access.app, он также запрашивает у меня разрешение на изменение <key>.

Keychain Access правильно показывает метку в списке, я не вижу <key> нигде в ключевой информации. Также, если я перечислю атрибуты для ключа в коде, я не вижу <key>.

Теперь я предполагаю, что ярлык, который я вижу, может быть из открытого ключа. Однако в документации сказано, что я не должен хранить открытый ключ отдельно, а просто получать его из закрытого ключа, когда это необходимо, используя SecKeyCopyPublicKey ().

Есть идеи? Спасибо!

...