我正在使用OpenSSL命令行工具生成自签名证书。除了两个问题外,它似乎工作正常。我无法用主题备用名称(关键)创建一个.cer,而且我还无法弄清楚如何创建版本3的证书(不确定这是否很关键,但希望学习如何设置版本)。
有人成功做到了吗?默认的配置(.cfg)文件看似清晰的文档(如下所示):
“这些东西用于subjectAltName和issuerAltname。导入电子邮件地址。subjectAltName = email:copy“
但是这不起作用。我的直觉是主题替代名称未显示为b / c,而在V1规范中不存在,这就是为什么我也追求设置他的版本。
这是我正在使用的配置文件:
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
emailAddress = [email protected]
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:[email protected]
issuerAltName = issuer:copy
这是您的简单步骤
[生成CSR时,您应该使用-config和-extensions在生成证书时,应使用-extfile和-extensions
这里是示例
openssl req -new -nodes -keyout test.key -out test.csr -days 3650 -subj "/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
希望这会有所帮助
我知道它可以与以下版本一起使用(emailAddress的位置不正确):
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
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
emailAddress = [Press Enter to Continue]
emailAddress_default = [email protected]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
subjectAltName = email:[email protected]
issuerAltName = issuer:copy
注意:
要生成我使用的证书:
openssl req -config req.cnf -new -nodes -out req.pem -x509
issuerAltname
没多大用处(如果有的话,我想知道在哪里)。issuer:always
不建议使用authorityKeyIdentifier
。email:copy
与subjectAltName
一起使用。v3_req
部分是多余的(以及req_extensions
行。[好,此页面上的其他答案都没有对我有用,我尝试了其中的每一个答案。对我有用的是一个小把戏:
请求证书时:
-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
因此,不要混淆,这里有一个工作脚本,从一开始就涵盖了所有内容,包括创建证书颁发机构:
# if the server name is undefined, lets default to 'Some-Server'
SERVER="${SERVER:-Some-Server}"
CORPORATION=My-Corp
GROUP=My-Corporate-Group
CITY=City
STATE=State
COUNTRY=US
CERT_AUTH_PASS=`openssl rand -base64 32`
echo $CERT_AUTH_PASS > cert_auth_password
CERT_AUTH_PASS=`cat cert_auth_password`
# create the certificate authority
openssl \
req \
-subj "/CN=$SERVER.ca/OU=$GROUP/O=$CORPORATION/L=$CITY/ST=$STATE/C=$COUNTRY" \
-new \
-x509 \
-passout pass:$CERT_AUTH_PASS \
-keyout ca-cert.key \
-out ca-cert.crt \
-days 36500
# create client private key (used to decrypt the cert we get from the CA)
openssl genrsa -out $SERVER.key
# create the CSR(Certitificate Signing Request)
openssl \
req \
-new \
-nodes \
-subj "/CN=$SERVER/OU=$GROUP/O=$CORPORATION/L=$CITY/ST=$STATE/C=$COUNTRY" \
-sha256 \
-extensions v3_req \
-reqexts SAN \
-key $SERVER.key \
-out $SERVER.csr \
-config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER")) \
-days 36500
# sign the certificate with the certificate authority
openssl \
x509 \
-req \
-days 36500 \
-in $SERVER.csr \
-CA ca-cert.crt \
-CAkey ca-cert.key \
-CAcreateserial \
-out $SERVER.crt \
-extfile <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER")) \
-extensions SAN \
-passin pass:$CERT_AUTH_PASS
然后我们可以验证主题替代名称是否在最终证书中:
openssl x509 -in Some-Server.crt -text -noout
相关部分是:
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:Some-Server
所以成功了!只要您在浏览器中安装证书颁发机构,此证书就会被所有主流浏览器(包括chrome)接受。那就需要安装ca-cert.crt。
这是ngnx的示例配置,允许您使用证书:
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;
}
}
您使用什么命令发出CSR证书请求?您使用了什么命令来制作证书文件?您知道针对不同情况的不同答案。
也许你不放
subjectAltName =电子邮件:副本
在本节中
[v3_req]
也许您正在使用openssl x509生成证书,如果必须,请使用
-extfile /etc/pki/tls/openssl.cnf
因为没有它,它不使用您的配置文件
您可能还需要
-扩展v3_req
命令行开关
我刚刚开发了一个基于Web的工具,该工具将根据表单输入自动生成此命令并显示输出。 http://kernelmanic.com/certificate-request-generator-with-multiple-common-names-and-subject-alternative-names/
v3_req
是必需的,配置文件中的条目subjectAltName
。命令
openssl x509 ... -extfile openssl.cnf -extensions v3_req
将SAN插入证书。
我知道该线程有些旧,但以防万一它适用于Windows上的任何人,请检查该文件是否为UTF-8编码,在我的情况下,我收到一个错误消息,指示.cnf文件存在错误,因此,我在Notepad ++上将其打开,将文件编码设置为UTF-8,保存并再次运行openssl命令,它成功了。
我参考了几页,最重要的帮助来自于1. https://geekflare.com/san-ssl-certificate/,2。https://certificatetools.com/(请参阅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 = [email protected] # 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/[email protected]" -keyout privateKey.pem -out certificate.crt -config san.cnf -extensions v3_req