避免提示输入密钥和 DN 信息

避免提示输入密钥和 DN 信息

我正在使用以下代码来生成密钥:

apt-get -qq -y install openssl;
mkdir -p /etc/apache2/ssl;
openssl genrsa -des3 -out server.key 1024;
openssl req -new -key server.key -out server.csr;
cp server.key server.key.org;
openssl rsa -in server.key.org -out server.key;
openssl x509 -req -days 12000 -in server.csr -signkey server.key -out server.crt;
mv server.crt  /etc/apache2/ssl/cert.pem;
mv server.key  /etc/apache2/ssl/cert.key;
rm -f server.key.orig;
rm -f server.csr

我有两个问题:

  1. 我如何跳过密码提示?这样做是否安全?(因为这并不愚蠢,就像任何人都可以破解证书一样)

  2. 我如何避免提示国家名称、组织等。我希望我可以在命令提示符下提供它们(手册页仅显示 OpenSSL 的顶级选项)

答案1

编辑:这是迄今为止我最受欢迎的答案,现在已经过去了几年,所以我添加了 ECDSA 变体。如果你可以使用 ECDSA,那么就应该使用。


您可以在命令行上提供所有这些信息。

一步式自签名无密码证书生成:

RSA 版本

openssl req \
    -new \
    -newkey rsa:4096 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

ECDSA 版本

openssl req \
    -new \
    -newkey ec \
    -pkeyopt ec_paramgen_curve:prime256v1 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

所有 openssl 子命令都有自己的手册页。请参阅man req


具体回答您的问题,并更明确地说明哪些选项有效:

  1. -nodes标志表示不加密密钥,因此您不需要密码。您也可以使用该-passout arg标志。请参阅PASS PHRASE ARGUMENTSopenssl(1)手册页中了解如何格式化参数。

  2. 使用-subj标志您可以指定主题(示例如上)。

答案2

-passin这个选项对你来说还不够吗?

使用file:pathname表单,您可以非常安全地使用该文件的权限 600。

答案3

接受的答案需要做一些小的修正。EC 行:

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

应该:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

在 MacOS - 通过 brew 安装的 OpenSSL 1.0.2f 上,我验证了接受的答案,如下所述

  • 列出可用的椭圆曲线:

    $ openssl ecparam -list_curves
    
  • 要生成密钥文件:

    $ openssl ecparam -name secp256k1 -out secp256k1.pem
    
  • 要生成没有密码提示的证书:

    openssl req \
        -new \
        -newkey ec:secp256k1.pem \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=US/ST=FL/L=Ocala/O=Home/CN=example.com" \
        -keyout server.key \
        -out server.crt
    
  • 查看证书:

    $ openssl x509 -noout -text -in server.crt
    

答案4

@bahamat 的回答很棒。不幸的是,某些版本的 openssl 在尝试使用一个命令创建 ECDSA 证书时会抛出错误。错误内容如下:

routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404

我正在openssl 1.0.1e-fips使用CentOS 7

使用以下 3 个命令创建证书似乎有效:

openssl ecparam -genkey -name prime256v1 -out key.pem
openssl req -new -key key.pem -out csr.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem

相关内容