omnibus-gitlab パッケージに関連する暗号の詳細

GitLabは提供する様々なOSパッケージを共有するためにpackagecloudインスタンスを使用しており、これらのパッケージの完全性を保証するために様々な暗号化手法を使用しています。このページでは、これらの方法に関する詳細を提供します。

パッケージリポジトリのメタデータ署名キー

GitLab packagecloudインスタンス上のaptとyumリポジトリは、メタデータに署名するためにGPGキーを使用します。この鍵は、インストール手順で指定されたリポジトリのセットアップスクリプトによって自動的にインストールされます。

現在のキー

鍵属性
名前GitLab B.V.
Eメールpackages@gitlab.com
コメントpackage repository signing key
指紋F640 3F65 44A3 8863 DAA0 B6E0 3F01 618A 5131 2F3F
有効期限2024-03-01

この鍵は2020-04-06 からアクティビティとなります。GitLab apt/yum パッケージリポジトリを設定している既存のユーザーは、apt/yum が不一致を訴えることなくこれらのリポジトリからパッケージをインストールし続けるために、この鍵を取得して信頼できるキーリングに追加する必要があります。

この鍵の有効期限は2022-03-02から2024-03-01に延長されました。2022-03-02 で期限切れの苦情があった場合は、期限延長後の鍵の更新の手順を実行して、更新された公開鍵の内容を組み込んでください。

有効期限延長後の鍵の更新

Debian ベースのディストリビューションの場合:

PackageCloud は通常apt-key を利用していました。これは将来非推奨となる予定です。TurnKey Linuxのようないくつかのディストリビューションの手動インストールまたは設定リポジトリはすでにDebianパッケージソースリストのsigned-by

  1. apt-keysigned-by のどちらの機能を使用しているか確認してください:

    grep 'deb \[signed-by=' /etc/apt/sources.list.d/gitlab_gitlab-?e.list
    
    • このgrep が何らかの行を返す場合、signed-by の機能を使用しています。これはapt-key の使用よりも優先されます。
    • このgrep が行を返さない場合、apt-key の機能を使用していることになります。
  2. signed-by の場合、以下のスクリプト(root で実行)は GitLab リポジトリの公開鍵を更新します:

    awk '/deb \[signed-by=/{
          pubkey = $2;
          sub(/\[signed-by=/, "", pubkey);
          sub(/\]$/, "", pubkey);
          print pubkey
        }' /etc/apt/sources.list.d/gitlab_gitlab-?e.list | \
      while read line; do
        curl -s "https://packages.gitlab.com/gpg.key" | gpg --dearmor > $line
      done
    
  3. apt-key の場合、以下のスクリプト(root で実行)は GitLab リポジトリの公開鍵を更新します:

    apt-key del 3F01618A51312F3F
    curl -s "https://packages.gitlab.com/gpg.key" | apt-key add -
    apt-key list 3F01618A51312F3F
    

RPMベースのディストリビューションの場合:

YumとDnfには若干の違いがありますが、基本的な設定は同じです。

  1. リポジトリのキーリングから既存のキーを削除します:

    for pubring in /var/cache/dnf/gitlab_gitlab-?e-*/pubring
    do
      gpg --homedir $pubring --delete-key F6403F6544A38863DAA0B6E03F01618A51312F3F
    done
    
  2. リポジトリのデータ/キャッシュを更新し、キーを確認します:

    dnf check-update
    

2020-04-06以前の新しいキーの取得

# Download the new key
curl "https://gitlab-org.gitlab.io/omnibus-gitlab/gitlab_new_gpg.key" -o /tmp/omnibus_gitlab_gpg.key

# Import the key
## Debian/Ubuntu/Raspbian
sudo apt-key add /tmp/omnibus_gitlab_gpg.key

# CentOS/OpenSUSE/SLES
sudo rpm --import /tmp/omnibus_gitlab_gpg.key

2020-04-06以降の新しいキーの取得

最新のリポジトリ署名キーを取得するには、ユーザーはインストールページで述べたように、GitLabリポジトリを追加するために使用したcurl コマンドをもう一度実行することができます。新しい鍵が取得され、ユーザーのキーリングに追加されます。

あるいは、ユーザーは以下のコマンドを使って手動で新しい鍵を取得して追加することもできます。

# Download the new key
curl "https://packages.gitlab.com/gpg.key" -o /tmp/omnibus_gitlab_gpg.key

# Import the key
## Debian/Ubuntu/Raspbian
sudo apt-key add /tmp/omnibus_gitlab_gpg.key

# CentOS/OpenSUSE/SLES
sudo rpm --import /tmp/omnibus_gitlab_gpg.key

前のキー

Sl.番号キーID有効期限
11A4C 919D B987 D435 9396 38B9 1421 9A96 E15E 78F42020-04-15

パッケージ署名

この文書では、GitLabで作成されたパッケージの署名を手動とサポートされている場合は自動で検証する方法を提供します。

RPM ベースのディストリビューション

RPMフォーマットにはGPG署名機能の完全な実装がコンテナとして含まれているため、このフォーマットに基づくパッケージ管理システムと完全にインテグレーションされています。検証には2つの方法があります。

GitLab 公開鍵が存在することを確認します。

RPM ベースのディストリビューションでパッケージを検証するには、GitLab, Inc. の公開鍵がrpm ツールのキーチェーンに存在することを確認する必要があります。

rpm -q gpg-pubkey-f27eab47-60d4a67e --qf '%{name}-%{version}-%{release} --> %{summary}'

gpg-pubkey-f27eab47-60d4a67e is not installed公開鍵がない場合は、以下の手順を実行します:

rpm --import https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg

署名チェックがアクティビティであるかどうかを確認。

既存のインストールでパッケージの署名チェックが有効かどうかを確認する最も簡単な方法は、使用中のリポジトリファイルの内容を比較することです。

  • リポジトリファイルが存在するか確認してください:file /etc/yum.repos.d/gitlab_gitlab-ce.repo
  • 署名チェックがアクティビティであることを確認します。grep gpgcheck /etc/yum.repos.d/gitlab_gitlab-ce.repo を出力してください。

     repo_gpgcheck=1
     gpgcheck=1
    

    あるいは

     repo_gpgcheck=1
     pkg_gpgcheck=1
    

ファイルが存在しない場合は、リポジトリがインストールされていません。ファイルが存在するが、出力がgpgpcheck=0 を示している場合は、以下のようにその値を編集して有効にする必要があります。

自動検証を有効にする

rpm ツールおよび関連パッケージマネージャ (yum,zypper) は、内部介入なしにパッケージの自動検証を直接サポートします。署名付きパッケージが利用可能になった後に自動リポジトリ設定スクリプト を使用した場合、追加の手順は必要ありません。署名付きパッケージがリリースされる前にインストールした場合は、必要な変更を行うか、インストールページにある自動リポジトリ設定スクリプトを再実行してください。

Yum (RedHat, CentOS)
  1. パッケージのGPGチェックを有効にします

    sudo sed -i'' 's/^gpgcheck=0/gpgcheck=1/' /etc/yum.repos.d/gitlab_gitlab-ce.repo
    
  2. パッケージ署名公開鍵をgpgkey リストに追加します:/etc/yum.repos.d/gitlab_gitlab-ce.repo を編集し、gpgkey を変更します:

    gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
            https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
    
  3. リポジトリのキャッシュをリフレッシュするようにyum に伝えてください。

    sudo yum -q makecache -y --disablerepo='*' --enablerepo='gitlab_gitlab-ce'
    
Zypper (SuSE/SLES)
  1. パッケージのGPGチェックを有効にします

    sudo sed -i'' 's/pkg_gpgcheck=0/pkg_gpgcheck=1/' /etc/zypp/repos.d/gitlab_gitlab-ce.repo
    
  2. パッケージ署名公開鍵をgpgkey リストに追加します:/etc/zypp/repos.d/gitlab_gitlab-ce.repo を編集し、gpgkey を変更します:

    gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
            https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
    
  3. zypper にリポジトリの更新と鍵のインポートを指示します。

    sudo zypper --gpg-auto-import-keys refresh gitlab_gitlab-ce
    

手動検証

公開鍵が存在することを確認したら、rpm --checksig gitlab-xxx.rpm を使って RPM パッケージを手動で検証できます。

DEBベースのディストリビューション

DEBフォーマットには、パッケージに署名するためのデフォルトの方法が公式には含まれていません。GitLabでは、多くのディストリビューションでデフォルトでは有効になっていないものの、十分に文書化されているdebsig

手動検証

debsigs で署名された DEB パッケージの手動検証は、必要なdebsigs ポリシーとキーリングを設定した後にdebsig-verify を使う方法と、含まれる_gpgorigin ファイルを GnuPG で手動でチェックする方法の 2 通りがあります。

GnuPGによる手動検証

debsig-verify パッケージには、ユーザーがインストールしたくない依存関係が多数あります。debsig-verify や依存パッケージをインストールせずにdebsigs ベースの署名を検証するには、ユーザーは以下の手動手順を実行します:

  1. パッケージ署名公開鍵をダウンロードし、インポートします。

    curl -JLO "https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg"
    gpg --import gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
    
  2. 署名ファイルを展開 (_gpgorigin)

    ar x gitlab-ce-xxx.deb _gpgorigin
    
  3. 署名がコンテンツと一致するか確認します。

    ar p gitlab-xxx.deb debian-binary control.tar.gz data.tar.gz | gpg --verify _gpgorigin -
    

最終コマンドの出力はこのようになるはずです:

$ ar p gitlab-xxx.deb debian-binary control.tar.gz data.tar.gz | gpg --verify _gpgorigin -

gpg: Signature made Tue Aug 01 22:21:11 2017 UTC
gpg:                using RSA key DBEF89774DDB9EB37D9FC3A03CFCF9BAF27EAB47
gpg:                issuer "support@gitlab.com"
gpg: Good signature from "GitLab, Inc. <support@gitlab.com>" [unknown]
Primary key fingerprint: DBEF 8977 4DDB 9EB3 7D9F  C3A0 3CFC F9BA F27E AB47
debsigsの設定

debsigs 、ポリシーとキーリングの設定は複雑なので、GitLabはスクリプトによる設定方法としてgitlab-debsigs.sh

このスクリプトを使うには、公開鍵とスクリプトをダウンロードする必要があります。

curl -JLO "https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg"
curl -JLO "https://gitlab.com/gitlab-org/omnibus-gitlab/raw/master/scripts/gitlab-debsigs.sh"
chmod +x gitlab-debsigs.sh
sudo ./gitlab-debsigs.sh gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
で検証します。debsig-verify

debsig-verifyを使用するには、「debsigs の設定」の手順を実行し、debsig-verify パッケージをインストールしてください。

debsig-verify gitlab-xxx.deb