web-dev-qa-db-fra.com

Autre nom de sujet manquant & ERR_SSL_VERSION_OR_CIPHER_MISMATCH

J'ai suivi cette réponse pour faire https://localhost:3000/ fonctionne en Chrome & Mac. Aujourd'hui, cela ne fonctionne plus du coup.

https://localhost:3000 donne Not Secure:

Subject Alternative Name Missing
The certificate for this site does not contain a Subject Alternative Name extension containing a domain name or IP address.

J'ai fait confiance à ce certificat en suivant les étapes précédentes, cela n'a pas aidé. Ensuite, j'ai vu cette réponse , j'ai besoin de refaire les clés SSL.

Je fais v3.ext:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

Ensuite,

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -sha256 -extfile v3.ext

Cependant, il revient

unknown option -extfile
req [options] <infile >outfile
where options  are
 -inform arg    input format - DER or PEM
 -outform arg   output format - DER or PEM
 ... ...

Quelqu'un sait-il ce qui ne va pas avec ma commande openssl?

Sinon, quelqu'un sait-il comment résoudre ce problème Subject Alternative Name Missing ou NET::ERR_CERT_COMMON_NAME_INVALID Erreur?

enter image description here

Edit 1: J'ai essayé de suivre cette réponse et voici mon example-com.conf:

[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
#   Its sort of a mashup. For example, RFC 4514 does not provide emailAddress.
[ subject ]
countryName         = Country Name (2 letter code)
countryName_default     = US

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName            = Locality Name (eg, city)
localityName_default        = New York

organizationName         = Organization Name (eg, company)
organizationName_default    = Example, LLC

# Use a friendly name here because its presented to the user. The server's DNS
#   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
#   by both IETF and CA/Browser Forums. If you place a DNS name here, then you
#   must include the DNS name in the SAN too (otherwise, Chrome and others that
#   strictly follow the CA/Browser Baseline Requirements will fail).
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default      = Example Company

emailAddress            = Email Address
emailAddress_default        = [email protected]

# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
[ x509_ext ]

subjectKeyIdentifier        = hash
authorityKeyIdentifier  = keyid,issuer

# You only need digitalSignature below. *If* you don't allow
#   RSA Key transport (i.e., you use ephemeral cipher suites), then
#   omit keyEncipherment because that's key transport.
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
#   CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
#   In either case, you probably only need serverAuth.
# extendedKeyUsage  = serverAuth, clientAuth

# Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
[ req_ext ]

subjectKeyIdentifier        = hash

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
#   CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
#   In either case, you probably only need serverAuth.
# extendedKeyUsage  = serverAuth, clientAuth

[ alternate_names ]

DNS.1       = localhost

# IPv4 localhost
IP.1       = 127.0.0.1

# IPv6 localhost
IP.2     = ::1

Ensuite, j'ai fait

openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem

Rouvrir https://localhost:3000 in Chrome me donne

localhost uses an unsupported protocol.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Quelqu'un pourrait-il aider?

19
SoftTimur

Je suggère la solution suivante: créer un certificat d'autorité de certification auto-signé et le certificat de serveur Web signé par cette autorité de certification. Lorsque vous installez cette petite chaîne sur votre serveur Web, cela fonctionnera avec Chrome.

Créez un fichier de configuration pour votre CA MyCompanyCA.cnf avec son contenu (vous pouvez le modifier selon vos besoins):

[ req ]
distinguished_name  = req_distinguished_name
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName             = Country Name (2 letter code)
countryName_min         = 2
countryName_max         = 2
stateOrProvinceName     = State or Province Name (full name)
localityName            = Locality Name (eg, city)
0.organizationName      = Organization Name (eg, company)
organizationalUnitName  = Organizational Unit Name (eg, section)
commonName              = Common Name (eg, fully qualified Host name)
commonName_max          = 64
emailAddress            = Email Address
emailAddress_max        = 64

[ root_ca ]
basicConstraints            = critical, CA:true

Créez le fichier de configuration des extensions MyCompanyLocalhost.ext pour votre certificat de serveur Web:

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]
DNS.1   = localhost
DNS.2   = mypc.mycompany.com

Exécutez ensuite les commandes suivantes:

openssl req -x509 -newkey rsa:2048 -out MyCompanyCA.cer -outform PEM -keyout MyCompanyCA.pvk -days 10000 -verbose -config MyCompanyCA.cnf -nodes -sha256 -subj "/CN=MyCompany CA"

openssl req -newkey rsa:2048 -keyout MyCompanyLocalhost.pvk -out MyCompanyLocalhost.req -subj /CN=localhost -sha256 -nodes
openssl x509 -req -CA MyCompanyCA.cer -CAkey MyCompanyCA.pvk -in MyCompanyLocalhost.req -out MyCompanyLocalhost.cer -days 10000 -extfile MyCompanyLocalhost.ext -sha256 -set_serial 0x1111

En conséquence, vous obtiendrez les fichiers MyCompanyCA.cer, MyCompanyLocalhost.cer et MyCompanyLocalhost.pvk que vous pouvez installer sur le serveur Web.

Comment vérifier qu'il fonctionne avec Chrome avant d'installer des certificats sur le serveur Web. Exécutez la commande suivante sur votre PC local pour exécuter le simulateur de serveur Web:

openssl s_server -accept 15000 -cert MyCompanyLocalhost.cer -key MyCompanyLocalhost.pvk -CAfile MyCompanyCA.cer -WWW

Ensuite, vous pouvez accéder à cette page à https: // localhost: 15000 / Vous verrez une erreur indiquant que MyCompanyLocalhost.cer n'est pas approuvé, si vous souhaitez également éliminer cette erreur - installez MyCompanyCA.cer à la liste de certificats de confiance de votre système d'exploitation.

20
Oleg

Merci Oleg pour la bonne solution. Dans mon cas, l'URI est spécifié comme une adresse IP plutôt qu'un nom d'hôte, enfin, je reçois la solution de ici .

Je modifie @ Oleg's MyCompanyLocalhost.ext, de

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]
DNS.1   = localhost
DNS.2   = mypc.mycompany.com

à

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]

DNS.1 = domain.com 
# IP address
IP.1 = 192.168.2.221
IP.2 = 127.0.0.1
2
wang yongxu