come fare in modo che Gnu / Linux si fidi di un certificato considerato affidabile da Windows?


11

Esiste un server con una catena SSL rotta, come riportato da questo controllo SSL :

Rapporto di controllo SSL

So che questo è un problema che dovrebbe essere risolto sul server stesso, ma a volte è difficile da risolvere (non sono l'amministratore del server).

Il fatto è che Chrome / Mozilla / Edge su Windows si fidano comunque del certificato del sito :

inserisci qui la descrizione dell'immagine

Tuttavia, in una distribuzione Gnu / Linux (Ubuntu 18.04 in Docker) il certificato non è attendibile:

curl: (60) SSL certificate problem: unable to get local issuer certificate

Ho provato update-ca-certificatese persino importato il certificato radice di Globalsign. update-ca-certificatesha riferito un certificato duplicato in quel caso. Comunque, niente funziona.

Come riprodurre

Utilizzando Docker:

docker run -it ubuntu:18.04

# within container:
apt-get update
apt-get -y install curl
curl https://betriebsheft.vog.it  # <---- "unable to get local issuer certificate"

Come posso fare in modo che Gnu / Linux si fidi di questo certificato?

PS: lo stesso certificato è distribuito correttamente su un altro server .


perché il downvote?
Udo G,

1
Sto votando per chiudere questa domanda come fuori tema perché l'OP sta chiedendo qualcosa che non può influenzare se stesso. Ha detto che non può modificare nulla sul lato server , quindi questo probabilmente appartiene al superutente credo, poiché descrive un problema senza soluzione lato client.
LinuxSecurityFreak

2
Chiedo specificamente una soluzione lato client . Non posso influenzare il server, ma ho il pieno controllo del client O / S (Ubuntu) e voglio che questa specifica installazione O / S si fidi del certificato proprio come fanno gli altri O / S (Windows). Non si tratta di riparare il sito HTTPS per gli altri.
Udo G,


1
Non controlli il server, ma puoi comunque segnalare il problema alla persona che controlla il server.
Michael Hampton,

Risposte:


11

La vera soluzione è garantire che il server presenti tutti i certificati nella catena e non solo il certificato dell'entità finale (server).

Indirizzare l'amministratore del server a RFC 5246 Sezione 7.4.2 che indica chiaramente che questo messaggio trasmette la catena di certificati del server al client.


Se il tuo amministratore rifiuta / non può farlo per qualche motivo, la tua opzione alternativa è quella di provare a metterti curlal lavoro con la stretta di mano non corretta.

Secondo un messaggio sulla mailing list di Curl:

Qualcuno può confermare se cURL supporta (o meno) il certificato intermedio?

Sì lo fa. Tutti i certificati ca hanno una catena di certificati che sale alla radice. Il fascio ca che usi con l'arricciatura deve essere composto dai certs per l'intera catena.

/ daniel.haxx.se

Dovresti essere in grado di aggiungere la CA principale e tutti i certificati intermedi a un bundle e puntare curlad essa utilizzando l' --cacert <file>opzione.

Mentre i browser funzionano, è possibile accedere ai certificati CA corretti da lì. Nella scheda certificati (diversa per ciascun browser, ma sono sicuro che lo scoprirai), visualizza la catena di certificati. Fare doppio clic sul CA principale prima Globalsign Root CA - G1 e il Dettagli scheda, fare clic su Copia su file ... . Salva come root.cer. Fai lo stesso con AlphaSSL CA - SHA256 - G2 e salvalo come issuing.cer. Unisci i due insieme in un unico file (ad esempio chain.cer) e usalo come argomento per -cacert.

Come gentilmente sottolineato da @AB, il certificato mancante può essere trovato anche qui .


I browser funzionano perché memorizzano nella cache certificati CA. Se in passato hai navigato verso un sito Web correttamente configurato, il cui certificato è stato emesso dalla stessa CA del certificato del tuo server, verrà memorizzato nella cache dal browser. Quando successivamente visiti il ​​tuo sito configurato in modo errato, il browser utilizzerà i certificati CA nella sua cache per creare la catena. A te sembra che tutto vada bene, anche se dietro le quinte il server non è configurato correttamente.

Nota che su Windows, IE / Edge e Chrome condividono la stessa cache, mentre Firefox ne utilizza una propria.

Oltre a quanto sopra, IE / Edge e Chrome (in quanto condividono lo stesso stack crittografico) utilizzeranno un'estensione all'interno dei certificati denominata AuthorityInformationAccess . È disponibile un'opzione caIssuer che fornisce un URL da cui è possibile scaricare il certificato CA del certificato dell'entità finale. Pertanto, anche se uno di questi browser non ha memorizzato nella cache i certificati mancanti dalla precedente navigazione, può recuperarlo se necessario. Si noti che Firefox non lo fa, motivo per cui a volte Firefox può mostrare errori di certificato quando IE / Edge e Chrome sembrano funzionare.


1
Non è il mio server, quindi non posso modificare nulla sul lato server. Ho provato a utilizzare il bundle CA da curl.haxx.se/docs/caextract.html (poiché Firefox si fida del certificato) e lo passa usando --cacert cacert.pemma CURL non accetta ancora il certificato.
Udo G,

1
Si è il server. Esegui echo q | openssl s_client -showcerts -connect betriebsheft.vog.it:443e vedrai solo un certificato presentato dal tuo server. Dovrebbero essercene due: il certificato dell'entità finale (che viene presentato) e la CA di emissione - Alpha SSL - SHA256 - Certificato G2. Quest'ultimo non viene inviato dal server, ma dovrebbe.
garethTheRed,

2
@garethTheRed: Capisco che il server non presenta tutti i certificati, ma il server non è sotto il mio controllo (questo è ciò che intendevo con "non il mio server"). Sto solo cercando di accedere a un'API su un server esterno. Sotto Windows, nessuno dei miei browser si lamenta del certificato, solo Linux / Debian / Ubuntu.
Udo G,

@AB: grazie mille! L'installazione di tutti i certificati radice da quella pagina ha risolto il problema . Tuttavia, vorrei capire perché è necessario quel passaggio manuale.
Udo G,

2
Il certificato intermedio mancante (come menzionato da @garethTheRed) è disponibile qui: support.globalsign.com/customer/portal/articles/… . Inizialmente, OP ha solo tentato di aggiungere il certificato radice che probabilmente era già in atto, ottenendo così nulla.
AB,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.