如何基于 OpenSSL 配置文件创建 ECDSA 密钥对?

mee*_*que 5 certificate command-line openssl parameters config-files

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

openssl req -new -noenc -config 'server.cert.conf' -keyout 'private/server.key.pem' -out 'server.csr.pem'
Run Code Online (Sandbox Code Playgroud)

我喜欢将详细信息放入配置文件中,该文件如下所示:

[ 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
Run Code Online (Sandbox Code Playgroud)

现在我想使用 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'
Run Code Online (Sandbox Code Playgroud)

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

$ openssl req -new -config 'server.cert.conf' -noenc -newkey 'param:server.key.params.pem' -keyout 'private/server.key.pem' -out 'server.csr.pem'
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

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

default_bits = ec:server.key.params.pem
default_newkey = ec:server.key.params.pem
pkeyopt = ec_paramgen_curve:secp384r1
Run Code Online (Sandbox Code Playgroud)

use*_*686 5

不,没有。该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
Run Code Online (Sandbox Code Playgroud)

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