当基于 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
可用于一步生成密钥对和请求。