【发布时间】:2021-04-23 08:23:05
【问题描述】:
我正在尝试开发一个快速命令行工具,它将根 CA 安装到 MacOS 系统钥匙串中。这是完成这项工作的代码块。
SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData);
SecKeychainRef keychain = nil;
OSStatus status = SecKeychainCopyDomainDefault(kSecPreferencesDomainSystem, &keychain);
if(status != errSecSuccess)
{
// log the error
return;
}
status = SecKeychainUnlock(keychain, 0, NULL, TRUE);
if(status != errSecSuccess)
{
// log the error
return;
}
status = SecTrustSettingsSetTrustSettings(certificate, kSecTrustSettingsDomainSystem, NULL);
NSDictionary * addCertificateQuery = @{(id)kSecValueRef: (__bridge id)certificate,
(id)kSecClass: (id)kSecClassCertificate,
(id)kSecAttrLabel: CERT_ATTRIBUTE_LABEL,
(id)kSecUseKeychain: (__bridge id)keychain,
(id)kSecReturnRef: @YES,
};
status = SecItemAdd((__bridge CFDictionaryRef)addCertificateQuery, NULL);
当以 root 身份使用 XCode 调试器时,证书已正确添加到系统钥匙串中,但当以 user 身份调试时(user 具有管理员权限)并在收到提示后出于某种原因,具有管理员权限的用户的用户名和密码 SecItemAdd 返回错误 -61: errSecWrPerm (user 没有写入权限)。
我一直试图找到一些文档来解释为什么会发生这种情况,但仍然没有任何线索。所以我的问题是:具有管理员权限的用户无法向系统添加证书是否有特殊原因?在 System 上写入是否只保留给 root?
我也尝试过更改 /Library/Keychains/System.keychain 权限,但结果相同。
【问题讨论】:
标签: objective-c macos certificate keychain certificate-authority