Czy można ograniczyć stosowanie certyfikatu głównego do domeny


28

Mój klient używa samopodpisanego certyfikatu do działania aplikacji. Aby móc pracować, muszę zainstalować certyfikat główny, którego użyli do podpisania certyfikatu.

Czy można skonfigurować certyfikat główny, aby sprawdzał się tylko w jednej domenie?


Może to tylko ja, ale nie jestem pewien, o co właściwie pytasz. Jaki stan końcowy próbujesz osiągnąć? Jeśli zaimportujesz ich certyfikat główny do zaufania kontrolerów domeny, tylko systemy w tej domenie będą mogły się z nim sprawdzić ...
Gravy

Wygląda na to, że mylisz certyfikaty samopodpisane z użyciem głównego urzędu certyfikacji, który nie jest publicznie zaufany. Aplikacja skonfigurowana do korzystania z certyfikatu samopodpisanego jest bardzo zła, ponieważ aplikacja musiałaby zostać skonfigurowana tak, aby ignorowała błędy sprawdzania poprawności certyfikatu. Korzystanie z głównego urzędu certyfikacji, który nie jest publicznie zaufany, jest w rzeczywistości dość powszechne.
Greg Askew

czy masz wewnętrzny serwer CA?
Crypt32

1
Urząd certyfikacji może ograniczyć się do niektórych domen z ograniczeniami nazw , ale zastosowanie ograniczeń z mocą wsteczną do cudzego urzędu certyfikacji to inna sprawa.
Matt Nordhoff,

3
nie ma różnicy. Możesz zastosować ograniczenia nazw także do zewnętrznego urzędu certyfikacji. Wystarczy podpisać certyfikat głównego urzędu certyfikacji innej firmy przy użyciu prywatnego ośrodka certyfikacji i opublikować wygenerowany certyfikat krzyżowy. W takim przypadku łańcuch zagraniczny zakończy się łańcuchem prywatnym poprzez ograniczony certyfikat krzyżowy.
Crypt32

Odpowiedzi:


24

Jako zasada:

Nie , implikacją zaufania do certyfikatu CA klienta jest zaufanie do każdego certyfikatu podpisanego przez ten CA.

Nie znam żadnych aplikacji / bibliotek, które mają łatwą opcję, która pozwala jako użytkownik końcowy wybrać, że będziesz ufać swoim klientom lub innym certyfikatom CA tylko dla niektórych (pod) domen, tj. Tylko dla *. example.com i * .example.org i nic więcej.

Mozilla ma podobne obawy dotyczące obecnie zaufanych sponsorowanych przez rząd urzędów certyfikacji jako otwartego punktu uwagi i na przykład Chrome ma wbudowane dodatkowe kontrole dostępu do stron Google, w ten sposób fałszywy * .google.com certyfikat i kompromis Diginotar CA stały się publiczne .

Ale nawet jeśli nie ufasz urzędowi certyfikacji, nadal możesz importować / ufać konkretnemu certyfikatowi serwera podpisanemu przez ten urząd certyfikacji, co zapobiegnie ostrzeżeniom SSL dla nazw hostów w tym certyfikacie. To powinno sprawić, że aplikacja będzie działać bez błędów i reklamacji.

Wyjątki:

Bardzo rzadko wykorzystywaną opcją standardu PKI X.509v3 jest rozszerzenie Ograniczenia nazw , które pozwala certyfikatowi CA zawierać białe i czarne listy wzorców nazw domen, dla których jest upoważniony do wydawania certyfikatów.

Możesz mieć szczęście, a Twój klient powstrzymał się, gdy konfigurował infrastrukturę PKI i umieścił to ograniczenie nazwy w certyfikacie urzędu certyfikacji. Następnie możesz zaimportować bezpośrednio ich certyfikat CA i wiedzieć, że może on zweryfikować tylko ograniczony zakres nazw domen.


2
@CryptoGuy: Wewnętrzny urząd certyfikacji może również wydawać certyfikaty dla domen zewnętrznych. Po zaufać wewnętrznej CA nie ma ograniczeń tak, że tylko certyfikaty dla własnej domeny DNS (Directory lub aktywne) example.comlub *.ad.example.com są niepoprawne. Twój wewnętrzny urząd certyfikacji może również wydawać certyfikaty *.example.bankumożliwiające miły atak typu man-in-the-middle i szpiegowanie poświadczeń bankowości internetowej.
HBruijn,

1
Cóż, „wszystko” nie jest idealnie dokładne. Istnieją rzeczy takie jak listy odwołania certyfikatów. Ale to nie zmienia dolnej linii.
Ben Voigt

1
przepraszam, znowu się mylisz. Możesz ograniczyć zewnętrzny urząd certyfikacji do zaufanych certyfikatów (z tego urzędu certyfikacji) wydanych na dowolną listę nazw. Jeśli chodzi o własny wewnętrzny urząd certyfikacji, zakładam, że zaufanie jest niewątpliwe. Jeśli nie ufasz własnemu urzędowi certyfikacji, oznacza to, że coś jest nie tak z twoim IT. Chcę powiedzieć, że mając prywatny urząd certyfikacji, OP może ustanowić częściowe zaufanie do zewnętrznego urzędu certyfikacji (poprzez ograniczenie nazw, którym ufają).
Crypt32

3
Do edytowanego postu: nawet jeśli urząd certyfikacji innej firmy nie ma rozszerzenia Ograniczenia nazwy, można je zastosować przy użyciu własnego wewnętrznego serwera urzędu certyfikacji w drodze certyfikacji krzyżowej. W takim przypadku łańcuch certyfikatów będzie wyglądał następująco: liść certyfikat SSL -> certyfikat krzyżowy -> certyfikat CA -> wewnętrzny certyfikat główny. Sztuczka polega na tym, że podpisujesz zewnętrzny urząd certyfikacji za pomocą wewnętrznego urzędu certyfikacji. A certyfikat krzyżowy będzie miał wszystkie wymagane ograniczenia.
Crypt32

1
CryptoGuy twierdzi, że jest to możliwe, ale znalezienie szczegółów implementacji jest trudne. Co powiesz na odpowiedź opisującą, jak można to osiągnąć? A może dyskusja o tym, które platformy obsługują ograniczenia nazw.
jorfus

17

@CryptoGuy miał tutaj całkiem dobrą odpowiedź, ale chciałem ją rozwinąć.

Parafrazować:

Możesz ograniczyć zewnętrzny urząd certyfikacji do zaufanych certyfikatów (z tego urzędu certyfikacji) wydanych na dowolną listę nazw. Nawet jeśli urząd certyfikacji innej firmy nie ma rozszerzenia Ograniczenia nazwy, można je zastosować, korzystając z własnego wewnętrznego serwera urzędu certyfikacji poprzez certyfikację krzyżową. Sztuczka polega na tym, że podpisujesz zewnętrzny urząd certyfikacji za pomocą wewnętrznego urzędu certyfikacji.

leaf SSL cert -> certyfikat krzyżowy -> twój certyfikat CA -> twój wewnętrzny certyfikat główny.

A oto, jak to działa (za pomocą wiersza polecenia OpenSSL CA)

Utwórz prosty urząd certyfikacji

openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"

Możesz pominąć tworzenie pośredniego urzędu certyfikacji

Utwórz żądanie pośredniego urzędu certyfikacji z ograniczeniami nazw.

openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg

Z tym w ossl_domain_com.cfgpliku:

[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca

[ req_distinguished_name ]
CN=somedomain.com trust CA

[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com

Następnie podpisz ten urząd certyfikacji domeny pośredniej za pomocą swojego urzędu certyfikacji.

openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg

Jeśli pominiesz tworzenie pośrednika, użyj głównego urzędu certyfikacji do podpisania

Teraz ponownie podpisz oryginalny urząd certyfikacji domeny pod swoim urzędem, używając ich certyfikatu. Możesz dodać rozszerzenia CA tutaj.

openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt

Może być konieczne użycie -x509-to-reqargumentu do utworzenia żądania, które podpisałbyś dokładnie w taki sam sposób, jak powyższy półprodukt.

Teraz dodaj główny urząd certyfikacji, pośredni urząd certyfikacji i domenę cross-ca do bazy danych zaufania przeglądarki.


2
MacOS nie obsługuje ograniczeń nazw. Po prostu FIY dla każdego, kto pracuje na wewnętrznym urzędzie certyfikacyjnym z ograniczeniem nazwy. security.stackexchange.com/questions/95600/… archive.is/6Clgb
jorfus

P: Jaki jest status tego rozwiązania? W jakich systemach działa obecnie (2018)? // Chciałem tego za każdym razem, gdy jestem zmuszany do instalowania certyfikatu z podpisem własnym innej firmy; i za każdym razem myślę o Hong Kong Post Office lub Symantec. // Myślę, że nie obchodzi mnie to, że nikt nie wdroży tak opisanego zwężenia, o ile przypadkowo nie wdroży rozszerzenia.
Krazy Glew

@KrazyGlew Mam plik wsadowy, którego używam do tego i nadal używam go regularnie. Czasami muszę ponownie wystawiać certyfikaty pośrednie, gdy wygasają lub obracają się, więc jest to trochę bardziej ręczne, ale nie było problemu. Czasami spotykam się na stronach zarządzanych przez władze, którym moja przeglądarka nie ufa z powodu użycia innego pośredniego organu lub dodanej przez nich dodatkowej nazwy domeny, której moja nie ufa.
davenpcj

2
Właśnie z powodzeniem go wykorzystałem, dzięki. Działa świetnie bez pośredniego certyfikatu, czy jest jakaś zaleta korzystania z niego? basicConstraintsWydaje się również, że wiersz w pliku konfiguracyjnym powoduje dwukrotne włączenie rozszerzenia ograniczenia do certyfikatu, co powoduje, że Firefox odrzuca certyfikat z tajemniczym komunikatem o błędzie. Myślę, że można go bezpiecznie usunąć.
wrtlprnft

I pojawia się błąd na ostatnim etapie: error with certificate to be certified - should be self signed. Co to znaczy i jak to rozwiązać? pastebin.ubuntu.com/p/QHhpQh2N6J
mymedia
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.