0

我有一个作为根级守护进程运行的可执行文件(从 /Library/LaunchDaemons 启动)和它加载的动态库。它们都使用相同的标识符进行签名,并且都需要访问相同的钥匙串。当我SecKeychainItemExport()从动态库中的代码调用时,我得到错误代码-25308。这转化为errSecInteractionNotAllowed......本质上是一个权限问题。

如果守护进程以 root 身份从终端窗口运行,则会出现提示,询问我:“{您的进程}想要从您的钥匙串中导出密钥“privateKey”。您要允许访问此项目吗?” 在这些提示上单击始终允许可以让一切顺利进行。似乎当进程无头运行时,它无法提示,因此它只是因errSecInteractionNotAllowed错误而失败。

我曾假设如果可执行文件和库都使用相同的证书和相同的标识符进行签名,那么它们将具有对钥匙串等资源的平等访问权限,但我似乎遗漏了一些东西。

对于代码签名,这是在动态库上运行的命令:

codesign -s "$CertName" -i com.abc.xyz -r='designated => anchor trusted and identifier com.abc.xyz and certificate leaf[subject.O]="My Company" and certificate leaf[subject.CN]="My Company"' ${PROJECT_ROOT_DIR}/library.dylib
codesign -dvvv ${PROJECT_ROOT_DIR}/library.dylib

代码签名需要做什么才能允许我的可执行文件和库之间的平等访问?

4

0 回答 0