【问题标题】:codesign in Sierra: security set-key-partition-list not workingSierra 中的代码设计:安全设置密钥分区列表不起作用
【发布时间】:2016-12-22 18:50:02
【问题描述】:

我遵循this 线程指令并设法解决了我们在 Sierra 上遇到的代码设计问题。问题是,过了一段时间我们在一台新机器上安装了 Sierra,现在它不再工作了。

我们的应用程序是一个节点应用程序,它分叉一个发生签名的进程。奇怪的是,如果您从终端(在 SSH 会话中)启动分叉脚本,它可以正常工作,但如果您启动分叉该进程的应用程序,它就不起作用,并且代码签名失败并显示“代码对象未签名”全部”。

同样的应用程序也可以通过 SSH 在另一台从 El Capitan 更新的 Sierra 机器上正常工作。我真的不知道发生这种情况的两台机器之间可能有什么区别,因为它们都具有相同版本的 Sierra、XCode、codesign 等,但肯定有一些影响。

你知道什么可能会影响这种奇怪的行为吗?有什么我可以尝试的吗?

谢谢。

注意:

执行:

security set-key-partition-list -S apple-tool:,apple: -s -k 'password' 'keychain'

从控制台,然后:

codesign -vfs '$IDENTITY' '${PRODUCT}' --keychain 'keychain'

工作正常,但从节点应用程序内部启动时,它总是失败。

【问题讨论】:

    标签: ssh macos-sierra codesign


    【解决方案1】:

    对于处于相同情况的每个人,我终于经过大量调试和研究发现问题与我们使用 PM2 进行节点服务管理这一事实有关。默认情况下 PM2 Launch Daemon plist 是:

    <?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>Label</key>
        <string>io.keymetrics.PM2</string>
        <key>UserName</key>
        <string>myusername</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>-c</string>
            <string>/usr/local/lib/node_modules/pm2/bin/pm2 resurrect</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>OnDemand</key>
        <false/>
        <key>LaunchOnlyOnce</key>
        <true/>
        <key>EnvironmentVariables</key>
      <dict>
        <key>PATH</key>
        <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/node@5/5.12.0/bin</string>
        <key>PM2_HOME</key>
        <string>/Users/myusername/.pm2</string>
      </dict>
        <key>StandardErrorPath</key>
        <string>/tmp/io.keymetrics.PM2.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/io.keymetrics.PM2.out</string>
    </dict>
    </plist>
    

    但是为了让进程能够访问钥匙串,我们需要添加一个 SessionCreate 键:

    <?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>Label</key>
        <string>io.keymetrics.PM2</string>
        <key>UserName</key>
        <string>myusername</string>
        <key>SessionCreate</key>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>-c</string>
            <string>/usr/local/lib/node_modules/pm2/bin/pm2 resurrect</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>OnDemand</key>
        <false/>
        <key>LaunchOnlyOnce</key>
        <true/>
        <key>EnvironmentVariables</key>
      <dict>
        <key>PATH</key>
        <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/node@5/5.12.0/bin</string>
        <key>PM2_HOME</key>
        <string>/Users/myusername/.pm2</string>
      </dict>
        <key>StandardErrorPath</key>
        <string>/tmp/io.keymetrics.PM2.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/io.keymetrics.PM2.out</string>
    </dict>
    </plist>
    

    只需重新启动 PM2 服务即可。由于某种原因,该参数已添加到旧机器中。

    感谢this 的回答和他的作者joensson 引导我找到解决方案。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 2020-07-23
      • 2013-11-08
      • 1970-01-01
      • 2013-08-07
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多