«

使用 openssl genpkey 指令生成 rsa 密钥对的方法

srdf 发布于 阅读:418 编程知识


概要

openssl genpkey [-help] [-out filename] [-outform DER|PEM] [-quiet] [-pass arg] [-cipher] [-paramfile file] [-algorithm alg] [-pkeyopt opt:value] [-genparam] [-text] [-engine id] [-provider name] [-provider-path path] [-propquery propq] [-config configfile]


原本的指令是openssl genrsa -out localhost.key,在新版本中由genpkey取代。

其中,openssl genpkey 用于生成私钥或密钥对。

常用的选项有:

-help:打印一些有用的消息

-out 文件名:将密钥输出到指定的文件。如果没有指定这个参数,就使用标准输出。

-pass arg 输出文件的密码源。前往openssl 密码短语(1)获取更多关于arg的格式信息。

-algorithm:算法。

生成公钥使用的算法,例如:RSA,DSA,DH或DHX。如果使用这个选项,那么这个选项必须位于-pkeyopt选项的前面。-paramfile-algorithm是互斥的。除了标准内置算法之外,引擎或提供商还可以添加算法。

用于生成私钥的有效内置算法名是RSA, RSA-PSS, EC, X25519, X448, ED25519和ED448。

用于参数生成的有效内置算法名称(请参阅 -genparam 选项)是 DH、DSA 和 EC。

请注意,算法名称 X9.42 DH 可以用作 DHX 密钥的同义词,PKCS#3 指 DH 密钥。 某些选项在 DH 和 DHX 密钥之间不共享。

-pkeyopt opt:value 使用value设置公钥算法的选项。支持的精确选项集取决于所使用的公钥算法及其实现。查看下方的密钥生成选项参数生成选项

除了以上常用的选项外,还有一些其他的选项此处并未列出,因为目前生成私钥的功能暂时用不到其余选项,因此不予列出。如果想要了解更多的信息,前往openssl-genpkey官方手册查阅。

密钥生成选项

所有算法均支持这一选项,并且每种算法的实现确实不同。下文描述了该选项在OpenSSL里的实现。X25519,X448,ED25519或ED448算法没有密钥生成选项。

为了节省篇幅,如上一部分的文章一样,此处仅展示本文用到的RSA算法有关的选项,其余的请前往密钥生成选项获取完整文本。之后如有需要,会另开一篇文章写作。


RSA密钥生成选项

rsa_keygen_bits:numbits

生成的密钥的位数。如果没有指定,使用2048位。

rsa_keygen_primes:numprimes

生成密钥使用的质数。如果没有指定,使用2作为质数。

rsa_keygen_pubexp:value

RSA 公共指数值。 如果前面带有 0x,则这可以是一个较大的十进制或十六进制值。 默认值为 65537。


示例

使用默认参数生成RSA私钥:

openssl genpkey -algorithm RSA -out key.pem

使用3作为公共指数生成2048位的RSA密钥:

openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3

备注

1. -engine选项在3.0版本中弃用。

2. 对于 rsa_keygen_primes:numprimes 选项中,如果使用这个选项,那么必须遵循以下规则:最大值不得超过5。当bits小于1024位时,该值=2;小于4096位时=3,小于8192位时=4。建议 rsa_keygen_bits:numbers = 4096,因此 rsa_keygen_primes:numprimes = 3。相关的源代码请前往Github查看。

3. 在这里获取生成的示例文件。请联系管理员获取密码。

4. 如果primes大于5,会报出以下错误:

genpkey: Error generating RSA key

E8160000:error:020000A5:rsa routines:rsa_multiprime_keygen:key prime num invalid:crypto\rsa\rsa_gen.c:102:







OpenSSL OpenSSL-genpkey V3.1


扫描二维码,在手机上阅读
取消
微信二维码
微信二维码
支付宝二维码
收到1条评论
avatar
星辰子 2023-11-28 09:24
注意:在-pass参数中使用pass:password格式时,请勿包含特殊字符,否则会被认为不正确的语法。
回复