約2年前、コミット署名を行うための準備メモを投稿しました。
PCのクリーンインストールついでに、署名用サブ鍵の有効期限を更新したので記録として残します。
なおこの記事を引用する場合「前回の記事」と記載します。
ソフトウェアのセットアップ
以前のメモではScoopを使ってGPGをインストールしましたが、今回はwingetを用いました。
❯ winget search gpg
名前 ID バージョン 一致 ソース
-----------------------------------------------------------------
GPG ICT Summit 9NBLGGH4XT16 Unknown msstore
GNU Privacy Guard GnuPG.GnuPG 2.3.4 Command: gpg winget
Keybase Keybase.Keybase 5.9.0.13 Tag: gpg winget
Gpg4win GnuPG.Gpg4win 4.0.0 winget
❯ winget install --id GnuPG.GnuPG
wingetでインストールしたGPGの場合、鍵情報は %APPDATA%\gnupg
に格納されます。
以前バックアップで退避した情報を復元する
前回の記事、マスター鍵を安全な場所に退避させ、秘密鍵を削除する でバックアップしたファイルを%APPDATA%\gnupg
に格納します。
この状態で gpg --with-keygrip --list-key
コマンドを実行すると次のように表示されます。
❯ gpg --with-keygrip --list-key
C:\Users\cocoabreak\AppData\Roaming\gnupg\pubring.kbx
------------------------------------------------
pub nistp521 2019-12-23 [C]
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Keygrip = KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
uid [ultimate] Hirofumi Akiyama <cocoabreak.git@gmail.com>
署名用のサブ鍵が表示されていませんが復元完了です。
サブ鍵の有効期限を更新する
ここからが本題となります。
フィンガープリントを指定して gpg --edit-key --expert
コマンドを実行すると、署名用のサブ鍵(有効期限2022年1月2日)が表示されます(3ヶ月も放置してたんかー)。
❯ gpg --edit-key --expert ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
gpg (GnuPG) 2.3.4; Copyright (C) 2021 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec nistp521/XXXXXXXXXXXXXXXX
created: 2019-12-23 expires: never usage: C
trust: ultimate validity: ultimate
ssb ed25519/YYYYYYYYYYYYYYYY
created: 2019-12-23 expired: 2022-01-02 usage: S
[ultimate] (1). Hirofumi Akiyama <cocoabreak.git@gmail.com>
key
コマンドでサブ鍵を指定し、expire
コマンドで有効期限の変更モードにします。
gpg> key YYYYYYYYYYYYYYYY
sec nistp521/XXXXXXXXXXXXXXXX
created: 2019-12-23 expires: never usage: C
trust: ultimate validity: ultimate
ssb* ed25519/YYYYYYYYYYYYYYYY
created: 2019-12-23 expired: 2022-01-02 usage: S
[ultimate] (1). Hirofumi Akiyama <cocoabreak.git@gmail.com>
gpg> expire
Changing expiration time for a subkey.
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
今回は2年にしました。
メイン鍵のパスフレーズを入力し、save
コマンドを実行すれば有効期限の更新は完了です。
gpg> expire
Changing expiration time for a subkey.
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 2y
Key expires at 2024/04/02 12:03:18 ( W )
Is this correct? (y/N) y
sec nistp521/XXXXXXXXXXXXXXXX
created: 2019-12-23 expires: never usage: C
trust: ultimate validity: ultimate
ssb* ed25519/YYYYYYYYYYYYYYYY
created: 2019-12-23 expires: 2024-04-02 usage: S
[ultimate] (1). Hirofumi Akiyama <cocoabreak.git@gmail.com>
gpg> save
有効期限が2024年4月2日に延長されました!
あとは前回の記事同様、バックアップとマスター鍵の秘密鍵を削除すれば終わりです。
更新したサブ鍵で署名をすれば、GitHubではVerified状態となります。
※重要な補足
Verified状態にはなりますが、Verifiedの詳細を見るとこのような表示がありました。
This commit was signed with the commiter's verified signature. The key expired after the commit was signed.
解消するためには、冒頭に掲載した「前回の記事」に記載している、公開鍵のエクスポートとGitHubへの登録を行い、
公開鍵の更新を行ってください。