openssl-genpkey
名称
openssl-genpkey - 生成私钥或密钥对
概要
openssl genpkey [-help] [-out 文件名] [-outpubkey 文件名] [-outform DER|PEM] [-verbose] [-quiet] [-pass 参数] [-密码] [-paramfile 文件] [-algorithm 算法] [-pkeyopt 选项:值] [-genparam] [-text] [-rand 文件] [-writerand 文件] [-engine id]
[-provider 名称] [-provider-path 路径] [-propquery 属性查询] [-config 配置文件]
描述
此命令生成私钥或密钥对。
选项
- -help
-
打印使用信息。
- -out 文件名
-
将私钥输出到指定文件。如果未指定此参数,则使用标准输出。
- -outpubkey 文件名
-
将公钥输出到指定文件。如果未指定此参数,则不输出公钥。
- -outform DER|PEM
-
输出格式,除了在给出 -genparam 时;默认值为 PEM。有关详细信息,请参阅 openssl-format-options(1)。
当给出 -genparam 时,-outform 被忽略。
- -verbose
-
在生成密钥时输出“状态点”。
- -quiet
-
在生成密钥时不输出“状态点”。
- -pass 参数
-
输出文件密码源。有关 参数 格式的更多信息,请参阅 openssl-passphrase-options(1)。
- -密码
-
此选项使用提供的密码加密私钥。EVP_get_cipherbyname() 接受的任何算法名称都是可接受的,例如 des3。
- -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 选项:值
-
将公钥算法选项 选项 设置为 值。支持的选项的精确集取决于使用的公钥算法及其实现。有关更多详细信息,请参阅下面的 “密钥生成选项” 和 “参数生成选项”。
要列出算法的可能 选项 值,请使用:openssl genpkey -algorithm XXX -help
- -genparam
-
生成一组参数而不是私钥。如果使用此选项,则必须在任何 -algorithm、-paramfile 或 -pkeyopt 选项之前。
- -paramfile 文件名
-
某些公钥算法根据一组参数生成私钥。可以使用此选项提供它们。如果使用此选项,则使用的公钥算法由参数确定。如果使用此选项,则必须在任何 -pkeyopt 选项之前。选项 -paramfile 和 -algorithm 是互斥的。
- -text
-
打印私钥和公钥以及参数的(未加密的)文本表示形式以及 PEM 或 DER 结构。
- -rand 文件, -writerand 文件
-
有关详细信息,请参阅 openssl(1) 中的“随机状态选项”。
- -engine id
-
参阅 openssl(1) 中的“引擎选项”。此选项已弃用。
- -provider 名称
- -provider-path 路径
- -propquery 属性查询
- -config 配置文件
密钥生成选项
每个算法支持的选项以及每个算法的实现可能会有所不同。OpenSSL 实现的选项在下面详细说明。X25519、X448、ED25519 或 ED448 算法没有定义密钥生成选项。
RSA 密钥生成选项
- rsa_keygen_bits:比特数
-
生成密钥中的比特数。如果未指定,则使用 2048。
- rsa_keygen_primes:素数个数
-
生成密钥中的素数个数。如果未指定,则使用 2。
- rsa_keygen_pubexp:值
-
RSA 公钥指数值。如果以
0x
开头,则它可以是一个大的十进制或十六进制值。默认值为 65537。
RSA-PSS 密钥生成选项
注意:默认情况下,RSA-PSS 密钥没有任何参数限制。
- rsa_keygen_bits:比特数, rsa_keygen_primes:素数个数, rsa_keygen_pubexp:值
-
这些选项与 RSA 算法具有相同的含义。
- rsa_pss_keygen_md:摘要
-
如果设置,则密钥被限制并且只能使用 摘要 进行签名。
- rsa_pss_keygen_mgf1_md:摘要
-
如果设置,则密钥被限制并且只能使用 摘要 作为其 MGF1 参数。
- rsa_pss_keygen_saltlen:长度
-
如果设置,则密钥被限制并且 长度 指定最小盐长度。
EC 密钥生成选项
EC 密钥生成选项也可用于参数生成。
- ec_paramgen_curve:曲线
-
要使用的 EC 曲线。OpenSSL 支持 NIST 曲线名称,例如“P-256”。
- ec_param_enc:编码
-
用于参数的编码。编码 参数必须是 named_curve 或 explicit。默认值为 named_curve。
DH 密钥生成选项
- group:名称
-
如果在此处使用命名组,则不需要 paramfile 选项。参阅下面的 “DH 参数生成选项” 部分。
参数生成选项
每个算法支持的选项以及每个算法的实现可能会有所不同。OpenSSL 实现的选项在下面详细说明。
DSA 参数生成选项
- dsa_paramgen_bits:比特数
-
生成素数中的比特数。如果未指定,则使用 2048。
- dsa_paramgen_q_bits:比特数
- qbits:比特数
-
q 参数中的比特数。必须是 160、224 或 256 之一。如果未指定,则使用 224。
- dsa_paramgen_md:摘要
- digest:摘要
-
在参数生成期间使用的摘要。必须是 sha1、sha224 或 sha256 之一。如果设置,则 q 中的比特数将与指定摘要的输出大小匹配,并且 dsa_paramgen_q_bits 参数将被忽略。如果未设置,则将使用一个摘要,它给出与 q 中的比特数匹配的输出,即如果 q 长度为 160 则为 sha1,如果为 224 则为 sha224,如果为 256 则为 sha256。
- properties:查询
-
从提供者获取摘要时使用的 摘要 属性 查询 字符串。
- type:类型
-
要使用的生成类型。将其设置为 1 以使用旧版 FIPS186-2 参数生成。默认值 0 使用 FIPS186-4 参数生成。
- gindex:索引
-
用于生成器 g 的规范生成和验证的索引。将其设置为从 0..255 到 255 的正值以使用此模式。较大的值将只使用最低字节。此 索引 然后必须在密钥验证期间重新使用以验证 g 的值。如果未设置此值,则 g 不可验证。默认值为 -1。
- hexseed:种子
-
要使用的种子 种子 数据,而不是在内部生成随机种子。这仅应用于测试目的。这将生成生成的的参数的固定值,或者如果种子未生成有效的素数,则将失败。
DH 参数生成选项
对于大多数用例,建议使用 group 选项而不是 type 选项。请注意,如果未指定任何参数生成选项,则默认情况下不使用 group 选项。
- group:名称
- dh_param:名称
-
使用命名 DH 组为 DH 参数选择常数值。如果设置此值,则所有其他选项将被忽略。
与 “DH” 算法关联的有效值为:“ffdhe2048”、“ffdhe3072”、“ffdhe4096”、“ffdhe6144”、“ffdhe8192”、“modp_1536”、“modp_2048”、“modp_3072”、“modp_4096”、“modp_6144”、“modp_8192”。
与 “DHX” 算法关联的有效值为 RFC5114 名称“dh_1024_160”、“dh_2048_224”、“dh_2048_256”。
- dh_rfc5114:编号
-
如果设置此选项,则使用相应的 RFC5114 参数,而不是生成新参数。编号 值可以是 1、2 或 3,它们等效于使用 group 选项以及“dh_1024_160”、“dh_2048_224”或“dh_2048_256”之一。如果设置此值,则所有其他选项将被忽略。
- pbits:比特数
- dh_paramgen_prime_len:比特数
-
素数参数 p 中的比特数。默认值为 2048。
- qbits:比特数
- dh_paramgen_subprime_len:比特数
-
子素数参数 q 中的比特数。默认值为 224。仅与使用 dh_paramgen_type 选项生成 DHX 参数相关。
- safeprime-generator:值
- dh_paramgen_generator:值
-
要用于生成器 g 的值。默认值为 2。algorithm 选项必须为 “DH”,此参数才能使用。
- type:字符串
-
要生成的 DH 参数的类型名称。有效值为
- "generator"
-
使用 safeprime_generator 选项的安全素数生成器。algorithm 选项必须为 “DH”。
- "fips186_4"
-
FIPS186-4 参数生成。algorithm 选项必须为 “DHX”。
- "fips186_2"
-
FIPS186-4 参数生成。algorithm 选项必须为 “DHX”。
- "group"
-
可与 pbits 选项一起使用以选择“ffdhe2048”、“ffdhe3072”、“ffdhe4096”、“ffdhe6144”或“ffdhe8192”之一。algorithm 选项必须为 “DH”。
- "default"
-
根据 algorithm 选择默认类型。OpenSSL 默认提供者使用它来为向后兼容性设置类型。如果 algorithm 为 “DH”,则使用 “generator”。如果 algorithm 为 “DHX”,则使用 “fips186_2”。
- dh_paramgen_type:值
-
要生成的 DH 参数的类型。有效值为 0、1、2 或 3,它们分别对应于将 type 选项设置为“generator”、“fips186_2”、“fips186_4”或“group”。
- digest:摘要
-
在参数生成期间使用的摘要。必须是 sha1、sha224 或 sha256 之一。如果设置,则 qbits 中的比特数将与指定摘要的输出大小匹配,并且 qbits 参数将被忽略。如果未设置,则将使用一个摘要,它给出与 q 中的比特数匹配的输出,即如果 q 长度为 160 则为 sha1,如果为 224 则为 sha224,如果为 256 则为 sha256。这仅由“fips186_4”和“fips186_2”密钥生成使用。
- properties:查询
-
从提供者获取摘要时使用的 摘要 属性 查询 字符串。这仅由“fips186_4”和“fips186_2”密钥生成使用。
- gindex:索引
-
用于生成和验证生成器 g 的规范索引。将其设置为 0..255 之间的正值以使用此模式。较大的值只会使用最低字节。此索引然后必须在密钥验证期间重复使用以验证 g 的值。如果未设置此值,则 g 不可验证。默认值为 -1。这仅由“fips186_4”和“fips186_2”密钥生成使用。
- hexseed:种子
-
要使用的种子种子数据,而不是在内部生成随机种子。这仅应用于测试目的。这将为生成的參數产生固定值,或者如果种子未生成有效的素数,则会失败。这仅由“fips186_4”和“fips186_2”密钥生成使用。
EC 参数生成选项
EC 参数生成选项与密钥生成相同。请参阅上面“EC 密钥生成选项”。
注意
建议使用 genpkey 程序而不是特定算法的实用程序,因为可以使用其他算法选项和 ENGINE 提供的算法。
示例
使用默认參數生成 RSA 私钥
openssl genpkey -algorithm RSA -out key.pem
使用 128 位 AES 和密码短语“hello”加密输出私钥
openssl genpkey -algorithm RSA -out key.pem -aes-128-cbc -pass pass:hello
使用 3 作为公钥指数生成 2048 位 RSA 密钥
openssl genpkey -algorithm RSA -out key.pem \
-pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3
生成可验证的 2048 位 DSA 参数:gindex 和 seed 的输出值是密钥验证目的所需的,不会保存到输出 pem 文件中)。
openssl genpkey -genparam -algorithm DSA -out dsap.pem -pkeyopt pbits:2048 \
-pkeyopt qbits:224 -pkeyopt digest:SHA256 -pkeyopt gindex:1 -text
从参数生成 DSA 密钥
openssl genpkey -paramfile dsap.pem -out dsakey.pem
使用安全素数组 ffdhe4096 生成 4096 位 DH 密钥
openssl genpkey -algorithm DH -out dhkey.pem -pkeyopt group:ffdhe4096
使用 RFC5114 group3 生成具有 256 位子组的 2048 位 X9.42 DH 密钥
openssl genpkey -algorithm DHX -out dhkey.pem -pkeyopt dh_rfc5114:3
使用 DH 参数文件生成 DH 密钥
openssl genpkey -paramfile dhp.pem -out dhkey.pem
输出安全素数组 ffdhe2048 的 DH 参数
openssl genpkey -genparam -algorithm DH -out dhp.pem -pkeyopt group:ffdhe2048
输出使用 RFC5114 group2 的具有 224 位子组的 2048 位 X9.42 DH 参数
openssl genpkey -genparam -algorithm DHX -out dhp.pem -pkeyopt dh_rfc5114:2
输出使用 FIP186-4 keygen 的具有 224 位子组的 2048 位 X9.42 DH 参数
openssl genpkey -genparam -algorithm DHX -out dhp.pem -text \
-pkeyopt pbits:2048 -pkeyopt qbits:224 -pkeyopt digest:SHA256 \
-pkeyopt gindex:1 -pkeyopt dh_paramgen_type:2
输出使用 FIP186-2 keygen 的具有 160 位子组的 1024 位 X9.42 DH 参数
openssl genpkey -genparam -algorithm DHX -out dhp.pem -text \
-pkeyopt pbits:1024 -pkeyopt qbits:160 -pkeyopt digest:SHA1 \
-pkeyopt gindex:1 -pkeyopt dh_paramgen_type:1
输出 2048 位 DH 参数
openssl genpkey -genparam -algorithm DH -out dhp.pem \
-pkeyopt dh_paramgen_prime_len:2048
使用生成器输出 2048 位 DH 参数
openssl genpkey -genparam -algorithm DH -out dhpx.pem \
-pkeyopt dh_paramgen_prime_len:2048 \
-pkeyopt dh_paramgen_type:1
生成 EC 参数
openssl genpkey -genparam -algorithm EC -out ecp.pem \
-pkeyopt ec_paramgen_curve:secp384r1 \
-pkeyopt ec_param_enc:named_curve
从参数生成 EC 密钥
openssl genpkey -paramfile ecp.pem -out eckey.pem
直接生成 EC 密钥
openssl genpkey -algorithm EC -out eckey.pem \
-pkeyopt ec_paramgen_curve:P-384 \
-pkeyopt ec_param_enc:named_curve
生成 X25519 私钥
openssl genpkey -algorithm X25519 -out xkey.pem
生成 ED448 私钥
openssl genpkey -algorithm ED448 -out xkey.pem
历史
在 OpenSSL 1.0.2 中添加了使用 NIST 曲线名称以及直接生成 EC 密钥的功能。在 OpenSSL 1.1.0 中添加了生成 X25519 密钥的功能。在 OpenSSL 1.1.1 中添加了生成 X448、ED25519 和 ED448 密钥的功能。
-engine 选项在 OpenSSL 3.0 中已弃用。
版权
版权所有 2006-2024 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0 版(“许可证”)授权。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或https://www.openssl.org/source/license.html中获取副本。