使用 openssl genpkey 指令生成 rsa 密钥对的方法
概要
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 genpkey 指令生成 rsa 密钥对的方法
文章链接:https://www.snowdreamsblog.cn/program_expertise/3.html
本站文章均为原创,未经授权请勿用于任何商业用途