2016-10-01 16 views
1

Xcodeには、ゲートキーパーによってブロックされている「コマンドラインツール」ターゲット(アプリケーションバンドルではありません)があります。私はPostCheckアドレス帳のプラグインのための簡単なインストーラとして、このツールを長年使ってきました。Mac OSゲートキーパーが署名付きコマンドラインツールをブロックしています

2012年には、Apple Developer IDでツールに署名し、ゲートキーパーによってブロックされずにしばらくの間、すべてがうまくいっていました。私は今、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> 

私の問題の一部は、コマンドライン実行可能ファイルがsu有効なアップルデベロッパーIDで署名された後に表示されます。とにかく私が何もできないmacOSの問題かどうかもわかりません。また、コマンドラインツールとコード署名の問題の両方についてGoogleにとって非常に難しく、コマンドラインのUnix実行可能ファイルに署名するコードに実際に関連するものを見つけることができます。

ここで何が起こっているのかについての洞察があります。ありがとう!

+0

'--strict'オプションを' codesign'と一緒に使ってみてください。また、実行ファイルをダブルクリックすると実際には直接実行されず、ドキュメントとしてターミナルに渡され、Terminalはそのパスをコマンドとして実行するので、 '-t open'オプションを' spctl'とともに使用してみてください。それは "アプリではないようです"という問題に対処するかもしれない。 '-v'を複数回指定して冗長性を増やすこともできます。新鮮なファイルを評価していることを確認するために '--ignore-cache'を使用してください。 –

+0

FWIW、エラーcserror-67002はerrSecCSNotAppLikeです(これはおそらく大きな驚きではありません)。基本的にはコマンドラインツールを使ってアプリケーションバンドルを作成し、バンドルに署名することでこれを「固定」しました。コマンドラインツールを実行してfooとして参照するだけでした。app/Contents/MacOS/foo。優れたユーザーエクスペリエンスではなく、私のニーズに応えます。 – dmaclach

答えて

2

は、私は私の質問に答えることを憎むが、ケースには誰もがこの同じ問題に遭遇:

ソリューションは、署名されたディスクイメージ上ではなく、zipファイルにコマンドラインツールを配布することです。

私は10.11.4に戻ってテストを終え、トラブルが始まったときを確認しました。 (私はそれを間違ってテストしていたに違いない)OS Xは、どのように私がそれに署名しても、Unixコマンドラインツールをダブルクリックするだけでブロックします。ほとんどのコマンドラインツールはTerminal.app内から実行されるので、おそらく最高のものです。

シエラにとって、ゲートキーパーの新しいパスランダム化機能を回避するには、署名されたDMGが必要でした。

関連する問題