自动生成 SSL 证书

自动生成 SSL 证书

当我知道域名时,如何自动生成自签名证书?

这有效,但它会在命令行提示符上询问我一些问题。

我应该如何改变它以忽略问题并自动输入 FQDN?

#! /bin/bash

echo 01 > ca.srl
openssl genrsa -des3 -out ca-key.pem
openssl req -new -x509 -days 365 -key ca-key.pem -out ca.pem

openssl genrsa -des3 -out server-key.pem
openssl req -new -key server-key.pem -out server.csr

openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem

openssl genrsa -des3 -out client-key.pem
openssl req -new -key client-key.pem -out client.csr

echo extendedKeyUsage = clientAuth > extfile.cnf

openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -out client-cert.pem -extfile extfile.cnf

openssl rsa -in server-key.pem -out server-key.pem
openssl rsa -in client-key.pem -out client-key.pem

答案1

谢谢,我笑了。如果您知道要创建多个证书,请设置一个私有 CA。

但是,如果你坚持的话,创建自签名证书只需一行。

openssl req -newkey rsa:4096 -x509 -extensions x509_ca -keyout $HOME/ca.key -out $HOME/ca-$(date +%Y%m%d-%H%M).crt -days 3654

假设您已经正确地预先设置了 openssl.conf。

您需要通过环境变量传递 subjectAltName 值,但是,它们不能在命令行中指定。

IE:

SSLSAN="email:copy,DNS:www.example.org" openssl req …

在 openssl.conf 中:

# Global:
SSLSAN = email:copy
[req]
subjectAltName = ${ENV::SSLSAN}
[ org1_policy ]
subjectAltName          = optional

答案2

哇,这比你所需要的多多了。以下是我做的:

openssl genrsa -out /etc/ssl/private/${name}.pem 2048
openssl req -new -key /etc/ssl/private/${name}.pem -subj /CN=${name}/ -out /etc/ssl/${name}.csr
openssl x509 -req -days 3650 -in /etc/ssl/${name}.csr -signkey /etc/ssl/private/${name}.pem -out /etc/ssl/certs/${name}.pem

答案3

我认为这样做的方法是为您的 CA 创建一个单独的目录。将您的 CA 签名证书放入其中并创建配置文件,其中大多数属性已预先填写(即 O、OU、DC、备用主题等)。然后在命令行上生成提供所需配置文件名称和 FQDN 的证书。

我没有示例,但您可以在 OpenSSL 文档中找到更多详细信息。

相关内容