Abbiamo creato un'applicazione su Heroku.com per un cliente aziendale e quando il cliente raggiunge il sito tramite la normale rete interna, riceve un avviso di certificato SSL nel proprio browser, tuttavia, se utilizzano la propria rete WiFi ospite, non ottieni l'errore, e chiunque altro raggiunga il sito da una rete esterna all'edificio non ottiene neanche l'errore.
L'errore è:
The certificate is only valid for the following names: *.herokuapp.com, herokuapp.com
Error code: SSL_ERROR_BAD_CERT_DOMAIN
Sebbene il supporto tecnico di Heroku sia stato reattivo, non sono stati in grado di trovare il problema, quindi ci sto provando.
Quando eseguo openssl su entrambe le reti "buone" e "cattive", ottengo un certificato diverso per il certificato "0" (primo) nella catena, è come se ci fossero due certificati o in qualche modo hanno configurato erroneamente i certificati, ma non siamo sicuri di come siano stati mal configurati e perché funzionerebbe del tutto se questo fosse il caso. Perché il client dovrebbe vedere una catena di certificati diversa solo perché si trova su una rete diversa?
Alcune persone hanno affermato che ciò è causato da un proxy di riscrittura dei certificati sulla rete aziendale, ma il client mi ha detto che non eseguono la riscrittura dei cert.
Diagnostica
L'output del mio comando di diagnostica:
openssl s_client -showcerts -servername foo.bar.com -connect foo.bar.com:443
Output di rete errato
Ecco l'output sulla rete "cattiva" (ho corretto i dati specifici):
> 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
Buona uscita di rete
Ecco l'output sulla rete "buona":
> 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