La catena di certificati varia a seconda della rete che utilizzo per raggiungere un'app

1

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
    
posta bethesdaboys 27.03.2017 - 17:40
fonte

2 risposte

1

Sembra che tu abbia un proxy / router / firewall non configurato correttamente o obsoleto che sta eliminando il campo SNI in la rete cattiva, ecco perché hai ricevuto un certificato * .herokuapp.com generico all'interno della rete non valida anziché il certificato dell'organizzazione.

    
risposta data 27.05.2017 - 10:18
fonte
0

A quanto pare hai un certificato con caratteri jolly *.herokuapp.com , quindi è possibile che l'applicazione sia servita da un altro host / dominio.

Devi tracciare i tuoi pacchetti, con qualcosa come wireshark per vedere dove viene stabilita la connessione TSL.

Prova questa ulteriore risoluzione dei problemi:

  1. Controlla le catene di certificati assicurati che un certificato di origine sia locale. per esempio in Windows è possibile visualizzare queste informazioni graficamente.
  2. Supponendo che l'applicazione sia accessibile tramite un browser Controlla se il tuo cliente ha una versione personalizzata di (IE, FF, Chrome), potrebbero non avere la catena Cert completa.
  3. Controlla se l'applicazione viene effettivamente pubblicata da un dominio pubblico (herokuapp.com). a volte i clienti aziendali hanno (accesso privato alle loro app), principalmente quando utilizzano il cloud ibrido.
risposta data 28.03.2017 - 03:46
fonte

Leggi altre domande sui tag