Come posso garantire che lo stunnel invii tutti i certificati CA intermedi?


13

Alcuni computer, ma non la maggior parte, stanno rifiutando il certificato SSL dal mio server web. Il problema sembra essere che alcuni computer rifiutano i certificati CA. Il problema sembra manifestarsi su Mac OS X 10.6 quando non è completamente aggiornato.

Secondo http://www.sslshopper.com/index.php?q=ssl-checker.html#hostname=beta.asana.com - non ci sono problemi.

Secondo http://certlogik.com/sslchecker/ , non vengono inviati certificati intermedi.

La mia richiesta è di Starfield Technologies, e sto usando sf_bundle.crtda qui: certs.godaddy.com/anonymous/repository.seam

Sto gestendo SSL sul mio server tramite stunnel con il seguente stunnel.conf:

cert = $CODEZ/admin/production/proxy/asana.pem
CAfile = $CODEZ/admin/production/proxy/sf_bundle.crt
pid =
client = no

[<forwarded port>]
accept = 443
connect = 8443

Qualche idea su cosa potrei fare di sbagliato?

Risposte:


17

L' CAFileopzione configura una CA da utilizzare per i certificati di autenticazione client; questo non è quello che vuoi.

Invece, si desidera creare il file certnell'opzione per contenere l'intera catena di certificati applicabile. Ti consigliamo di salvare una copia di backup di quel file, quindi crearne uno nuovo; fondamentalmente combinando i due file, formattati in questo modo:

-----BEGIN CERTIFICATE-----
(certificate from asana.pem file pasted here)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(intermediate certificate here; copy-paste the top chunk from the bundle)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(root certificate here; copy-paste the bottom chunk from the bundle)
-----END CERTIFICATE-----

Ciò costringerà lo stunnel a presentare l'intera catena di certificati ai clienti.

Un altro bocconcino; il openssl s_clientcomando è molto utile per testare i problemi della catena di certificati e controllare come il servizio presenta i propri certificati.

Modifica: Ok .. quella catena di pacchetti di certificati ha una profondità di tre, ma la catena di fiducia ha una profondità di due. Qualcosa non va.

Il certificato superiore ("Starfield Secure Certification Authority") è firmato da un emittente denominato "Starfield Class 2 Certification Authority" con un'identificazione personale che inizia con ad7e1c28.. ma il secondo certificato nel pacchetto, chiamato esattamente lo stesso del primo firmatario del certificato, che dovrebbe essere lo stesso certificato esatto, ha un'identificazione personale che inizia con 363e4734e una data di scadenza 10 anni prima. Quindi il terzo certificato (root) è il firmatario del certificato intermedio incluso .. ma nessuno di questi due ha alcuna relazione con il primo!

Se ciò non avesse senso, non preoccuparti. Riepilogo: lavoro sciatto, qualcuno ha seriamente lasciato cadere la palla costruendo questo pacchetto di certificati. La tua scommessa migliore, quindi, è esportare i file nel formato base 64 da un browser che convalida correttamente la catena, incollandoli nel formato che ho elencato da lì.

Dal momento che questo è un pasticcio confuso senza colpa tua, ho fatto un'ipotesi sul tuo nome DNS e ho afferrato il certificato e penso che questa dovrebbe essere la catena completa di cui hai bisogno: http://pastebin.com/Lnr3WHc8


Grazie, è stato molto utile! Non posso votare perché non ho i punti rep, ma vorrei :-)
Jack Stahl

@Jack Se il problema è stato risolto, si è in grado di accettare la risposta anche con un rappresentante basso. Ho modificato il post per chiarire che il pacchetto di certificati che hanno fornito è rovinato .. e dato che è un tale casino, sono andato avanti e ho messo insieme l'intera catena per te.
Shane Madden


1

Per chiunque si trovi ad affrontare questo problema, il post di Shane ha funzionato, anche se ho dovuto includere anche il CAFile. Inoltre, durante la creazione della catena, assicurarsi di seguire le istruzioni per la denominazione dei file di questo articolo

Per determinare il nome file da utilizzare, è possibile utilizzare il programma c_hash fornito con OpenSSL (nella /usr/local/ssl/miscdirectory):

c_hash some_certificate.pem
a4644b49.0 => some_certificate.pem

Quindi, nel caso sopra, si rinominerebbe il file a4644b49.0.
(Nota che è uno zero, non la lettera 'O', dopo il punto nel nome del file.)

Se non si dispone del c_hashprogramma, è possibile eseguire il comando OpenSSL appropriato per determinare il valore hash:

openssl x509 -hash -noout -in some_certificate.pem
a4644b49

E se stai affrontando questo problema bc stai provando a utilizzare websocket con Android Cordova, assicurati di aggiungere manualmente wss alle tue cose di whitelist in Cordova, poiché * include solo http e https.


L'articolo a cui ti colleghi ha un grande banner rosso nella parte superiore che riporta questa pagina deprezzata , sei sicuro che queste informazioni siano corrette, come supportate o come dovrebbero essere fatte, al momento la scrittura?
Austin,

2
Positivo, almeno solo per la parte citata. stunnel genererà un traballante a meno che non si denomini la catena di certificati come hash del file.
BrightEyed,

Inoltre, per noi non è stato necessario aggiungere .0. Grazie per la correzione ortografica a proposito, ha chiuso il post dopo una notte
lunghissima

Fantastico, felice di sentire la verifica. Capisco, sono al mio terzo lungo giorno di fila ora. (11, quindi 14 ore, oggi potrebbero essere altre 14 ore).
Austinian,

1
Eeesh, vivendo il sogno IT: D
BrightEyed
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.