主题:无法在 Mac OS X High Sierra 的钥匙串访问中为 gdb 共同签名系统证书
subject: cannot codesign system certificate for gdb in keychain access in Mac OS X High Sierra
我正在尝试在 Mac OSX High Sierra 上使用 gdb。我使用 brew 安装了 8.01 版本(最新版本 8.1 实际上 ), and am having trouble with the codesign step. I'm following the instructions at the page suggested by brew。
在 Keychain Access 中,我创建了一个证书,使用 "codesign" 选项并覆盖默认值,然后单击直到它询问证书的位置,为此我 select "keychain: system"。然而,紧接着我收到一条神秘消息:
An Error Occurred
Unknown Error = -2,147,414,007
此消息also occurred in a previous thread,但唯一的答案质量低下,没有用,问题似乎也没有得到太多activity/attention。我也尝试进入恢复模式并执行 csrutil disable
,但我仍然遇到 -2,147,414,007
错误。回到钥匙串访问 window,在 "System" 下,我得到了 public 和我刚创建的证书的 RSA 私钥,但证书本身不存在。
如果我重复所有这些但在 "Login" 而不是 "System" 下创建,这次将创建证书。然后我将一个 .cer 文件导出到我的桌面,然后导入回钥匙串,但在 "System" 类别下。然后我重新启动计算机,然后执行
codesign -s gdb-cert /usr/local/Cellar/gdb/8.0.1/bin/gdb
但我得到 error: The specified item could not be found in the keychain.
。
我当然可以只做 sudo gdb
或 lldb
没有问题,但我想将 gdb
与 emacs
一起使用,所以这些不是选项(当然,从技术上讲,我可以只做 sudo emacs
并且它会起作用,但出于显而易见的原因,我不想使用 sudo
)。我如何对 gdb 进行代码设计,以便我可以在不收到 mach port
投诉的情况下使用它?
编辑:看来 another thread elsewhere 有很多人遇到同样的问题。那里似乎没有明确的解决办法。我尝试了一些建议并继续得到
Unable to find Mach task port for process-id 575: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
我终于让它工作了。截至本 post 发布之日,我使用的是最新的 High Sierra。首先,我安装了旧版本的 gdb,8.0.1,而不是最新的 8.1,:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
然后 brew pin gdb
.
对于接下来的步骤,我找到了 this thread, and this other thread useful. Also, this page。
为了避免-2,147,414,007
错误,请在登录而不是系统中制作证书。然后,单击挂锁解锁系统类别,并将证书和密钥拖入系统。如果此处出现任何问题,您可以尝试文件 -> 导入和文件 -> 导出。目标是获得以下内容:
例如证书和密钥都在 System
钥匙串下,而不是 login
。 (甚至可能不需要将密钥拖入系统,但我这样做只是为了安全)。
然后,一个非常重要的步骤:右键单击证书,转到信息、信任,然后 select 始终信任每个类别。如果你不这样做,codesigning 将不会生效,并且即使你 codesign 仍然会在 gdb 中得到 mach port 错误消息。
(上面链接的两个线程中的一个答案是在目录实用程序中临时启用根帐户,但我不确定这是否真的有必要)。然后,重新启动计算机或执行 sudo killall taskgated
。然后codesign -fs gdb-cert $(which gdb)
.
然后,我不再在gdb 中收到mach 端口错误消息。我第一次运行,我得到了a popup asking for a password。为了在以后的运行中禁用它,我按照那个线程做了sudo /usr/sbin/DevToolsSecurity --enable
。
另请注意 8.0.1 有一个小问题:您将收到有关 unhandled dlyd version
的警告。 this thread 中对此进行了解释。请注意该线程中的一些 post 说断点不起作用,但我没有看到这种情况发生。
我正在尝试在 Mac OSX High Sierra 上使用 gdb。我使用 brew 安装了 8.01 版本(最新版本 8.1 实际上
在 Keychain Access 中,我创建了一个证书,使用 "codesign" 选项并覆盖默认值,然后单击直到它询问证书的位置,为此我 select "keychain: system"。然而,紧接着我收到一条神秘消息:
An Error Occurred
Unknown Error = -2,147,414,007
此消息also occurred in a previous thread,但唯一的答案质量低下,没有用,问题似乎也没有得到太多activity/attention。我也尝试进入恢复模式并执行 csrutil disable
,但我仍然遇到 -2,147,414,007
错误。回到钥匙串访问 window,在 "System" 下,我得到了 public 和我刚创建的证书的 RSA 私钥,但证书本身不存在。
如果我重复所有这些但在 "Login" 而不是 "System" 下创建,这次将创建证书。然后我将一个 .cer 文件导出到我的桌面,然后导入回钥匙串,但在 "System" 类别下。然后我重新启动计算机,然后执行
codesign -s gdb-cert /usr/local/Cellar/gdb/8.0.1/bin/gdb
但我得到 error: The specified item could not be found in the keychain.
。
我当然可以只做 sudo gdb
或 lldb
没有问题,但我想将 gdb
与 emacs
一起使用,所以这些不是选项(当然,从技术上讲,我可以只做 sudo emacs
并且它会起作用,但出于显而易见的原因,我不想使用 sudo
)。我如何对 gdb 进行代码设计,以便我可以在不收到 mach port
投诉的情况下使用它?
编辑:看来 another thread elsewhere 有很多人遇到同样的问题。那里似乎没有明确的解决办法。我尝试了一些建议并继续得到
Unable to find Mach task port for process-id 575: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
我终于让它工作了。截至本 post 发布之日,我使用的是最新的 High Sierra。首先,我安装了旧版本的 gdb,8.0.1,而不是最新的 8.1,
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
然后 brew pin gdb
.
对于接下来的步骤,我找到了 this thread, and this other thread useful. Also, this page。
为了避免-2,147,414,007
错误,请在登录而不是系统中制作证书。然后,单击挂锁解锁系统类别,并将证书和密钥拖入系统。如果此处出现任何问题,您可以尝试文件 -> 导入和文件 -> 导出。目标是获得以下内容:
例如证书和密钥都在 System
钥匙串下,而不是 login
。 (甚至可能不需要将密钥拖入系统,但我这样做只是为了安全)。
然后,一个非常重要的步骤:右键单击证书,转到信息、信任,然后 select 始终信任每个类别。如果你不这样做,codesigning 将不会生效,并且即使你 codesign 仍然会在 gdb 中得到 mach port 错误消息。
(上面链接的两个线程中的一个答案是在目录实用程序中临时启用根帐户,但我不确定这是否真的有必要)。然后,重新启动计算机或执行 sudo killall taskgated
。然后codesign -fs gdb-cert $(which gdb)
.
然后,我不再在gdb 中收到mach 端口错误消息。我第一次运行,我得到了a popup asking for a password。为了在以后的运行中禁用它,我按照那个线程做了sudo /usr/sbin/DevToolsSecurity --enable
。
另请注意 8.0.1 有一个小问题:您将收到有关 unhandled dlyd version
的警告。 this thread 中对此进行了解释。请注意该线程中的一些 post 说断点不起作用,但我没有看到这种情况发生。