Problem ze zrozumieniem weryfikacji łańcucha certyfikatów SSL
Moja aplikacja używa protokołu SSL do bezpiecznej komunikacji z serwerem i ma problem z weryfikacją łańcucha certyfikatów. Łańcuch wygląda tak:
Urząd certyfikacji bezpiecznego serwera Entrust.net -> DigiCert Global CA -> * .ourdomain.com
Używamy magazynu certyfikatów wyciągniętego z Mozilli. Zawiera certyfikat Entrust.net, ale nie certyfikat DigiCert Global CA.
Rozumiem, że pośredniemu autorytetowi nie trzeba ufać, dopóki uprawnienie root jest, ale weryfikacja nie powiedzie się:
% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate
Czy więc muszę wyraźnie ufać DigiCert Global CA, aby weryfikacja przebiegła? To wydaje się złe. Ale powiedz mi!
EDYTOWAĆ: Teraz rozumiem, że plik certyfikatu musi być dostępny dla OpenSSL z przodu. Coś takiego działa:
% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK
Dzięki temu mogę dostarczyć kopię CA DigiCert bez wyraźnego stwierdzenia „ufam”, cały łańcuch nadal wymaga weryfikacji.
Ale z pewnością przeglądarki takie jak Firefox nie zawsze będą dostarczane z kopią każdego pojedynczego certyfikatu, którego kiedykolwiek będą potrzebować. Zawsze pojawią się nowe urzędy certyfikacji i chodzi o to, aby użyć zabezpieczeń certyfikatu głównego, aby upewnić się, że wszystkie pośrednie urzędy certyfikacji są ważne. Dobrze? Więc jakrobi ta praca? Czy to naprawdę takie głupie, na jakie wygląda?