gpt4 book ai didi

macos - 将私钥导入钥匙串(keychain)返回 EINVAL 错误

转载 作者:行者123 更新时间:2023-12-03 16:20:36 24 4
gpt4 key购买 nike

我正在尝试使用我的应用程序将 RSA 私钥导入到钥匙串(keychain)中。第一次使用 SecKeychainImport() 导入 key 时,操作成功,随后的导入出现 EINVAL (100022) 错误。

如果我在两次导入之间退出并重新启动应用程序,则不会发生这种情况。我在下面包含了源代码。

    CFArrayRef array = (CFArrayRef)[NSMutableArray array];

SecExternalFormat format = kSecFormatUnknown;

//We are always storing a private key…
SecExternalItemType type = kSecItemTypePrivateKey;

SecKeyImportExportParameters params;

SecKeychainRef keychain;

SecKeychainCopyDefault(&keychain);

memset(&params, 0, sizeof(params));

params.version = SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION;
params.flags = kSecKeyNoAccessControl;
params.keyUsage = CSSM_KEYUSE_ANY;
params.keyAttributes = CSSM_KEYATTR_EXTRACTABLE;

err = SecKeychainItemImport((CFDataRef)data,
(CFStringRef)@"pem",
&format,
&type,
0,
NULL,
keychain,
&array);
if(err == noErr)
{
//Change the kSecKeyPrintName attribute of the keychain item.
}

else
{
//Handle the error by displaying appropriate alert.
}

我是否遗漏了任何明显的东西?

最佳答案

尝试在 params.keyAttribute 中设置 CSSM_KEYATTR_PERMANENT 位。在 Lion 上,如果我显式设置此属性,我可以将多个 PEM 装甲 RSA 私钥(使用 openssl genrsa 生成)导入到钥匙串(keychain)中。如果不这样做,我会在导入第一个 key 时收到 errSecItemNotFound (-25300)。

(在生产中部署此代码之前,不要忘记删除 kSecKeyNoAccessControl。另外,如果您自己生成 key ,请考虑使用 SecKeyGenerate/SecKeyGenerateSymmetric 相反。)

关于macos - 将私钥导入钥匙串(keychain)返回 EINVAL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8614794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com