I know that gpg --export -o pub.key -a "Username" exports a users' public key, but it doesn't seem to write a standard PEM format block.

Is there any way to export keys from gpg in PEM format?

4 Answers 4


You need the gpgsm utility, but, yes, you can.

gpgsm -o secret-key.p12 --export-secret-key-p12 0xXXXXXXXX

It contains keys and certificates. Then you can split them with openSSL and transform it in .pem at the same time

openssl pkcs12 -in secret-key.p12 -nocerts -out gpg-key.pem
openssl pkcs12 -in secret-key.p12 -nokeys -out gpg-certs.pem

You need gpgsm.

To clone the keys from the gpg keystore to the gpgsm keystore, check this comment. Copying the solution here

 $ gpg --list-secret-keys --with-keygrip
 $ gpgsm --gen-key -o temporary.cert
 > Existing Key
 > use keygrip from gpg output
 > fill the X509 values
 > create a self signed certificate
 $ gpgsm --import temporary.cert
 $ gpgsm --list-keys
 > find the key just imported
 $ gpgsm -o cert.p12 --export-secret-key-p12 ${KEY_ID}
  • This didn't work for me. I just got "gpgsm: signing failed: Invalid ID" over and over again
    – Wes
    Feb 16, 2021 at 16:21

Since GitLab needs the Public GPG key in PEM format, you could follow their tutorial.

To export the private key to txt specifically:

gpg --armor --export-secret-keys 0x<key-ID>


gpg --armor --export-secret-keys "email-address"

Use the Key-ID or the email-address that was used to generate the private/secret key.

To write private key to disk:

gpg --armor --export-secret-keys "[email protected]" > test.pem

To public key to txt/pem:

gpg --export -a "[email protected]"

Remember to use your email/key-id instead.

  • 3
    --armor is the same as -a which the Question already had 8 years ago, and correctly states does NOT produce PEM. It produces PGP armor format, which is similar to PEM but is NOT PEM. Sep 23, 2020 at 2:23

Use the --export-ssh-key option and then convert it to PEM:

ssh-keygen -f <(gpg --export-ssh-key <short_key_id>) -e -m pem

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .