GPG signing subkey 만료(expired) 연장 방법

primary key 유지하면서 subkey 를 연장하여 사용

표기 규칙

  • <primary_key> : primary key ID 또는 fingerprint
  • <signing_subkey> : signing subkey ID
  • <email> : key에 등록된 email

가정

  • <primary_key> 는 유효
  • GitHub, keyserver에 이미 검증되어 게시됨
  • <signing_subkey> 만 expired 상태
  • 목표는 기존 subkey의 expiration 연장

1단계. primary key 편집 모드 진입

gpg --edit-key <primary_key>

2단계. 연장할 signing subkey 선택

GPG 프롬프트에서:

gpg> key <N>
  • <N>은 signing subkey 번호 (맨 위가 0): 예) 1, 2
  • [S] 또는 [SC] 표시된 subkey 선택
  • 선택되면 * 표시 확인

예:

ssb* rsa4096/<signing_subkey> [SC] [expired]

3단계. subkey 만료일 변경

gpg> expire

입력 예:

  • 1y
  • 2y
  • YYYY-MM-DD

주의 사항:

  • 같은 subkey, expiration만 변경됨
  • key ID / fingerprint 유지

4단계. 변경 사항 저장

gpg> save

5단계. 로컬 상태 확인

gpg --list-secret-keys --keyid-format LONG <primary_key>
  • [expired] 표시 제거 확인
  • 새 만료일 표시 확인

6단계. public key 재게시 (필수)

gpg --armor --export <primary_key>

7단계. GitHub에 반영 (수정본 - expire 연장 케이스)

로컬에서 갱신된 공개키 블록(export 결과) 생성

gpg --armor --export <primary_key> > <public_key.asc>

GigHub에 GPG 등록

  1. GitHub → Settings → SSH and GPG keysGPG keys
  2. 기존에 등록된 동일 키(fingerprint 기준)를 삭제(Delete)
  3. New GPG key에서 <public_key.asc> 내용을 붙여넣어 재등록(Add)

주의 사항

  • GitHub는 등록된 GPG key를 편집/갱신(update) 하는 기능이 없음
  • expiration 연장은 공개키 블록(패킷)이 변경되므로, 삭제 후 재등록이 정석
  • "기존 키 유지 + 갱신된 public key 추가"는 동일 fingerprint 중복으로 추가가 불가능 함.

8단계. keyserver(keys.openpgp.org)에 반영

gpg --send-keys <primary_key>

또는:

gpg --armor --export <primary_key> | \
  curl -T - https://keys.openpgp.org
  • email 재검증 불필요
  • 기존 검증 상태 유지

9단계. 로컬 Git 설정 확인

이미 <signing_subkey> 를 사용 중이면 변경 불필요.

git config --global --get user.signingkey

10단계. 동작 확인

git commit -S -m "test signed commit after expiration extension"
  • 오류 없음
  • GitHub에서 Verified 표시 확인

주의 사항

  • expire 연장은 private key 보유자만 가능
  • public key 재게시 없으면
    • GitHub
    • keyserver 모두 변경 사항을 알 수 없음
  • primary key는 건드릴 이유 없음