如何根据 OpenSSL 配置文件创建 ECDSA 密钥对?

如何根据 OpenSSL 配置文件创建 ECDSA 密钥对?

当基于 RSA 密钥对生成 CSR 时,req为了方便,我使用 OpenSSL 命令:

openssl req -new -noenc -config 'server.cert.conf' -keyout 'private/server.key.pem' -out 'server.csr.pem'

我喜欢将详细信息放入配置文件中,它看起来像这样:

[ req ]
prompt = no
utf8 = yes
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_extensions

[ req_distinguished_name ]
CN = foo.example.net

[ req_extensions ]

subjectAltName=@alt_names

[ alt_names ]
DNS.1 = foo.example.net
DNS.2 = bar.example.net

现在我想使用 ECDSA 密钥,但还没有找到将所有必要参数放入配置文件的方法。相反,我必须调用几个 OpenSSL 命令并指定一些参数作为命令参数:

$ openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:secp384r1 -out server.key.params.pem
$ openssl genpkey -paramfile server.key.params.pem -out private/server.key.pem
$ openssl req -new -config 'server.cert.conf' -key 'private/server.key.pem' -out 'server.csr.pem'

或者,我可以跳过第二个genpkey命令,但我仍然需要一个参数文件:

$ openssl req -new -config 'server.cert.conf' -noenc -newkey 'param:server.key.params.pem' -keyout 'private/server.key.pem' -out 'server.csr.pem'

有没有办法移动所有的公钥算法特定配置(如 EC 曲线选择)CSR 的配置文件

理想情况下,我希望req从问题一开始就对 RSA 和 ECDSA 密钥运行完全相同的 OpenSSL 命令。并将所有详细信息外部化到配置文件中。包括首先决定使用哪种公钥算法。


我已阅读所有 OpenSSL 手册页,并在此处和网络上其他地方搜索答案。但到目前为止我还没有找到任何东西。

我的印象是,OpenSSL 在 CLI 选项和配置文件选项方面相当不一致。有些东西(如主题 alt 名称)只能通过配置文件控制,而其他东西(如 EC 曲线)只能通过 CLI 参数配置。希望有人能证明我后者的说法是错误的。

我尝试使用配置文件中的某些 CLI 选项,但 OpenSSL 只是忽略了它们。到目前为止,已经测试了这些行的几种变体:

default_bits = ec:server.key.params.pem
default_newkey = ec:server.key.params.pem
pkeyopt = ec_paramgen_curve:secp384r1

答案1

没有。req子命令不会从配置中读取“keyalg”,只会从-newkey选项中读取。

但是,您可以避免使用 param 文件:

openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 > foo.priv
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 > foo.priv

GnuTLScerttool -q可用于一步生成密钥对和请求。

相关内容