No se puede deshacer del error `net :: ERR_CERT_COMMON_NAME_INVALID` en Chrome con certificados autofirmados

19

Existen numerosas preguntas en la web en las que las personas tienen dificultades para configurar certificados autofirmados para su uso en la red interna.

Solo para vincular algunos:
Hacer que Chrome acepte el certificado localhost autofirmado
Chrome acepte el certificado localhost autofirmado
Generar un certificado autofirmado con openssl que funcione en Chrome 58
Error de certificado StartCom ERR_CERT_AUTHORITY_INVALID

He revisado todos y cada uno de ellos, pero todavía no puedo deshacerme del (net::ERR_CERT_COMMON_NAME_INVALID).error.

Pasos seguidos:

  • generación de claves y certificados en el servidor

    openssl req \          
    -newkey rsa:2048 \
    -x509 \
    -nodes \
    -keyout file.key \
    -new \
    -out file.crt \
    -subj /CN=Hostname \
    -reqexts SAN \
    -extensions SAN \
    -config <(cat /etc/ssl/openssl.cnf \
        <(printf '[SAN]\nsubjectAltName=DNS:192.168.0.1')) \
    -sha256 \
    -days 3650
    
  • configurar el proceso del servidor (apache) para usar el certificado recién generado y el archivo de clave para conexiones seguras

  • exportar el archivo de certificado del servidor al cliente navegando a https://192.168.0.1:3122 a través de Chrome Dev Tools y usando la opción Exportar
  • Agregar CA a la lista de Autoridades de Certificación conocidas (en Fedora 26) usando
    • certutil
    • sudo cp file.crt /etc/pki/ca-trust/source/anchors; sudo upate-ca-trust
  • reiniciar cromo

También he intentado varios valores para el CNcampo de arriba como: hostname, common.name.com, Common Name,192.168.0.1

Incluso después de todo esto, el error persiste cuando navego a https://192.168.0.1:3122 y ya no sé lo que estoy haciendo.

La representación del texto es similar a:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            9e:ae:33:24:3a:2d:2b:e2
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = Hostname
        Validity
            Not Before: Oct 28 20:18:06 2017 GMT
            Not After : Oct 26 20:18:06 2027 GMT
        Subject: CN = Hostname
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a4:80:6c:3a:1b:5e:c4:e6:f6:7d:a5:be:d6:cd:
                    d9:23:bd:1a:b1:e6:f1:e3:b0:76:47:37:a3:d8:b0:
                    60:44:23:c3:8a:58:1c:c3:0a:99:3d:42:32:ca:8b:
                    ec:31:9d:a8:df:6c:13:43:e6:78:12:b8:24:04:5a:
                    9f:6e:11:24:2a:56:e3:20:36:78:a4:cc:ed:45:7c:
                    a3:c1:36:7b:25:f6:6b:2d:01:59:02:74:8b:7a:13:
                    ec:83:63:90:2e:a0:a3:aa:23:de:ea:f0:8e:1f:99:
                    b9:50:b1:5f:64:e4:c9:91:c0:0c:56:15:3c:c0:ff:
                    0f:bf:e1:af:7a:bf:51:40:37:b0:34:20:95:a1:05:
                    14:k2:35:20:e8:98:48:65:ad:26:cc:de:a2:50:48:
                    77:8c:e2:7a:d5:bd:83:96:86:ef:20:79:2f:15:a3:
                    07:48:f4:1f:c7:9d:a1:4b:bd:ee:47:83:51:f3:09:
                    27:ed:b7:09:c8:56:40:0c:68:25:92:d8:62:dc:14:
                    6c:fa:f1:e3:93:1b:79:3c:58:9c:53:69:ff:6a:0f:
                    ee:4c:9f:8e:22:2d:62:6b:b3:ae:22:d6:e3:d0:bd:
                    06:43:a7:c3:e1:1e:23:07:61:b0:4e:64:14:92:0c:
                    5b:f1:a8:c5:29:67:64:7d:65:10:b9:60:41:b8:3b:
                    1y:1f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:192.168.0.1
    Signature Algorithm: sha256WithRSAEncryption
         11:65:6d:86:04:7f:5a:b0:ce:b2:6e:95:7e:03:8c:fe:a9:d0:
         81:2c:6f:50:63:2e:91:77:79:cd:27:32:b0:19:2b:ac:ea:c0:
         4b:f7:56:d9:be:34:54:f1:a6:1d:bc:d0:3b:bb:bf:90:0e:2d:
         1d:83:28:97:8e:f8:37:5d:3e:00:5a:cd:3d:36:5d:c4:5d:a8:
         7e:a4:59:f0:91:3d:af:3d:28:03:3e:78:3b:5b:0a:fb:24:34:
         02:a2:09:ec:d6:0c:58:63:ab:69:26:5e:fe:1d:1f:19:54:0f:
         68:4e:31:f9:de:1e:de:86:81:3f:b7:62:c5:67:02:05:a2:7a:
         03:f4:b5:3b:ba:c4:ba:26:8e:a2:ee:1c:ef:69:63:07:b0:97:
         fd:a8:42:e2:11:6d:de:b5:70:a5:4a:62:d2:62:d9:5b:17:f4:
         d5:cd:6f:71:75:dd:35:33:55:52:2e:30:29:f8:42:ec:b9:d3:
         82:85:a1:e7:f6:f5:90:dd:cb:07:15:a7:44:70:1c:93:e6:ec:
         03:3a:be:41:87:3c:f0:a4:88:a5:65:d9:29:2c:78:de:90:b8:
         6a:8b:99:6e:d0:e5:8c:08:a4:71:51:fd:1d:e1:8c:0c:17:d5:
         b0:31:fc:7f:99:23:dd:1a:c4:0b:45:17:68:88:67:c6:22:df:
         2b:ac:ea:c0

Tenga en cuenta que esta es la primera vez que configuro certificados SSL / TLS para tales fines. Por favor, consejos sobre cómo deshacerse del error.

Ashesh Kumar Singh
fuente
Agregue una representación de texto de su certificado a su pregunta. Uso openssl x509 -noout -text -in <filename>.
garethTheRed
He agregado la representación de texto.
Ashesh Kumar Singh
Creo que Chrome espera que la dirección IP se codifique como dirección IP en la extensión SAN, no como un nombre DNS.
Crypt32

Respuestas:

25

Chrome 58+ ya no coincide con el Nombre común ( CN) en los certificados.

Ahora utiliza nombres alternativos de sujeto ( SAN) en su lugar.

SANdebe contener apropiado DNSo IPentrada.

  • Cuando se utiliza DNS, debe ser un nombre FQDN resoluble.
  • Cuando se usa una dirección IP, debe especificarse explícitamente como tal dentro de la SANcadena.

Dicho esto, esto debería funcionar:

openssl req \
-newkey rsa:2048 \
-x509 \
-nodes \
-keyout file.key \
-new \
-out file.crt \
-subj /CN=Hostname \
-reqexts SAN \
-extensions SAN \
-config <(cat /etc/ssl/openssl.cnf \
    <(printf '[SAN]\nsubjectAltName=DNS:hostname,IP:192.168.0.1')) \
-sha256 \
-days 3650
krisFR
fuente
1
Específicamente, esto se debe a tools.ietf.org/html/rfc6125#section-5.7.3.1 que establece "Para la autenticación TLS con certificados X.509, una identidad del espacio de nombres DNS DEBE verificarse con cada extensión subjectAltName del tipo dNSName presente en el certificado. Si no existe tal extensión, entonces la identidad DEBE ser comparada con el Nombre Común (más específico) en el campo Asunto del certificado ". Por lo tanto, si existe alguna SAN, no se verifica el CN.
Jason Martin
77
Corrígeme si me equivoco, pero Chrome ya no acepta certificados que recurran al nombre común. Entonces, incluso si no existe una SAN, el CN ​​no se verifica. Entonces la SAN parece obligatoria.
krisFR
@krisFR tiene razón porque ya probé con certificados sin la extensión SAN que falló. Especificar el campo de IP fue la solución.
Ashesh Kumar Singh
1
Salvavidas Para cualquiera que esté probando esto en Windows, Cygwin viene con una copia de openssl.cnf aquí:. \ Cygwin \ etc \ defaults \ etc \ pki \ tls \ Además, tuve que cambiar mi CN = hostname y DNS: hostname lines para ser localhost en lugar de hostname
abelito
Funcionó perfectamente! Tuve que agregar el certificado con este procedimiento: corvil.com/kb/…
yota