オープンソースコードに自分で署名する必要がありますか?


11

macOS 10.14を使用していて、Githubで見つけたVimのオープンソースプラグインをインストールしようとしたときに問題が発生しました。ソースコードをダウンロードして自分でコンパイルしましたが、うまく機能しましたが、実行すると、「[実行可能ファイルのコード署名]がプロセスでの使用に有効ではないため」実行が中断されました。

これは私に頭を包み込むことができない多くの質問を与えました:

自分で署名することもできますが、そのようなことはコード署名の目的を台無しにしませんか?インターネットからのコードへの署名と、「このアプリはインターネットからダウンロードされました」ダイアログボックスでの身元不明の開発者からのアプリの許可に質的な違いはありますか?

しないと、署名するのは誰の「責任」ですか?リポジトリメンテナー?貢献者?Appleは、オープンソース開発者が常にApple Developer IDを持っていることを期待していますか?または、コード署名の目的を誤解していませんか?

編集:

明確にするために、私の質問は、特にオープンソースプロジェクトへの小さな貢献に関して、貢献者が常に自分のコードに署名できること、または覚えていることを期待していないため、自分でコンパイルする無署名のソースコードをどのように処理するかです多くの貢献者と。

回答:


9

アドホックコード署名

自分でコンパイルしコード署名が必要なサードパーティのアプリケーションおよびバイナリの場合は、アドホックコード署名を使用します

  • アプリケーションは署名なしでは実行されないと想定しています。
  • アプリケーションは配布されないと想定しています。
  • 署名のIDが有効であることは気にしないと思います。

アドホック署名は、信頼できるセキュリティ上の利点を提供しません。これは、アプリケーションが変更されたかどうかを判断するために使用でき、資格などのセキュリティ制限をアプリケーションに適用するために使用できます。

アドホック署名はに対して検証しますが、検証しcodesignませんspctl。これは、署名されているバイナリに応じて問題になる場合と問題になる場合があります。アプリケーションと実行可能ファイルの場合、spctlローカルで作成されたバイナリでは実行されないため、これは問題にはなりません。

なぜコードサインなのか?

洗練された質問について:

私が自分でコンパイルした未署名のソースコードをどのように扱うべきか、特に多くの貢献者がいるオープンソースプロジェクトへの小さな貢献に関しては、貢献者が常に自分のコードに署名できることを忘れないためです。

ほとんどの自己コンパイルされたアプリケーションでは、コード署名の必要はありません。これは、アプリケーションのコードを信頼していることを前提としています。macOSでは、Finderから信頼できないアプリケーションを開くことができます。Appleの「身元不明の開発者からアプリを開く」を参照してください。

コードまたは開発者を信頼しない場合は、アプリケーションをコンパイルまたは実行しないでください。

あなたの責任

ソースコードのプロバイダーは、ビルド済みのコード署名済みバイナリを提供する責任も義務も負いません。自己コンパイルされるため、すべてのコード署名はあなたの選択と責任です。

  • Apple 、App Storeへの提出にはコード署名が必要です

  • Appleは、App Store以外の開発者にコードに署名するよう要求していますが、まだ必要ではありません。

どちらの場合も、最終的なバイナリのみが署名されます。元のソースコードとリソースは署名されていません。

ソースコードは署名されていません

ソースコード自体は、macOSにとって意味のある方法でコード署名することはできません。ソースファイルとコードは、他のファイルと同様にデジタル署名できますが、macOSが結果のアプリケーションまたはバイナリを処理する方法に影響を与えることはありません。

Macアプリケーションにアドホックコード署名する方法

アドホック署名を使用してmacOS上のアプリケーションにコード署名するには、ID -sフラグを-次のように設定します。

codesign --force -s - </path/to/application>

codesignコマンドの他のすべてのルール、要件、順列は同じままです。

ここでフラグ--forceを使用して、既存の署名を上書きします。

フレームワークや組み込みサービスなどのサブリソースに署名--deepするには、codesignコマンドにフラグを追加する必要がある場合があります。


アドホック署名を推奨する理由は何ですか?あなたがリンクした答えは、「実際には、アドホック署名付きバイナリを作成することは、Apple開発者にとって実用的な価値しかありません」と述べています。
-Wowfunhappy

それは私には意味がありません。アドホック署名を追加すると、署名の検証が失敗します。これにより、どこにもアクセスできなくなります。プログラムはまったく同じエラーメッセージで失敗します。
-jksoegaard

はい、アドホックサインインに関する回答へのリンクを削除し、仮定を追加したことがわかります。しかし、これらの仮定はまったく当てはまりますか?-質問はアプリケーションの実行に関するものであるかのように答えているようです。そうではない。OPがプラグインを追加したい署名済みのアプリケーションを持つことです。つまり、プラグインは、元の署名済みアプリケーション(Vim)をマスターとして使用して、ライブラリの検証に合格する必要があります。
-jksoegaard

元の質問が編集されました。それは、かなり広いです。質問者は、これらの回答をコメントし、明確にし、試して、自分に効果があるものを確認できます。この回答は、編集された質問に回答し、実用的なアプローチを提供しようとします。それが役に立たない場合、または誤った仮定を持っている場合、質問者はうまくいけば彼らの意図を聞き取り、明確にすることができます。
グラハムミル

1
この回答は役に立ちました。私の質問は非常に一般的でした。なぜなら、アップルのドキュメントは少し理解しにくいとわかったからです。アドホック署名を使用すると、特定の問題が解決しました。
構文

5

プログラムに自分で署名しても、コード署名の目的が損なわれることはありません。コード署名の一般的な目的は、プログラムが元は特定のエンティティ(個人または会社)によって作成された未変更のコピーであることを確認できるようにすることです。コンピュータで実行するためだけにプログラムに自分で署名すると、システムがバイナリを作成したのは実際に自分であり、他の人によって変更されていないことを確認できます。

アプリケーションバイナリに自分で署名することと、GateKeeperで正体不明の開発者からのアプリを許可することの定性的な違いは、前者の場合、単一の特定のアプリの実行を許可することです。異なるアプリを右クリックして[開く]を選択するだけです。つまり、特定のプログラムに自分で署名することで、より制限が厳しくなり、やや「安全」になります。

署名の責任は完全にあなたのものです。オープンソースの開発者はソースコードに署名できません-コンパイルされたバイナリにのみ署名できます。コンパイル済みのバイナリを自分で作成しているときに、署名する必要があります。

AppleのWebサイトで開発者アカウントにサインアップすると、署名に使用できる証明書を作成できます。あなたが開発者であり、Macで実行するためにバイナリを定期的にコンパイルしている場合、これが推奨される方法です。これがあなたがおそらく二度としないであろう一回限りのことであるならば、このプロセスを経ることはおそらくやり過ぎです。YMMV。

ここでの質問に対するその他の回答では、バイナリにアドホック署名を使用することをお勧めします。それは機能しません。最も安全な設定でGateKeeperを使用してバイナリを実行するには、有効な署名を生成する必要があります。


1

オープンソースコードに自分で署名する必要がありますか?

あなたが開発者でない場合、いいえ。

簡単に言えば、コード署名とは、あなた(開発者)があなたが誰であるかを示し、最後に署名してからコードが変更されていないことを示す方法です。

インターネットからのコードへの署名と、「このアプリはインターネットからダウンロードされました」ダイアログボックスでの身元不明の開発者からのアプリの許可に質的な違いはありますか?

紛らわしいコード署名(開発者がApp Storeでアプリを公開するために必要なもの)とゲートキーパー(身元不明の開発者からのソフトウェアのインストールからMacを保護するもの)のように聞こえます。

MacがApp Storeと特定の開発者の両方からソフトウェアをインストールできるようにしても、ソフトウェアがインストールされることを警告するポップアップが表示されます

また、身元不明の開発者からのものである場合は、「警告アイコン」が付いた同じポップアップが表示されます

それでもソフトウェアをインストールできます。これは、ユーザーとの対話を強制してソフトウェアを実際にインストールするメカニズムであり、自己インストール型マルウェアに対するセキュリティのレイヤーを提供します。


ありがとう、これはいくつかの質問に答えますが、すべての質問には答えません。質問を編集して、質問内容をより具体的にしようとしています
構文
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.