Hemos creado una aplicación en Heroku.com para un cliente empresarial, y cuando el cliente llega al sitio a través de su red interna normal, recibe una advertencia de certificado SSL en su navegador, sin embargo, si utilizan su red WiFi de invitado, no reciba el error, y cualquiera que llegue al sitio desde una red fuera del edificio tampoco recibirá el error.
El error es:
The certificate is only valid for the following names: *.herokuapp.com, herokuapp.com
Error code: SSL_ERROR_BAD_CERT_DOMAIN
Aunque el soporte técnico de Heroku ha respondido, no han podido encontrar el problema, así que lo estoy intentando aquí.
Cuando ejecuto openssl en las redes "buenas" y en las redes "malas", obtengo un certificado diferente para el certificado "0" (primero) en la cadena, es como si hubiera dos certificados o si de alguna manera malinterpretado los certificados, pero no estamos seguros de cómo se han configurado mal, y por qué funcionaría si ese fuera el caso. ¿Por qué el cliente vería una cadena de certificados diferente solo porque están en una red diferente?
Algunas personas han dicho que esto se debe a un proxy de reescritura de certificados en la red corporativa, pero el cliente me ha dicho que no reescribe el certificado.
Diagnóstico
La salida de mi comando de diagnóstico:
openssl s_client -showcerts -servername foo.bar.com -connect foo.bar.com:443
Salida de red incorrecta
Aquí está la salida en la red 'mala' (he redactado datos específicos):
> CONNECTED(00000003) depth=1 /C=US/O=DigiCert
> Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
> verify error:num=20:unable to get local issuer certificate verify
> return:0
> --- Certificate chain 0 s:/C=US/ST=California/L=San Francisco/O=Heroku, Inc./CN=*.herokuapp.com i:/C=US/O=DigiCert
> Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
> -----BEGIN CERTIFICATE----- xxxx
> -----END CERTIFICATE----- 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
> i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High
> Assurance EV Root CA
> -----BEGIN CERTIFICATE----- xxxx
> -----END CERTIFICATE-----
> --- Server certificate subject=/C=US/ST=California/L=San Francisco/O=Heroku, Inc./CN=*.herokuapp.com issuer=/C=US/O=DigiCert
> Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
> --- No client certificate CA names sent
> --- SSL handshake has read 2745 bytes and written 458 bytes
> --- New, TLSv1/SSLv3, Cipher is AES128-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion:
> NONE SSL-Session:
> Protocol : TLSv1
> Cipher : AES128-SHA
> Session-ID: xxx
> Session-ID-ctx:
> Master-Key: xxx
> Key-Arg : None
> Start Time: 1490624709
> Timeout : 300 (sec)
> Verify return code: 0 (ok)
> --- DONE
Buena salida de red
Aquí está la salida en la red 'buena':
> CONNECTED(00000003) depth=1 /C=US/O=Symantec Corporation/OU=Symantec
> Trust Network/CN=Symantec Class 3 Secure Server CA - G4 verify
> error:num=20:unable to get local issuer certificate verify return:0
> --- Certificate chain 0 s:/C=US/ST=Maryland/L=xxx/O=xxx/OU=Headquarters/CN=foo.bar.com
> i:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec
> Class 3 Secure Server CA - G4
> -----BEGIN CERTIFICATE----- xxx
> -----END CERTIFICATE----- 1 s:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 Secure
> Server CA - G4 i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust
> Network/OU=(c) 2006 VeriSign, Inc. - For authorized use
> only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
> -----BEGIN CERTIFICATE----- xxx
> -----END CERTIFICATE-----
> --- Server certificate subject=/C=US/ST=xxx/L=xxx/O=xxx./OU=Headquarters/CN=foo.bar.com
> issuer=/C=US/O=Symantec Corporation/OU=Symantec Trust
> Network/CN=Symantec Class 3 Secure Server CA - G4
> --- No client certificate CA names sent
> --- SSL handshake has read 3069 bytes and written 458 bytes
> --- New, TLSv1/SSLv3, Cipher is AES256-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion:
> NONE SSL-Session:
> Protocol : TLSv1
> Cipher : AES256-SHA
> Session-ID: xxx
> Session-ID-ctx:
> Master-Key: xxx
> Key-Arg : None
> Start Time: 1490624583
> Timeout : 300 (sec)
> Verify return code: 0 (ok)
> --- DONE