Mac OS Gatekeeper 阻止签名命令行工具

2024-03-04

我在 Xcode 中有一个“命令行工具”目标(不是应用程序包),它被 Gatekeeper 阻止。我多年来一直使用这个工具作为我的 PostCheck 地址簿插件的简单安装程序。

2012 年,我用我的 Apple 开发者 ID 签署了该工具,这样它就不会被 Gatekeeper 阻止,并且暂时一切正常。我现在注意到,在 macOS Sierra (10.12) 中,它现在被阻止了,在测试过程中,我还发现它也被 10.11.6 阻止了。 (当我说被阻止时,我的意思是用户必须右键单击它并选择“打开”,而不是在警告对话框中给出该选项。)它在 10.11.2 中仍然可以正常工作! – 如果我记得的话,Mac OS X 10.11.4 有一个错误,即使非应用程序捆绑包已签名,也会阻止它们,但我认为该问题已在 10.11.5 中得到解决。也许有关系?

我尝试在 Sierra 下使用 Xcode 8 重新编译并重新签名可执行文件。我尝试在二进制文件中嵌入 Info.plist (我以前没有这样做过)。我尝试过归档而不仅仅是“构建”,以防调试与发布配置出现问题。我花了两天时间搜索验证我的可执行文件是否正确签名的方法,似乎结果相互矛盾......

有这个:

codesign --verify --verbose <executable> 
<executable>: valid on disk
<executable>: satisfies its Designated Requirement

和这个:

spctl --assess --verbose <executable> 
<executable>: rejected (the code is valid but does not seem to be an app)
source=matched cdhash

和这个:

spctl -a -v --raw <executable> 
<executable>: accepted
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>assessment:authority</key>
    <dict>
        <key>assessment:authority:flags</key>
        <integer>0</integer>
        <key>assessment:authority:source</key>
        <string>allowed cdhash</string>
        <key>assessment:authority:weak</key>
        <true/>
    </dict>
    <key>assessment:cserror</key>
    <integer>-67002</integer>
    <key>assessment:remote</key>
    <true/>
    <key>assessment:verdict</key>
    <true/>
</dict>
</plist>

我想我的部分问题是我不知道使用有效的 Apple 开发者 ID 签名后命令行可执行文件应该是什么样子。而且我也不知道这是否是 macOS 的问题,无论如何我都无能为力。通过 Google 搜索命令行工具和代码签名问题并找到与对命令行 Unix 可执行文件进行代码签名实际相关的内容也非常困难。

我很感激任何对这里可能发生的事情的见解。谢谢!


我不想回答我的问题,但如果有人遇到同样的问题:

解决方案是在签名的磁盘映像上而不是在 zip 文件中分发命令行工具。

我最终测试回 10.11.4 并确认问题就是从那时开始的。 (当时我一定是测试不当。)OS X 只会阻止双击 Unix 命令行工具,无论我如何签名。这可能是最好的,因为大多数命令行工具将从 Terminal.app 中运行。

对于 Sierra,事实证明我无论如何都需要签名的 DMG 来绕过 Gatekeeper 的新路径随机化功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac OS Gatekeeper 阻止签名命令行工具 的相关文章

随机推荐

  • 我如何知道用户正在打字或粘贴?

    在我的 JSP 的文本字段中 我希望知道用户是在输入数据还是只是粘贴 我如何使用 javascript 来识别它 EDIT 根据安迪的回答 我知道如何去做 但仍然好奇那些人是如何编写 onpaste 事件的 Safari Chrome Fi
  • HTML onUnclick 处理程序? [复制]

    这个问题在这里已经有答案了 我想在单击输入字段时触发一个处理程序 并在取消选择输入字段时触发另一个处理程序 即 如果有人在字段之外单击 有办法做到这一点吗 点击处理程序非常简单
  • 自动在 bash 命令末尾添加一些内容

    我想知道如何在特定 bash 命令的末尾添加一些内容 而无需显式键入它 例如 我希望能够输入 mycommand argument 该行将提交为 mycommand argument 我知道如何在我的中设置别名 bashrc e g ali
  • 在 Mac 上启动 AVD(Android 虚拟设备)时 qemu-system-i386 意外退出(非法指令 4)

    我在 Mac Macbook Pro 2017 年 8 月 OSX 10 12 4 上安装了 Android Studio 然后启动 创建了一个 hello world 项目并创建了一个 AVD Android 虚拟设备 Nexus 5 来
  • CloudFront 签名 url 的最长过期时间是多少

    我正在使用 CloudFront 从中生成签名 URLdoc https docs aws amazon com AmazonCloudFront latest DeveloperGuide CFPrivateDistJavaDevelop
  • JAXB 如何推进 XMLStreamReader?

    我正在使用 JAXB 通过 XMLStreamReader 从非常大的 XML 文件中解组对象 如果我要解组的 XML 元素是分隔的 通过换行符甚至单个空格 则效果很好 如果我要解组的 XML 元素之间没有空格 那么我会丢失所有其他项目 X
  • Rust 编译器什么时候不能证明借用是不相交的?

    In 诺米康第 3 2 节 https doc rust lang org nomicon references html liveness 在 活跃度 标题下 它说 然而 经常出现的情况是 Rust 不够聪明 无法 证明多次借用是不相交的
  • std 映射复合键

    我有一个问题运算符std map 所需的方法 我使用结构作为复合键 如下所示 struct MyKey std string string1 std string string2 std string string3 unsigned in
  • 跟踪实时推文流中的关键字

    我安装并尝试了 tweepy 我现在正在使用以下功能 from API参考 http packages python org tweepy html api html api reference API public timeline 返回
  • 检查拖放是否正在进行

    有什么方法可以检查拖放是否正在进行中 可以检查一些方法或win32 api吗 我知道我可以设置AllowDrop 并使用事件 但在这种情况下它不起作用 基本上我想用代码检查是否any拖放正在进行中 我有一个类似的问题 我自己回答了 经过几个
  • 了解 Tensorflow LSTM 模型输入?

    我在理解 TensorFlow 中的 LSTM 模型时遇到一些困难 我用tflearn http tflearn org 作为包装器 因为它自动完成所有初始化和其他更高级别的工作 为了简单起见 我们考虑这个示例程序 https github
  • MongoDB - 将 CSV 导入嵌套文档

    我有一个架构 其文档结构如下所示 id ObjectId 4f8dcb06ee21783d7400003c venue ObjectId 4f8dcb06ee21783d7400003b name Some event webite www
  • 计算两个数组之间相关性的有效算法[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找一种算法来计算两个双精度数
  • 解析包含自定义格式的日期和时间的字符串

    我有一个下一个格式的字符串 ORDER20100322194007 where 20100322是一个日期并且194007是一个时间 如何解析字符串并获取其中包含的内容DateTime object 它总是以ORDER string pat
  • iOS 12 和 SKShader 中已弃用 OpenGL ES

    我对 SpriteKit 中着色器的概念和使用非常陌生 我发现本教程介绍了如何使用附加到 Color Sprite 的自定义着色器属性的自定义着色器文件 Fractal fsh 渲染 Mandelbrot 分形 https www wehe
  • Logstash 的流行为不一致 - ELK

    我有一个包含几个平面字段和几个嵌套字段的索引 我正在尝试通过 Logstash 将 SQL Server 中的信息通过特定 ID 流式传输到嵌套字段中 当我流式传输数据时only one然后它就完全成功地通过了 没有任何问题 另一方面 当我
  • 释放 Javascript 对象使用的内存

    我应该自己释放分配的内存 还是有一种垃圾收集器 在 JavaScript 中使用以下代码可以吗 function fillArray var c new Array c push 3 c push 2 return c var arr fi
  • 将 Google Analytics 代码放置在 WordPress 特定页面中

    在客户填写联系表单后 我试图让 Google Analytics 代码在感谢页面上工作 并且我尝试使用 HTML 将其放入 Wordpress 后端管理下的页面中的感谢页面中tab 但它似乎在代码之间生成不必要的 p 和 br 标签 特别是
  • 忽略标志指针 0x10ef76ec0 的 RegisterValidateFunction():在 Xcode 中的该地址处找不到标志

    我该如何解决这个问题 W0721 13 54 19 105928 1 commandlineflags cc 1503 忽略标志指针 0x10ef76ec0 的 RegisterValidateFunction 在该地址找不到标志 出现此问
  • Mac OS Gatekeeper 阻止签名命令行工具

    我在 Xcode 中有一个 命令行工具 目标 不是应用程序包 它被 Gatekeeper 阻止 我多年来一直使用这个工具作为我的 PostCheck 地址簿插件的简单安装程序 2012 年 我用我的 Apple 开发者 ID 签署了该工具