【问题标题】:Do you want the application to accept incoming network connection?您希望应用程序接受传入的网络连接吗?
【发布时间】:2013-07-08 13:18:37
【问题描述】:

我有两个 C 二进制文件,它们试图打开网络连接进行通信。

这是用于外部通信的。当我第一次运行它时,OS X 的防火墙会弹出标题中给出的消息。我怎样才能摆脱它?

我怀疑这与代码签名有关?如何对这个二进制文件进行代码签名?

基本上我必须在一台 Mac 机器上构建这个二进制文件,然后在应用商店之外分发。

如果机器中启用了 OS X 防火墙,我怎样才能摆脱弹出的防火墙?

【问题讨论】:

  • 您在 Mac 上使用什么防火墙?无法以编程方式在代码中删除此消息,这取决于您的个人防火墙,因为它挂钩了基本的操作系统网络代码。我个人以前从未见过它,但是我没有运行防火墙。
  • 我猜你不会摆脱它。程序触发警告是因为它使用了网络函数,而网络函数触发了防火墙。
  • 当我从系统偏好设置->安全和隐私启用防火墙时,它就是这样发生的。
  • 摆脱防火墙的唯一方法是使用 root 权限启动您的应用程序。
  • 你的问题是它总是弹出,还是只是在应用第一次运行时弹出?

标签: c macos code-signing firewall


【解决方案1】:

您可以通过自己签署有问题的应用程序二进制文件来解决此问题。

Disclaimer: Signing an application yourself will make an application appear more
secure to the operating system, when in reality it isn’t. Only sign applications
that you are 100% sure are not spyware or otherwise malicious. If you have any
doubts, just uninstall/reinstall.

第 1 部分:创建签名身份

我想要的解决方案 - 自己签署应用程序 - 要求我创建一个签名身份,也称为签名证书。这很容易做到:

  1. 打开应用程序 > 实用程序 > 钥匙串访问。
  2. 从 Keychain Access 菜单中,选择 Certificate Assistant > Create a Certificate。
  3. 填写证书的名称。此名称作为证书名称出现在 Keychain Access 实用程序中。这也是您在引用此证书时将使用的名称。就个人而言,我使用了“我的签名身份”这个名称。
  4. 从证书类型菜单中选择代码签名。
  5. 从类型弹出菜单中选择自签名根。
  6. 选中让我覆盖默认值复选框。
  7. 点击继续。
  8. 指定证书的序列号。只要您没有其他具有相同名称和序列号的证书,任何数字都可以。
  9. 点击继续。
  10. 填写证书信息。您可以使用真实数据或虚假数据,我个人使用的是真实数据。
  11. 点击继续。
  12. 接受其余对话框的默认设置。

完成后,您将在 Keychain Access 中看到您的证书。验证您选择的名称,您已完成此步骤。干得好!

第 2 步:(重新)签署您的申请

现在您必须签署您的申请。为此,请再次打开终端并使用以下命令:

codesign -s "My Signing Identity" -f /path/to/your/binary/app

会出现一个对话框,点击“允许”。

现在重新启动您的应用程序。您将最后一次获得接受传入连接对话框。点击“允许”。

从现在开始,您将不再收到警告!现在可以享受防火墙处于活动状态的安全性,而不必经常单击“允许”。

致谢:作为此更新和注释解决方案指南起点的原始来源是 http://silvanolte.com/blog/2011/01/18/do-you-want-the-application-to-accept-incoming-network-connections/

【讨论】:

  • 如果您遇到问题,上面写着code object is not signed at all,然后在执行codesign -s --deep "My Signing Identity" -f /path/to/your/binary/app 时尝试使用--deep 选项
  • 这对 El Capitan (10.11)+ 有效吗?我试过了,它成功了,但仍然要求“允许传入连接”。
【解决方案2】:

在我的情况下,当我在将 MacOS 更新到 10.15 Cataline 后从 PyCharm 运行 Python 项目时出现此警报。我用

修复了它
codesign -vvv /Applications/PyCharm.app/

【讨论】:

    【解决方案3】:

    我试图应用此解决方案来修复 Arduino OTA 使用的 python,我发现另一个解决方案描述了自签名应用程序,该应用程序将 $(which python) 声明为要签名的文件路径,但在我的情况下,解决方案是/usr/bin/python。自签名这不仅需要我进入 Rootless 模式以允许写入 /usr/bin,而且当我回去测试它时,python 仍然在请求允许传入连接的权限!

    自签名的正确 python 文件实际上是(至少在我的情况下)/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app

    一旦我对这个正确的文件路径进行了自签名,Arduino OTA 过程就不再需要我点击允许传入连接 - 万岁!

    希望对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-10
      • 2017-09-12
      • 2020-03-20
      • 2016-07-28
      • 2019-06-29
      • 2012-05-16
      • 1970-01-01
      • 2013-01-04
      相关资源
      最近更新 更多