Sierra的安全/密码:钥匙串忽略访问控制设置和UI提示以获得许可
从macOS Sierra开始,我无法使用/ usr / bin / security将密码标识导入到密钥链中,而无需使用usr / bin / codesign UI提示使用此标识进行访问。 这打破了构build服务器的打包脚本。 似乎没有解决方法。 这会影响自定义创build的钥匙串,但也会影响login.keychain。
重现步骤:在terminal中执行以下命令(需要签名标识才能导入):
security create-keychain -p test buildagent.keychain security unlock-keychain -p test buildagent.keychain security list-keychains -d user -s buildagent.keychain security default-keychain -s buildagent.keychain security import identity.p12 -k buildagent.keychain -P password -T /usr/bin/codesign codesign -vfs '$IDENTITY' '${PRODUCT}' --keychain 'buildagent.keychain'
结果:macOS显示一个UI提示,要求获得访问先前导入的私钥的权限。
我已经尝试了很多解决方法,但似乎没有任何工作:
- 指定钥匙串名称时使用新的.keychain-db扩展名
- 使用login.keychain而不是自定义的
- 用-A('允许任何应用程序访问导入的键')导入p12
- 单独导入证书和密钥(在使用openssl pkcs12之前从p12中提取)
导入标识肯定有效,在Keychain Access应用程序中显示Keychain的内容时,我可以看到证书和密钥。 私钥的访问控制设置也正确configuration(使用期望的代码签名例外规则)。
我怎样才能避免从塞拉利昂的UI提示?
您需要使用的命令如下所示:
security set-key-partition-list -S apple-tool:,apple: -s -k keychainPass keychainName
请记住,这个命令行工具的工作方式就像列表 – 钥匙链的修改方式。 如果使用单个值执行set-key-partition-list,它将覆盖证书中的所有分区ID。 它不会validation通过的值。
该命令的作用是设置可以为特定的钥匙串签名(-s)的密钥的PartitionIDs(用逗号分隔的-S之后的项目)。 允许代码签名的实际分区ID是apple:
:。
我不知道apple-tool:
是做什么的,因为它没有logging,但是在导入带有security import
的密钥后,它在那里,所以我保留它以避免打破复制粘贴命令的人。
这个变化是在Mac OS Sierra中引入的,没有logging(或者至less我找不到文档)。 截至10月16日,安全手册页仍然没有列出这个命令。
欲了解更多信息,你可以参考这个错误报告 – http://www.openradar.me/28524119
对于那些与Travis或其他CI有此问题的人,您必须在应用程序ID列表中添加codesign
。
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k keychainPass keychainName
PS:我使用keychainName.keychain(添加.keychain
)
从这个答案的命令只解锁钥匙串为我,但我仍然有用户界面提示询问当前的应用程序是否可以使用密钥。
我阻止了这样的提示:
进入钥匙串访问中的钥匙串,双击那里的所有钥匙,并在访问控制选项卡中选中“允许所有应用程序访问该项目”。
我能够将新的钥匙串file upload到我的Jenkins构build服务器,在那里它被Keychain和Provisioning Profiles插件解锁。 构build现在成功签署。