Jak mogę się upewnić, że stunnel wysyła wszystkie pośrednie certyfikaty CA?


13

Kilka komputerów, ale nie większość, odrzuca certyfikat SSL z mojego serwera. Problem polega na tym, że niektóre komputery odrzucają certyfikaty CA. Problem pojawia się w systemie Mac OS X 10.6, gdy nie jest w pełni zaktualizowany.

Według http://www.sslshopper.com/index.php?q=ssl-checker.html#hostname=beta.asana.com - nie ma problemu.

Według http://certlogik.com/sslchecker/ , nie są wysyłane żadne pośrednie certyfikaty.

Mój certyfikat pochodzi od Starfield Technologies i używam sf_bundle.crtstąd: certs.godaddy.com/anonymous/repository.seam

Obsługuję SSL na moim serwerze za pomocą stunnel z następującymi funkcjami 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

Jakieś pomysły, co mogę robić źle?

Odpowiedzi:


17

Ta CAFileopcja konfiguruje urząd certyfikacji do użycia dla certyfikatów uwierzytelniania klienta; nie tego chcesz.

Zamiast tego chcesz utworzyć plik w certopcji, aby zawierał cały odpowiedni łańcuch certyfikatów. Będziesz chciał zapisać kopię zapasową tego pliku, a następnie utwórz nową; w zasadzie łącząc dwa pliki, sformatowane w ten sposób:

-----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-----

Zmusi to stunnel do przedstawienia klientom pełnego łańcucha certyfikatów.

Jeszcze jeden smakołyk; openssl s_clientkomenda jest bardzo przydatna do badania kwestii łańcucha certyfikatów i sprawdzanie jak usługa prezentuje swoje certyfikaty.

Edycja: Ok .. łańcuch pakietu certyfikatów ma trzy głębokości, ale łańcuch zaufania wygląda na dwie głębokości. Cos jest nie tak.

Najwyższy certyfikat („Starfield Secure Certification Authority”) jest podpisany przez wystawcę o nazwie „Starfield Class 2 Certification Authority” odciskiem palca zaczynającym się od ad7e1c28… ale drugi certyfikat w pakiecie, nazwany dokładnie tak samo jak podpisujący pierwszy certyfikat, który powinien być dokładnie tym samym certyfikatem, odciskiem palca rozpoczynającym się od 363e4734, a data ważności 10 lat wcześniej. Zatem trzeci (root) cert jest sygnatariuszem dołączonego certyfikatu pośredniego .. ale żadne z tych dwóch nie ma żadnego związku z pierwszym!

Jeśli to nie miało sensu, nie martw się. Podsumowanie: niechlujna praca, ktoś poważnie upuścił piłkę, budując ten pakiet certyfikatów. Najlepszym rozwiązaniem jest więc wyeksportowanie plików w formacie base-64 z przeglądarki, która pomyślnie sprawdza poprawność łańcucha, wklejając je do formatu, który tam wymieniłem.

Ponieważ jest to mylący bałagan z własnej winy, odgadłem twoją nazwę DNS i złapałem certyfikat i myślę, że powinien to być pełny łańcuch, którego potrzebujesz: http://pastebin.com/Lnr3WHc8


Dzięki, to było bardzo przydatne! Nie mogę głosować, ponieważ nie mam punktów powtórzeń, ale chciałbym :-)
— Jack Stahl

@Jack Jeśli problem został rozwiązany, możesz zaakceptować odpowiedź nawet przy niskiej liczbie powtórzeń. Zredagowałem ten post, aby wyjaśnić, że dostarczony przez nich pakiet certyfikatów jest zepsuty ... a ponieważ to taki bałagan, poszedłem naprzód i rzuciłem dla ciebie cały łańcuch.
— Shane Madden


1

Dla każdego, kto boryka się z tym problemem, post Shane'a załatwił sprawę, chociaż musiałem również dołączyć plik CAFile. Również podczas tworzenia łańcucha pamiętaj, aby postępować zgodnie z instrukcjami nazywania plików zgodnie z tym artykułem

Aby określić nazwę pliku, której powinieneś użyć, możesz użyć programu c_hash, który jest dostarczany z OpenSSL (w /usr/local/ssl/misckatalogu):

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

W powyższym przypadku zmienisz nazwę pliku na a4644b49.0.
(Zauważ, że jest to zero, a nie litera „O” po kropce w nazwie pliku).

Jeśli nie masz c_hashprogramu, możesz uruchomić odpowiednią komendę OpenSSL w celu ustalenia wartości skrótu:

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

A jeśli napotykasz ten problem, bo próbujesz korzystać z gniazd sieciowych z Androidem Cordova, pamiętaj, aby ręcznie dodać wss do listy Cordova-białej listy, ponieważ * zawiera tylko http i https.


Artykuł, do którego linkujesz, ma duży czerwony baner na górze, który brzmi: Ta strona straciła na wartości , czy jesteś pewien, że te informacje są poprawne, tak jak w obsługiwanym - lub jak należy - należy zrobić w tym momencie pisanie?
— austin

2
Pozytywne, przynajmniej tylko dla cytowanej części. stunnel rzuci chybotliwie, chyba że nazwa certyfikatu zostanie nazwana skrótem pliku.
— BrightEyed

Również dodanie .0 nie było dla nas wymagane. Dzięki za poprawkę pisowni btw, rzuciłem słupek po długiej nocy; D
— BrightEyed

Wspaniale, miło słyszeć weryfikację. Rozumiem, mam teraz trzeci długi dzień z rzędu. (11, potem 14 godzin, dziś może być jeszcze 14 godzin.)
— austin

1
Eeeh, spełniając marzenie IT: D
— BrightEyed
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.