RPMに署名する(GPGキーの作成)

概要

独自に作成したRPMにGPGで署名する。またyumでGPGキーのチェックが行われるように公開鍵を作成する。

手順

GPGキーの作成

まずホームディレトリにgnupgが使うディレクトリを作成する。

mkdir ~/.gnupg 

gpg --gen-keyを実行する。

# gpg --gen-key

ここからは対話形式となるので順に答えていく。まず鍵の種類。

ご希望の鍵の種類を選択してください:
   (1) DSAとElgamal (既定)
   (2) DSA (署名のみ)
   (5) RSA (署名のみ)
選択は? 

デフォでいいのでそのままENTERキー。次に鍵の長さ。

DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 

ここもデフォでいいのでそのままENTERキー。次は鍵の有効期限。

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0)

ここもデフォで進める。確認のプロンプトが出たら"y"で進める。

これで正しいですか? (y/N) y

次にユーザIDを設定。

あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

僕の場合だとこうなる。

本名: Kuniaki Shimizu
電子メール・アドレス: kunkichi@gmail.com
コメント: cafechantant.com

確認のプロンプトが出てくるので"O"でOK。

次のユーザーIDを選択しました:
    “Kuniaki Shimizu (cafechantant.com) <kunkichi@gmail.com>”

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O

次にパスフレーズを入力

秘密鍵を保護するためにパスフレーズがいります。

パスフレーズを入力すると、乱数が生成される。

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
+++++++++++++++.++++++++++....++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++.+++++>.++++++++++...........+++++

十分な長さの乱数が得られません。OSがもっと乱雑さを収集
できるよう、何かしてください! (あと282バイトいります)

この時、裏でネットワーク越しにファイルを送るとか、いろいろやらないとここから進まないので注意。

RPMへ署名

鍵が出来たら、~/.rpmmacrosを作成して以下を記載。

%_signature     gpg
%_gpg_name    Kuniaki Shimizu (cafechantant.com) <kunkichi@gmail.com>

作成したRPMに署名する。鍵を作成した時に指定したパスフレーズを入力する。

 rpm --resign /usr/src/redhat/RPMS/noarch/koan-0.6.1-2.noarch.rpm 
パスフレーズの入力: 
パスフレーズは正常です。
/usr/src/redhat/RPMS/noarch/koan-0.6.1-2.noarch.rpm:
gpg: WARNING: standard input reopened
gpg: WARNING: standard input reopened

公開鍵の作成

yumで公開する公開鍵を作成する。

# gpg -a --export "Kuniaki Shimizu" > RPM-GPG-KEY-Original

これをyumで公開するディレクトリ(トップディレクトリ辺り)に置いておく。

RPMパッケージの検証

テストで検証してみる。まずは公開鍵をインポートする。

# rpm --import RPM-GPG-KEY-Original

先ほど署名を入れたRPMパッケージを検証する。

# rpm -K /usr/src/redhat/RPMS/noarch/koan-0.6.1-2.noarch.rpm

以下のように表示されれば改竄されていないということ。

/usr/src/redhat/RPMS/noarch/koan-0.6.1-2.noarch.rpm: (sha1) dsa sha1 md5 gpg OK