如何理解远程内核扩展代码签名?
How to understand remote kernel extension code signing?
内核扩展签名比签名 user-space 可执行文件更复杂。 Apple 向我颁发了 kext 签名证书。当我从 Xcode GUI 或使用 xcodebuild 构建时,它可以工作。
阅读精美手册可以让我到达我想去的地方,但每当我尝试签署我的 driver 时,我的头都晕了。
我正在为我的客户配置一个远程构建框。除了代码签名之外,我已经完成了所有工作。如果我登录到 GUI,然后 运行 我的 "build_all" 脚本,codesign 会显示一个 GUI,提示我输入密码。如果我 ssh 进入,协同设计将失败。
我想我要做的是:
$ security unlock-keychain ...
$ codesign ...
$ security lock-keychain ...
我可以弄清楚如何锁定和解锁我的钥匙链;令我困惑的是 codesign 命令行。
这是 xcodebuild 的作用:
/usr/bin/codesign --force --sign 84208E9C30B70E303186BAF330554E82E1891492 --requirements =designated\ =>\ anchor\ apple\ generic\ \ and\ identifier\ \"$self.identifier\"\ and\ ((cert\ leaf[field.1.2.840.113635.100.6.1.9]\ exists)\ or\ (\ certificate\ 1[field.1.2.840.113635.100.6.2.6]\ exists\ and\ certificate\ leaf[field.1.2.840.113635.100.6.1.13]\ exists\ \ and\ certificate\ leaf[subject.OU]\ =\ \"444JK52Q93\"\ )) --timestamp=none /Users/build/BuildBox/FL2000/trunk/IOProxyVideoFamily/Release/IOProxyFramebuffer.kext
我试图复制上面的命令行,然后将其粘贴到终端中,但是太多的括号导致命令失败:
Command-C
Command-V
-bash: syntax error near unexpected token `('
也许我需要的只是在 codesign 的命令行中添加一些引号或反斜杠。
您缺少 "
要求字符串。
改为:
/usr/bin/codesign --force --sign 84208E9C30B70E303186BAF330554E82E1891492 --requirements "=designated => anchor apple generic and identifier \"$self.identifier\" and ((cert leaf[field.1.2.840.113635.100.6.1.9] exists) or ( certificate 1[field.1.2.840.113635.100.6.2.6] exists and certificate leaf[field.1.2.840.113635.100.6.1.13] exists and certificate leaf[subject.OU] = \"444JK52Q93\" ))"--timestamp=none /Users/build/BuildBox/FL2000/trunk/IOProxyVideoFamily/Release/IOProxyFramebuffer.kext
内核扩展签名比签名 user-space 可执行文件更复杂。 Apple 向我颁发了 kext 签名证书。当我从 Xcode GUI 或使用 xcodebuild 构建时,它可以工作。
阅读精美手册可以让我到达我想去的地方,但每当我尝试签署我的 driver 时,我的头都晕了。
我正在为我的客户配置一个远程构建框。除了代码签名之外,我已经完成了所有工作。如果我登录到 GUI,然后 运行 我的 "build_all" 脚本,codesign 会显示一个 GUI,提示我输入密码。如果我 ssh 进入,协同设计将失败。
我想我要做的是:
$ security unlock-keychain ...
$ codesign ...
$ security lock-keychain ...
我可以弄清楚如何锁定和解锁我的钥匙链;令我困惑的是 codesign 命令行。
这是 xcodebuild 的作用:
/usr/bin/codesign --force --sign 84208E9C30B70E303186BAF330554E82E1891492 --requirements =designated\ =>\ anchor\ apple\ generic\ \ and\ identifier\ \"$self.identifier\"\ and\ ((cert\ leaf[field.1.2.840.113635.100.6.1.9]\ exists)\ or\ (\ certificate\ 1[field.1.2.840.113635.100.6.2.6]\ exists\ and\ certificate\ leaf[field.1.2.840.113635.100.6.1.13]\ exists\ \ and\ certificate\ leaf[subject.OU]\ =\ \"444JK52Q93\"\ )) --timestamp=none /Users/build/BuildBox/FL2000/trunk/IOProxyVideoFamily/Release/IOProxyFramebuffer.kext
我试图复制上面的命令行,然后将其粘贴到终端中,但是太多的括号导致命令失败:
Command-C
Command-V
-bash: syntax error near unexpected token `('
也许我需要的只是在 codesign 的命令行中添加一些引号或反斜杠。
您缺少 "
要求字符串。
改为:
/usr/bin/codesign --force --sign 84208E9C30B70E303186BAF330554E82E1891492 --requirements "=designated => anchor apple generic and identifier \"$self.identifier\" and ((cert leaf[field.1.2.840.113635.100.6.1.9] exists) or ( certificate 1[field.1.2.840.113635.100.6.2.6] exists and certificate leaf[field.1.2.840.113635.100.6.1.13] exists and certificate leaf[subject.OU] = \"444JK52Q93\" ))"--timestamp=none /Users/build/BuildBox/FL2000/trunk/IOProxyVideoFamily/Release/IOProxyFramebuffer.kext