避免每次重新编译后,必须重新输入密码才能从macOS命令行应用中访问keychain项目?

问题描述 投票:0回答:1

我正在创建一个macOS命令行应用程序,它将Keychain中的代币存储为 kSecClassGenericPassword. 我正在使用自签证书为本地开发的应用程序进行编码。我没有添加任何权限)。

问题是,每当我重新编译(和重新签署)二进制文件时,每当二进制文件访问钥匙链项目时,我都会得到一个提示,要求我输入管理员密码。根据这个 回答钥匙链应该检测到两个版本的二进制文件都有签名,并且具有相同的标识符,而不是要求我输入密码。我是否有什么遗漏的地方,或者有什么变通的方法来避免频繁地输入密码?

macos keychain darwin
1个回答
0
投票

我不确定,但我强烈怀疑问题出在你的证书上。自签. macOS中的大多数安全决定都是基于 队名 嵌入到签名证书中。这可以防止恶意程序从另一个应用程序中窃取凭证,只需给自己一个相同的捆绑标识符并进行签名即可。要想跳过授权检查,捆绑标识符 和团队标识符 必须匹配。

我怀疑即使你在证书中嵌入了团队ID,因为证书并没有被Apple签署,团队ID也不会被操作系统认为是可靠的,所以你的二进制代码会被视为未签署。我怀疑CDHash(二进制代码的加密哈希)是用来代替授权的,而你的证书被忽略了。

我不知道你使用自签名证书的原因,但据我所知,你可以从苹果公司免费获得一个非常基本的苹果开发者证书,用它来签署你的二进制文件应该足以解决你遇到的问题,因为免费证书包括一个团队ID。

我能想到的唯一其他变通方法是使用一个辅助程序,其唯一目的是存储和检索证书,并使用XPC与你的主二进制文件进行通信。希望这个助手进程不需要像主程序那样频繁地更新,所以你很少会看到授权提示。当然,这还是比较尴尬的,现在你需要自己保护XPC服务的安全,防止恶意客户端。

© www.soinside.com 2019 - 2024. All rights reserved.