具有主题备用名称的OpenSSL证书(版本3)

|| 我正在使用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        = 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
    
已邀请:
        这是适合您的简单步骤 生成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 = myEmail@email.com

[ 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
笔记: 生成我使用的证书:
openssl req -config req.cnf -new -nodes -out req.pem -x509
issuerAltname
没什么用(如果有的话,我想知道在哪里)。 建议不要将
authorityKeyIdentifier
使用
issuer:always
。 现在使用
email:copy
可以与ѭ8works一起使用。
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 = email:copy 在本节中 [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           = 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
    

要回复问题请先登录注册