ハードウェアの気になるあれこれ

技術的に興味のあることを調べて書いてくブログ。主にハードウェアがネタ。

GnuPGで作成した鍵の有効期限を更新する

スポンサーリンク

永らく更新をサボっておりました。。。 色々バタバタしていたこともあり、去年はほぼ何も趣味作業が出来ずじまいのまま一年が過ぎ去りました。 やっと落ち着いてきて作業も再開できそうな感じになってきたが、PCのクリーンインストールをしてその後放置状態だったため、各種環境の復元から始めることになってしまった。 このサボっている間にgithub等で使用していた各種鍵が期限切れになっており、git push すら出来ない事態に。 今回の記事はgpg2で生成した後、期限切れになった鍵を更新する方法についてメモ代わりに残したもの。

鍵の更新

今回の更新作業で参考にさせてもらったサイトを次に記載しました。各種詳細についてはリンク先を参照してもらうことにして 、本記事では自分が更新を行う上で少し躓いた部分について記載していく。

基本的にはGnuPGのコンソールを起動して、鍵を選択→期限の更新を行った後Master Keyを使って更新を反映する という手順でOK。自分の場合以前に次の記事で取り上げた通り、Master Keyはオフラインで保存していたため それを復元してから作業を実施した。

www.tech-diningyo.info

$ gpg2 --expert --edit-key <Master Keyの公開鍵>

expire というコマンドで鍵の有効期限が設定できることはわかったのだが、鍵を選択する方法がいまいち ピンとこなかったので手順を残しておく。 結果的にはコンソールでkey <ID>とすると鍵が選択できて、選択された鍵には*が付与されるというだけの話だった。 鍵の複数選択も次の通り可能で、expire コマンド実行時には選択された鍵に対して期限の設定が実行される。

gpg> key 4

sec  nistp521/AAAAAAAAAAAAAAAA
     作成: 2019-09-16  有効期限: 無期限       利用法: C   
     信用: 究極        有効性: 究極
ssb  nistp521/BBBBBBBBBBBBBBBB
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: SA  
ssb* nistp521/CCCCCCCCCCCCCCCC
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: E   
ssb  nistp521/DDDDDDDDDDDDDDDD
     作成: 2019-09-16  有効期限: 2023-09-15  利用法: A   
ssb* rsa4096/EEEEEEEEEEEEEEEE
     作成: 2019-09-16  有効期限: 2023-09-15  利用法: A   
[  究極  ] (1). diningyo (master key) <hoge@fuga.com>

gpg> key 3

sec  nistp521/AAAAAAAAAAAAAAAA
     作成: 2019-09-16  有効期限: 無期限       利用法: C   
     信用: 究極        有効性: 究極
ssb  nistp521/BBBBBBBBBBBBBBBB
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: SA  
ssb* nistp521/CCCCCCCCCCCCCCCC
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: E   
ssb* nistp521/DDDDDDDDDDDDDDDD
     作成: 2019-09-16  有効期限: 2023-09-15  利用法: A   
ssb* rsa4096/EEEEEEEEEEEEEEEE
     作成: 2019-09-16  有効期限: 2023-09-15  利用法: A   
[  究極  ] (1). diningyo (master key) <hoge@fuga.com>

gpg> key 1

sec  nistp521/AAAAAAAAAAAAAAAA
     作成: 2019-09-16  有効期限: 無期限       利用法: C   
     信用: 究極        有効性: 究極
ssb* nistp521/BBBBBBBBBBBBBBBB
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: SA  
ssb* nistp521/CCCCCCCCCCCCCCCC
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: E   
ssb* nistp521/DDDDDDDDDDDDDDDD
     作成: 2019-09-16  有効期限: 2023-09-15  利用法: A   
ssb* rsa4096/EEEEEEEEEEEEEEEE
     作成: 2019-09-16  有効期限: 2023-09-15  利用法: A   
[  究極  ] (1). diningyo (master key) <hoge@fuga.com>

この状態で鍵の期限を設定するコマンドexpireを実行して、表示にしたがって鍵の期限を設定する。 keyコマンドで複数の鍵を設定している場合のみ、下記のように設定時に複数の鍵の期限を変更することに対しての確認が行われる。

gpg> expire 4
本当に複数の副鍵の失効期限を変更しますか? (y/N) y
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0) 3y
鍵は2026年04月17日 21時10分00秒 JSTで期限切れとなります
これで正しいですか? (y/N) y

sec  nistp521/AAAAAAAAAAAAAAAA
     作成: 2019-09-16  有効期限: 無期限       利用法: C   
     信用: 究極        有効性: 究極
ssb* nistp521/BBBBBBBBBBBBBBBB
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: SA  
ssb* nistp521/CCCCCCCCCCCCCCCC
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: E   
ssb* nistp521/DDDDDDDDDDDDDDDD
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: A   
ssb* rsa4096/EEEEEEEEEEEEEEEE
     作成: 2019-09-16  有効期限: 2026-04-17  利用法: A   
[  究極  ] (1). diningyo (master key) <hoge@fuga.com>

なお、gpg2のコンソール起動直後はデフォルトキーとして主鍵が選ばれており、その際には次のように表示が主鍵になる。

gpg> expire 
主鍵の有効期限を変更します。
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0) 0
鍵は無期限です
これで正しいですか? (y/N) y

期限の再設定が完了したあとはsaveコマンドで変更内容を反映して終了すればOK。 このときMaster Keyの秘密鍵が存在しない状態だと、次のようにエラーが出て失敗する。

gpg> expire
副鍵の有効期限を変更します。
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0) 0
鍵は無期限です
これで正しいですか? (y/N) y
gpg: 署名に失敗しました: 秘密鍵がありません
gpg: make_keysig_packet failed: 秘密鍵がありません

ssh-agentでgpg2で作成した認証鍵を使用する

以前にGnuPGで認証鍵をgithubに設定して使用できなかったことを思い出したので、ついでにその問題についても 再度調べてみたところ次の記事に行き当たった。

https://qiita.com/kino-ma/items/c5679997293cbbd34b34#%E8%AA%8D%E8%A8%BC%E9%8D%B5%E3%82%92-ssh-%E3%81%AB%E4%BD%BF%E3%81%86

自分の環境では記事にある通り、次の2つの設定を行うだけで問題なくgithubssh経由でアクセスができた。

  1. ~/.gnupg/sshcontrolの設定
  2. 環境変数SSH_AUTH_SOCKの設定

ということで無事githubへのアクセスもできるようになったので、また色々やりかけのネタに取り組んでいこうと思う。