--- title: "Extending GPG Subkey Expiration on YubiKey" description: "How to extend the expiration date of GPG subkeys stored on a YubiKey" publishDate: "30 January 2026" tags: [security, gpg, yubikey, "en"] author: "Dawid" language: "en" --- # Extending GPG Subkey Expiration on YubiKey I'm always forgetting how to do that, so I'll write one another step by step guide how to extend expiration of subkeys in yubikey. ## First you need Master key available locally (not on YubiKey - get it from back-up that you have, don't you?) ## Steps ### 1. Verify your keys Plug in the YubiKey and check the current state: ```bash gpg --card-status ``` You should see: - `sec` — master key (local) - `ssb>` — subkeys on YubiKey (the `>` indicates the key is on a smartcard) The full fingerprints are listed under: - **Signature key** — signing subkey - **Encryption key** — encryption subkey - **Authentication key** — authentication subkey ### 2. Get master key fingerprint ```bash gpg -K --with-subkey-fingerprints ``` Copy the full fingerprint of the master key. ### 3. Extend subkey expiration Extend all three subkeys at once: ```bash gpg --quick-set-expire 1y ``` Or extend all subkeys (including old/dead ones) with a wildcard: ```bash gpg --quick-set-expire 1y '*' ``` ### 4. Verify the new expiration ```bash gpg --card-status ``` Confirm the `ssb>` subkeys show the updated expiry date. ### 5. Export updated public key ```bash gpg --export --armor > pubkey.asc ``` The subkey expiration dates are stored in the public key metadata. Even though the key material hasn't changed, the updated expiry needs to be distributed. Remember to upload it to your: - git servers - keyservers (`gpg --send-keys `) - any other service that verifies signatures The expiry metadata changed, so update your offline backup of the public key. ## Additionally - **`pass`** requires no changes — it uses the same encryption subkey, just with a new expiry. - **Git signing** requires no local config changes — `git` uses the same key ID. - Only the public key export/upload is needed to keep external services working. ## Useful links - [Change PGP Key Expiration Date — jms1](https://yubikey.jms1.info/maint/pgp-expiration.html) - [Changing the expiration date of your YubiKey — shibumi.dev](https://shibumi.dev/posts/changing-the-expiration-date-of-your-yubikey/) - [Extending an expired GPG key — WhyNotHugo](https://whynothugo.nl/journal/2023/07/13/extending-an-expired-gpg-key/) - [PGP on YubiKey / refresh expiry — OSSO](https://www.osso.nl/blog/2020/pgp-on-yubikey-refresh-expiry/) - [Renewing subkeys — drduh/YubiKey-Guide #101](https://github.com/drduh/YubiKey-Guide/issues/101) - [yubikey-gpg-expiry-extender — automation scripts](https://github.com/ahuemmer/yubikey-gpg-expiry-extender) - [Renew Expired GPG key — GitHub Gist](https://gist.github.com/krisleech/760213ed287ea9da85521c7c9aac1df0)