如何向 openssl 生成的 ECC 私钥添加密码?

How can one add password to ECC private key generated by openssl?

我正在尝试使用 OpenSSL 命令行界面创建基于椭圆曲线的证书。我通过在我的 CLI 中键入以下命令来生成密钥文件:

openssl ecparam -name secp256k1 -genkey -noout -out rootpem.pem

问题是虽然成功生成了 ECC 密钥,但没有使用任何对称密码术对其进行加密。但是,使用以下命令加密 RSA 密钥非常简单:

openssl genrsa -aes128 -out 1.key 2048 

有没有像 RSA 密钥一样加密 ECC 密钥的方法?

我尝试了 "OpenSSL 0.9.8zh 14 Jan 2016" 和 "OpenSSL 1.1.0g 2 Nov 2017" 具有多个参数组合的 OpenSSL 版本,但我总是出错。

据我所试,没有针对它的单行解决方案。它可以通过管道 openssl ecparamopenssl ec 命令生成。一种可能的解决方案是:

openssl ecparam -genkey -name secp384r1 | openssl ec -aes-256-cbc -out rootpem.[pem/key]

查看生成的文件,它们具有与 the OpenSSL wiki examples 相似的 headers。但是,我不确定这个管道是否安全,因为未加密的密钥是裸露的。

或者您可以分两步完成:首先是 'ecparam',然后是密钥

openssl ecparam -name secp256k1 -out ecparam.pem
openssl genpkey -paramfile ecparam.pem -out key.pem -aes-128-cbc -pass pass:HereIsThePassword

推荐使用genpkey命令。它还可以在Ed25519曲线上生成私钥,并用一条命令用AES-256加密:

openssl genpkey -algorithm ed25519 -aes256 -pass stdin -out private/ca.key