我正在创建一个macOS命令行应用程序,它将Keychain中的代币存储为 kSecClassGenericPassword
. 我正在使用自签证书为本地开发的应用程序进行编码。我没有添加任何权限)。
问题是,每当我重新编译(和重新签署)二进制文件时,每当二进制文件访问钥匙链项目时,我都会得到一个提示,要求我输入管理员密码。根据这个 回答钥匙链应该检测到两个版本的二进制文件都有签名,并且具有相同的标识符,而不是要求我输入密码。我是否有什么遗漏的地方,或者有什么变通的方法来避免频繁地输入密码?
我不确定,但我强烈怀疑问题出在你的证书上。自签. macOS中的大多数安全决定都是基于 队名 嵌入到签名证书中。这可以防止恶意程序从另一个应用程序中窃取凭证,只需给自己一个相同的捆绑标识符并进行签名即可。要想跳过授权检查,捆绑标识符 和团队标识符 必须匹配。
我怀疑即使你在证书中嵌入了团队ID,因为证书并没有被Apple签署,团队ID也不会被操作系统认为是可靠的,所以你的二进制代码会被视为未签署。我怀疑CDHash(二进制代码的加密哈希)是用来代替授权的,而你的证书被忽略了。
我不知道你使用自签名证书的原因,但据我所知,你可以从苹果公司免费获得一个非常基本的苹果开发者证书,用它来签署你的二进制文件应该足以解决你遇到的问题,因为免费证书包括一个团队ID。
我能想到的唯一其他变通方法是使用一个辅助程序,其唯一目的是存储和检索证书,并使用XPC与你的主二进制文件进行通信。希望这个助手进程不需要像主程序那样频繁地更新,所以你很少会看到授权提示。当然,这还是比较尴尬的,现在你需要自己保护XPC服务的安全,防止恶意客户端。