如何在 openssl cli 中指定 subjectAltName?

如何在 openssl cli 中指定 subjectAltName?

我正在生成自签名 SSL 证书:

$ openssl req -x509 -newkey rsa:2048 -subj 'CN=example.com'

我想指定一个主题替代名称同样在创建时,但我在 openssl 手册页中找不到有关如何执行此操作的信息。

答案1

尝试将 subjectAltName 写入临时文件(我将其命名为主机文本文件) 喜欢

basicConstraints=CA:FALSE
extendedKeyUsage=serverAuth
subjectAltName=email:[email protected],RID:1.2.3.4

并通过“-extfile”选项在 openssl 命令中链接到它,例如:

openssl ca -days 730 -in hostreq.pem -out -hostcert.pem -extfile hostextfile

答案2

openssl命令不提供在不先编写配置文件的情况下包含 subjectAltName 等扩展的方法。我编写了一个简单的实用程序,可以自动完成所有操作。它可以在 github 上找到:https://github.com/rtts/certify

使用示例:

./certify example.com www.example.com mail.example.com

这将创建一个名为的文件example.com.crt,其中包含具有 example.com、www.example.com 和 mail.example.com 的主题备用名称的证书。

答案3

使用 SubjectAltName 创建自签名证书

cd /etc/ssl

cat > my.conf <<- "EOF"
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C=UA
ST=Dnepropetrovskaya
L=Kamyanske
O=DMK
OU=OASUP
emailAddress=webmaster@localhost
CN = www.dmkd.dp.ua

[ req_ext ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[ alt_names ]
DNS.0 = www.dmkd.dp.ua
DNS.1 = dmkd.dp.ua

EOF

# Create key
openssl genrsa -des3 -out server.key.secure 2048
# Disable secret phrase for key
openssl rsa -in server.key.secure -out server.insecure.key
# Create request certificate file with params from file my.conf
openssl req -new -key server.insecure.key -out server.csr -config my.conf
# Create certificate with params from file my.conf
openssl x509 -req -days 365 -in server.csr -signkey server.insecure.key -out server.crt -extensions req_ext -extfile my.conf
# Check request file and certificate for SubjectAltName precense
openssl req -text -noout -in server.csr
openssl x509 -in server.crt -text -noout

答案4

我在这里使用了信息,但将其精简为仅满足浏览器所需的信息。

x509 v3 扩展选项文件:

echo "subjectAltName = @alt_names

[alt_names]
DNS.1 = www.example.com" > v3.ext

外部密钥文件:

openssl genrsa -out www.example.com.key 2048

CA 签名请求:(假设您拥有 CA 密钥和证书)

openssl req -new -key www.example.com.key -subj "/CN=www.example.com" -out www.example.com.csr

签署创建证书的请求,并包含 x509 扩展数据:

openssl x509 -req -in www.example.com.csr -CA ca.example.com.crt -CAkey ca.example.com.key -CAcreateserial -out www.example.com.crt -days 500 -sha256 -extfile v3.ext

相关内容