2012-05-28 203 views
3

对不起,我的英语,老实说,我对此有一个很少的理解,所以请忍受我。如何生成PEM格式的PKCS#1 RSA密钥?

我正在开发一个将签名请求发送到服务器的java应用程序。 为此,我必须生成一个PKCS#1 RSA密钥对,格式为PEM,用于签名和验证。我试过使用OpenSSL v.1.0.1。但生成的公钥是X.509 PEM

这是我用来生成密钥的OpenSSL的命令:

私钥

openssl genrsa -out name_of_private_key.pem 1024 

公钥

openssl rsa -in name_of_private_key.pem -pub out > name_of_public_key.pem 

我已经通过这个线程去也我找到了一个开源的JAVA库BouncyCastle:Generating RSA keys in PKCS#1 format in Java

但它表示BouncyCastle仅用于PKCS#1 填充不是编码

最好,我正在寻找方法来使用JAVA或任何第三方生成它,如果没有其他选项可用。

+0

找到了答案[这里](http://blog.oddbit.com/2011/05/converting-openssh-public-keys.html)希望这有助于 –

+0

请张贴的答案,以便它可以帮助其他。 – doptimusprime

回答

6

尽管OpenSSL库支持PKCS#1编码,但命令行版本的OpenSSL将仅输出x.509格式的RSA公钥。不幸的是,似乎没有办法,只能编写一些使用OpenSSL库的代码来输出PKCS#1格式的密钥。

作为参考,PKCS#1键将使用这些页眉/页脚:

-----BEGIN RSA PUBLIC KEY----- 
... 
-----END RSA PUBLIC KEY----- 

而一个X.509密钥使用这些页眉/页脚:

-----BEGIN PUBLIC KEY----- 
... 
-----END PUBLIC KEY----- 
+0

实际上,自2010年1.0.0以来,命令行'rsa'确实支持这种格式,并带有选项'-RSAPublicKey_ {in,out}',但直到2014年1.0.1f才被记录,而不是直到1.1.0在2016年:{在0.9.8中,您可以使用'asn1parse'和'-strparse'来定位并提取SPKI的PKCS1部分作为DER,然后使用'enc-base64'和一些文本编辑将DER转换为PEM。 OTOH OP首选Java和https://stackoverflow.com/questions/14052485/converting-a-public-key-in-subjectpublickeyinfo-format-to-rsapublickey-format-java回答说,在2012年12月。 –

2

OPENSSL默认生成私人Key in PKCS#1格式 如下

-----BEGIN RSA PRIVATE KEY----- 
... 
-----END RSA PRIVATE KEY----- 

您可以转换私钥PKCS#8格式 这是如下

-----BEGIN PRIVATE KEY----- 
... 
-----END PRIVATE KEY----- 

SSL始终导出公钥X.509格式 是如下

-----BEGIN PUBLIC KEY----- 
... 
-----END PUBLIC KEY----- 

我用生成RSA密钥这只蝙蝠脚本。

@ECHO OFF 
SET mypath=%~dp0 
cd %mypath:~0,-1% 

ECHO === GENERATE PRIVATE KEY --- Format: PKCS#1 --- File: private.txt=== 
openssl genrsa -f4 -out private.txt 4096 

ECHO === GENERATE PRIVATE KEY --- Format: PKCS#8 --- File: private8.txt=== 
openssl pkcs8 -topk8 -inform pem -in private.txt -outform PEM -nocrypt -out private8.txt 

ECHO === GENERATE PUBLIC KEY --- Format: X.509 --- File: public.txt=== 
openssl rsa -in private.txt -outform PEM -pubout -out public.txt 
PAUSE 
+0

我认为你'已经混合了公共和私人。 openssl genrsa(和pkey -traditional,仅在1.1.0中)写入PKCS1的'RSA PRIVATE KEY',而pkcs8 -topk8,pkey(默认),genpkey和req -newkey写入'PRIVATE KEY'或'ENCRYPTED PRIVATE KEY'这两个都是PKCS8。但是除了rsa -RSAPublicKey_out之外的所有命令行操作都会写'PUBLIC KEY',就像你说的X.509 SPKI一样。这Q问_public_键不是私人的。 –

+0

感谢您的更正...更改-----开始RSA公钥-----正确的-----开始RSA私钥----- – Joma

相关问题