Jakarta ee 如何以PEM格式生成PKCS#1 RSA密钥?

Jakarta ee 如何以PEM格式生成PKCS#1 RSA密钥?,jakarta-ee,openssl,key-generator,pkcs#1,Jakarta Ee,Openssl,Key Generator,Pkcs#1,对不起,我的英语,老实说,我有一个非常小的理解,所以请容忍我 我正在开发一个java应用程序,它向服务器发送一个签名请求。 为此,我必须以PEM格式生成PKCS#1 RSA密钥对,用于签名和验证。我尝试过使用OpenSSL v.1.0.1。但是生成的公钥是X.509 PEM 下面是我用来生成密钥的openssl命令: 私钥: openssl genrsa -out name_of_private_key.pem 1024 公钥 openssl rsa -in name_of_private_k

对不起,我的英语,老实说,我有一个非常小的理解,所以请容忍我

我正在开发一个java应用程序,它向服务器发送一个签名请求。 为此,我必须以
PEM
格式生成PKCS#1 RSA密钥对,用于签名和验证。我尝试过使用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:

但是它说BouncyCastle只用于PKCS#1填充而不是编码


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

尽管OpenSSL库支持PKCS#1编码,但OpenSSL的命令行版本将只输出x.509格式的RSA公钥。不幸的是,除了编写一些使用OpenSSL库以PKCS#1格式输出密钥的代码之外,您似乎别无选择

作为参考,PKCS#1键使用以下页眉/页脚:

-----BEGIN RSA PUBLIC KEY----- 
...
-----END RSA PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
而x.509键使用以下页眉/页脚:

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

OPENSSL默认情况下以PKCS#1格式生成私钥 如下

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

SSL总是以X.509格式导出公钥 如下

我使用这个bat脚本生成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

您可以强制OpenSSH以旧的PEM/PKCS#1格式生成密钥:

ssh-keygen-t rsa-b 4096-o-a 100-f id_rsa-m PEM

找到了一个答案,希望这有助于发布答案,这样它可以帮助其他人。实际上,命令行
rsa
确实支持这种格式,并提供了选项
-RSAPublicKey{in,out}
,从2010年的1.0.0开始,但直到2014年1.0.1f才有记录,直到2016年1.1.0才有记录:{在0.9.8中,您可以使用
asn1parse
-strparse
来定位和提取SPKI的PKCS1部分作为DER,然后使用
enc-base64
和一些文本编辑将DER转换为PEM.OTOH OP首选Java,并在2012年12月回答了这个问题。我认为您混淆了公共和私有。openssl genrsa(仅在1.1.0中使用pkey-传统)写入“RSA私钥”,即PKCS1,而pkcs8-topk8,pkey(默认值),genpkey和req-newkey写入“私钥”或“加密私钥”,这两个都是PKCS8。但除rsa-RSAPlicKey外的所有命令行操作都会写出“公钥”,即您所说的X.509 SPKI。此问题询问的是公钥不是私钥。感谢您的更正…更改------开始rsa公钥------使用正确------开始rsa PRIVATE键-----
@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