我们正在开发一个Mac App(非沙盒)需要访问钥匙串中的ssl客户端证书。 当应用程序首次启动时,会提示确认访问钥匙串项目。带选项:始终允许,允许,拒绝。这很好。
当用户选择始终允许时,下次用户启动应用时,该应用将具有使用该证书的正确访问权限。但是,当我们的应用程序更新。(我们的应用程序更新使用sparkle,它只是简单地替换磁盘上的.app文件,然后重新启动应用程序),更新的应用程序某些人无法访问此证书,并获得错误-25293 (errSecAuthFailed),
控制台输出
Dec 10 19:21:55 userMacBook-Pro.local com.apple.SecurityServer[15]: suppressing keychain prompt for invalidly signed client /Applications/My-APP.app(42277)
Dec 10 19:21:55 userMacBook-Pro.local My-APP[42277]: CFNetwork SSLHandshake failed (-25293)
Error Domain=kCFStreamErrorDomainSSL Code=-25293
然后我检查钥匙串中的私钥,应用程序的名称仍在访问控制面板中。最后,我重新启动系统,更新的应用程序可以再次访问此证书(没有任何促销提示确认访问钥匙串项目)一切正常。那么,如何在不更新系统的情况下让应用程序在更新后保持对证书的正确访问权限?但是这个错误并不总是显示出来,如果系统只是启动(不运行几个小时),应用程序可以更新服务时间并保留证书权。
PS,如果我手动转到访问控制列表并选择“允许所有应用程序访问此项目,那么该应用程序将具有正确的访问权限。但我们不能让我们的用户执行此操作”
在一些谷歌搜索之后,我在sequel-pro上发现了类似的问题Won't save passwords on 10.8 12A269
那么,我怎样才能让我的应用更新,并保持正确的访问权限? 我在serval 10.9.x,10.10.x系统上发现了这个问题。