无法将PKCS1格式PGP密钥转换为PKCS8格式的解决方案求助
问题概述
执行命令:openSSL pkcs8 -in private-key.pem -topk8 -nocrypt -out private-pkc8.pk8
报错:Could not find private key of key from private-key.pem
同时尝试其他命令均失败:
sudo ssh-keygen -e -f private-key.pem -m PKCS8 > public-key.pem报错:Load key "private-key.pem": invalid formatopenssl rsa -RSAPublicKey_in -in public-key.pem -pubout报错:unable to load Public Key 140704425797376:error:0908F066:PEM routines:get_header_and_data:bad end line:crypto/pem/pem_lib.c:852:
核心原因:你的密钥是PGP格式(头部为-----BEGIN PGP PRIVATE KEY BLOCK-----),而OpenSSL、ssh-keygen仅支持OpenSSL标准的密钥格式(如PKCS1、PKCS8、SPKI),直接修改头部无法解决格式不兼容问题,必须先转换格式。
解决步骤
1. 将PGP私钥转换为OpenSSL兼容的RSA私钥
查看你的PGP密钥ID:
gpg --list-secret-keys
输出中类似sec rsa4096/1234ABCD 2024-01-01 [SC]的1234ABCD就是密钥ID。导出并转换私钥:
gpg --export-secret-keys --armor 1234ABCD | openssl rsa -inform PEM -out private-key-openssl.pem
替换1234ABCD为你的实际密钥ID。验证转换后的私钥:
openssl rsa -in private-key-openssl.pem -check
如果输出RSA key ok,说明转换成功。
2. 将转换后的私钥转为PKCS8格式
现在可以执行你最初的命令,使用转换后的私钥:openssl pkcs8 -in private-key-openssl.pem -topk8 -nocrypt -out private-pkc8.pk8
3. 转换PGP公钥为OpenSSL兼容格式
如果需要处理公钥,执行以下命令:gpg --export --armor 1234ABCD | openssl x509 -inform PEM -pubkey -noout > public-key-openssl.pem
或者:gpg --export 1234ABCD | openssl rsa -pubin -inform DER -outform PEM -out public-key-openssl.pem
转换后即可用OpenSSL命令处理公钥,比如:openssl rsa -RSAPublicKey_in -in public-key-openssl.pem -pubout
内容的提问来源于stack exchange,提问作者yigozer

