アプリケーション用に独自のリポジトリを作成したい。前にpgpでサブキーに署名してマスターキーを作成し、debパッケージに次のように署名します。
dpkg-sig --sign builder sample.deb
次に、repreproでリポジトリを作成します。
reprepro --ask-passphrase -b base includedeb all sample.deb
Repreproは必要な署名済みファイルを作成します。
./conf:
distributions options
./db:
checksums.db contents.cache.db packages.db references.db release.caches.db version
./dists:
all
./dists/all:
InRelease main Release Release.gpg
./dists/all/main:
binary-AMD64 binary-i386
./dists/all/main/binary-AMD64:
Packages Packages.gz Release
./dists/all/main/binary-i386:
Packages Packages.gz Release
./pool:
main
./pool/main:
s
./pool/main/s:
sample
./pool/main/s/sample:
sample_2.2.48.9015_all.deb
クライアントマシンに公開キーをインストールしますが、パッケージをインストールした後、次のメッセージを受け取ります。
WARNING: The following packages cannot be authenticated!
sample
Install these packages without verification? [y/N]
どうして?
GPG署名は複雑です。 APTリポジトリの場合、GPG署名の2つの層があります。
dpkg-sig
またはまたはdebsign
を使用したパッケージ自体の署名。APTはリポジトリメタデータに署名を表示しないため、このメッセージが表示されます。これは、reprepro構成にSignWith
を追加することで実現できます。私が書いた包括的なブログ投稿 here 。
Release.gpg
またはSignWith
という名前のファイルを探すことで、InRelease
が機能したことを確認できます。 InRelease
という名前のファイルを見つけた場合、ファイルの内容を表示し、GPG署名が下部にあることを確認します。その場合、repreproは署名を適切に生成しました。 GPGで署名されたリポジトリは、HTTPS経由で提供されない限り、多数の中間者攻撃に対して依然として脆弱であることに注意してください。
また、apt-key list
を実行して、GPG公開キーがクライアントシステムに正しくインポートされたことを確認することをお勧めします。リストにキーが表示されない場合は、apt-key add filename
でキーを追加する必要があります。
UbuntuとDebianはパッケージのGPG署名を検証しないことに注意することが重要です。デフォルトでは無効になっており、動作するのは非常に困難です。 GPGがパッケージに署名しないようにすることをお勧めします。
また、大量のセキュリティバグ(GPG署名を含む)を回避するために、HTTPSを介してリポジトリを配布する必要があることにも注意してください。