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?
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.
Sign up to join this communityYou 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}
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>
or
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.
--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