Certificate 具有使用者替代名称的OpenSSL证书(版本3)
我正在使用OpenSSL命令行工具生成一个自签名证书。除了两个问题外,它似乎工作正常。我无法使用主题替代名称(关键)创建Certificate 具有使用者替代名称的OpenSSL证书(版本3),certificate,openssl,x509,pki,Certificate,Openssl,X509,Pki,我正在使用OpenSSL命令行工具生成一个自签名证书。除了两个问题外,它似乎工作正常。我无法使用主题替代名称(关键)创建.cer,我还无法确定如何创建版本3的证书(不确定这是否关键,但希望学习如何设置版本) 有人成功地做到了吗?默认配置(.cfg)文件似乎有清晰的文档(见下文): 这东西是给subjectAltName和issuerAltname的。 导入电子邮件地址。 subjectAltName=电子邮件:复制 然而,这不起作用。我的直觉是,主题替代名称没有显示在b/c中,它在V1规范中不存
.cer
,我还无法确定如何创建版本3的证书(不确定这是否关键,但希望学习如何设置版本)
有人成功地做到了吗?默认配置(.cfg
)文件似乎有清晰的文档(见下文):
这东西是给subjectAltName和issuerAltname的。
导入电子邮件地址。
subjectAltName=电子邮件:复制
然而,这不起作用。我的直觉是,主题替代名称没有显示在b/c中,它在V1规范中不存在,这就是为什么我也在追求设置版本的原因
下面是我正在使用的配置文件:
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
emailAddress = myEmail@email.com
req_extensions = v3_req
x509_extensions = v3_ca
[req_distinguished_name]
C = [Press Enter to Continue]
C_default = US
C_min = 2
C_max = 2
O = [Press Enter to Continue]
O_default = default
0.OU=[Press Enter to Continue]
0.OU_default = default
1.OU=[Press Enter to Continue]
1.OU_default = PKI
2.OU=[Press Enter to Continue]
2.OU_default = ABCD
commonName = Public FQDN of server
commonName_max = 64
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
subjectAltName = email:myEmail@email.com
issuerAltName = issuer:copy
我将其用于以下版本(emailAddress的位置不正确): 注:
- 要生成我使用的证书,请执行以下操作:
openssl req -config req.cnf -new -nodes -out req.pem -x509
- 我没有看到
有多大用处(如果有,我想知道在哪里)issueratname
- 对于
,不建议使用authorityKeyIdentifier
issuer:always
- 使用
现在可以使用email:copy
subjectAltName
部分是多余的(以及v3_请求
行)req_扩展
命令行开关这里是简单的步骤 生成CSR时,应使用
-config
和-extensions
在生成证书时,您应该使用-extfile
和-extensions
以下是一个例子:
openssl-req-new-nodes-keyout-test.key-out-test.csr-days 3650-subc”/C=US/ST=SCA/L=SCA/O=Oracle/OU=Java/CN=test cert-config/etc/pki/tls/openssl.cnf-extensions v3_-req
openssl x509-req-days 3650-in test.csr-CA cacert.pem-CAkey rootCA.key-CAcreateserial-out test.pem-extfile/etc/pki/tls/openssl.cnf-extensions v3_-req
希望这有帮助我刚刚开发了一个基于表单输入自动生成此命令并显示输出的程序
更新:请参阅 它变得如此受欢迎,以至于我改进了它,并以它自己的域名发布了它 它不仅提供可下载的.csr,还提供用于生成它的openssl命令,以及所需的openssl.cnf配置选项 示例: OpenSSL命令
#generate the RSA private key
openssl genpkey -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out priv.key
#Create the CSR
openssl req -new -nodes -key priv.key -config csrconfig.txt -out cert.csr
OpenSSL CSR配置
[ req ]
default_md = sha256
prompt = no
req_extensions = req_ext
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
commonName = example.com
countryName = US
stateOrProvinceName = Louisiana
localityName = Slidell
organizationName = Acme Inc.
[ req_ext ]
keyUsage=critical,digitalSignature,keyEncipherment
extendedKeyUsage=critical,serverAuth,clientAuth
subjectAltName = @alt_names
[ alt_names ]
IP.0 = 1.1.1.1
IP.1 = 2.2.2.2
DNS.0 = server1.example.com
DNS.1 = server2.example.com
email.0 = email1@example.com
email.1 = email2@example.com
配置文件中的条目
subjectAltName
需要v3_-req
openssl x509 ... -extfile openssl.cnf -extensions v3_req
将把SAN插入证书。我知道这个线程有点旧,但为了防止它在windows上对任何人都有效,请检查文件是否为UTF-8编码,在我的情况下,我收到一个错误,表明.cnf文件有错误,所以我在记事本上打开了它++将文件编码设置为UTF-8,保存并运行openssl逗号第二次,它成功了。好吧,这页上的其他答案对我都不起作用,我尝试了所有答案。对我起作用的是一个小把戏: 申请证书时:
-config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER")) \
-reqexts SAN
-extfile <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER")) \
-extensions SAN
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name localhost:443;
ssl_certificate /etc/ssl/certs/Some-Server.crt;
ssl_certificate_key /etc/ssl/private/Some-Server.key;
ssl_dhparam /etc/ssl/certs/https-dhparam.pem;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
然后,我们可以验证受试者备选名称是否在最终证书中:
openssl x509 -in Some-Server.crt -text -noout
相关章节为:
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:Some-Server
这是一个证书,只要您在浏览器中安装证书颁发机构,每个主要浏览器(包括chrome)都会接受它。这是您需要安装的ca-cert.crt
以下是允许您使用证书的nginx配置示例:
-config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER")) \
-reqexts SAN
-extfile <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER")) \
-extensions SAN
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name localhost:443;
ssl_certificate /etc/ssl/certs/Some-Server.crt;
ssl_certificate_key /etc/ssl/private/Some-Server.key;
ssl_dhparam /etc/ssl/certs/https-dhparam.pem;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
我参考了几页,其中最重要的帮助来自1、2(请参阅user40662的答案)和3.Raghu K Nair关于命令使用的答案 然后我成功的尝试: san.cnf
[ req ]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
countryName = CN # C=
stateOrProvinceName = Shanghai # ST=
localityName = Shanghai # L=
#postalCode = 200000 # L/postalcode=
#streetAddress = "My Address" # L/street=
organizationName = My Corporation # O=
organizationalUnitName = My Department # OU=
commonName = myname.mysoftware.mycorporation.com # CN=
emailAddress = myname@example.com # CN/emailAddress=
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = myname.mysoftware.mycorporation.com
#DNS.2 = other2.com
#DNS.3 = other3.com
命令:
openssl req -x509 -nodes -days 365 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=My Corporation/OU=My Department/CN=myname.mysoftware.mycorporation.com/emailAddress=myname@example.com" -keyout privateKey.pem -out certificate.crt -config san.cnf -extensions v3_req
!/bin/dash
#步骤1-3显示了如何使用openssl创建证书请求
#这包括受试者的备选名称。
#在创建自己的CA的罕见情况下,请执行步骤4-6
#演示如何使用openssl创建CA,然后使用该CA
#根据请求创建证书。
#步骤1:创建OpenSSL配置文件
#指定主题替代名称的步骤
回显;回显“步骤1”
cat>foo.cnf Nice脚本在除android之外的任何地方都可以使用。=(当您尝试安装crt时,android会出现以下错误“需要安装私钥”@杰克·戴维森:你的脚本似乎有/bin/bash
风格的输入重定向。例如:-config上面,不要在-config'@rgov中加单引号-谢谢你注意到了这一点。我更新了answerVery不错的解决方案,CA密码只在密钥创建过程中使用,然后被丢弃。更安全,谢谢!我尝试过了,这是可行的,但是使用节点
选项(步骤4)生成的CA留下了一个打开的安全漏洞,我认为…@Will59-未加密的私钥是否是“安全漏洞”取决于(IMO)脚本中的注释清楚地说明了-nodes
的后果。如果您需要加密的私钥,请根据需要进行调整。如果您正在创建自己的CA,希望您有足够的背景知识来理解