Definicje magazynu zaufanych certyfikatów i magazynu kluczy

Odpowiedzi:

268

Magazyn kluczy zawiera klucze prywatne i certyfikaty z odpowiadającymi im kluczami publicznymi.

Magazyn zaufanych certyfikatów zawiera certyfikaty od innych podmiotów, z którymi zamierzasz się komunikować, lub od urzędów certyfikacji, którym ufasz w celu identyfikacji innych stron.

Darron
źródło
12
Chociaż powinno to być prawdą w praktyce, mogą (i często są) jedno w tym samym. Możesz faktycznie zaimportować klucz prywatny i certyfikat publiczny do domyślnego „magazynu zaufanych certyfikatów” [java home] / jre / lib / security / cacerts. Narzędzie keytool nie rozróżnia dwóch terminów, tylko typy sklepów (tj. - JKS vs. PKCS12). W tym przypadku Java robi to samo w kodzie źródłowym. Tworzysz java.security.KeyStore i używasz menedżera zaufania do zarządzania certyfikatami w nim, ale nie ma klasy TrustStore.
4
Java nie ma TrustStore per se . Lub nie mogłem go znaleźć w dokumentach Java (na przykład java.security.TrustStore). Kiedy chcemy zaufać urzędowi certyfikacji, jest on zaufany przez KeyStore(i KeyStorejest przekazywany do TrustManagerFactory).
jww
5
Warto wspomnieć, że KeyStore.load(InputStream is, char[] password)( dokumenty ) mogą przyjąć zerowe hasło, a następnie udostępnić certyfikaty publiczne. Oznacza to, że kod, który chce przeglądać
magazyn zaufania,
83
  1. Magazyn kluczy zawiera klucze prywatne. Potrzebujesz tego tylko, jeśli jesteś serwerem lub jeśli serwer wymaga uwierzytelnienia klienta.

  2. Magazyn zaufanych certyfikatów zawiera certyfikaty CA, którym można zaufać. Jeśli certyfikat twojego serwera jest podpisany przez uznany urząd certyfikacji, domyślny magazyn zaufanych certyfikatów dostarczany z JRE już mu zaufa (ponieważ już ufa zaufanym urzędom certyfikacji), więc nie musisz budować własnego ani dodawać niczego do jednego z JRE.

Źródło

ha9u63ar
źródło
73

W uzgadnianiu protokołu SSL celem trustStore jest weryfikacja poświadczeń, a celem keyStore jest zapewnienie poświadczeń .

keyStore

keyStore w Javie przechowuje klucz prywatny i certyfikaty odpowiadające ich kluczom publicznym i wymaga, jeśli jesteś serwerem SSL lub SSL wymaga uwierzytelnienia klienta.

TrustStore

TrustStore przechowuje certyfikaty stron trzecich, twoja aplikacja Java komunikuje się lub certyfikaty podpisane przez CA (urzędy certyfikacji takie jak Verisign, Thawte, Geotrust lub GoDaddy), których można użyć do identyfikacji strony trzeciej.

TrustManager

TrustManager określa, czy zdalne połączenie powinno być zaufane, czy nie, tj. Czy strona zdalna jest tym, do kogo się podaje, a KeyManager decyduje, które poświadczenia uwierzytelnienia powinny zostać wysłane do zdalnego hosta w celu uwierzytelnienia podczas uzgadniania SSL.

Jeśli jesteś serwerem SSL, będziesz używać klucza prywatnego podczas algorytmu wymiany kluczy i wysyłać do klienta certyfikaty odpowiadające twoim kluczom publicznym, ten certyfikat jest nabywany z magazynu kluczy. Po stronie klienta SSL, jeśli jest napisany w Javie, użyje certyfikatów przechowywanych w trustStore do weryfikacji tożsamości serwera. Certyfikaty SSL są najczęściej dostarczane jako plik .cer , który jest dodawany do keyStore lub trustStore za pomocą dowolnego narzędzia do zarządzania kluczami, np . Keytool .

Źródło: http://javarevisited.blogspot.ch

Aniket Thakur
źródło
31

Możesz być także zainteresowany odpisem od firmy Sun w ramach standardowej dokumentacji JSSE:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

Zazwyczaj magazyn zaufania służy do przechowywania tylko kluczy publicznych do celów weryfikacji, takich jak uwierzytelnianie X.509. Dla celów zarządzania administratorzy i programiści dość często łączą je w jeden sklep.

Peter Mularien
źródło
1
Daje 404 niestety
Chris Beach
@ChrisBeach - zaktualizowałem link do poprawnego w witrynie Oracle.
Peter Mularien
1
Magazyn zaufanych certyfikatów
Markiz Lorne
9

W Javie jaka jest różnica między magazynem kluczy a magazynem zaufania?

Oto opis z dokumentacji Java w Przewodniku informacyjnym Java Secure Socket Extension (JSSE) . Nie sądzę, że mówi coś innego niż to, co powiedzieli inni. Ale zapewnia oficjalne odniesienie.

magazyn kluczy / truststore

Magazyn kluczy to baza danych kluczowych materiałów. Kluczowe materiały są wykorzystywane do różnych celów, w tym do uwierzytelniania i integralności danych. Dostępne są różne typy magazynów kluczy, w tym PKCS12 i JKS Oracle.

Ogólnie mówiąc, informacje o magazynie kluczy można pogrupować w dwie kategorie: wpisy klucza i wpisy zaufanego certyfikatu. Wpis klucza składa się z tożsamości jednostki i jej klucza prywatnego i może być wykorzystywany do różnych celów kryptograficznych. Natomiast wpis zaufanego certyfikatu zawiera tylko klucz publiczny oprócz tożsamości jednostki. Dlatego zaufanego wpisu certyfikatu nie można użyć tam, gdzie wymagany jest klucz prywatny, na przykład w javax.net.ssl.KeyManager. W implementacji JKS JDK magazyn kluczy może zawierać zarówno wpisy kluczy, jak i wpisy zaufanych certyfikatów.

Magazyn zaufanych certyfikatów to magazyn kluczy używany przy podejmowaniu decyzji dotyczących zaufania. Jeśli otrzymujesz dane od podmiotu, któremu już ufasz, i jeśli możesz zweryfikować, że podmiot jest tym, za kogo się podaje, możesz założyć, że dane naprawdę pochodzą od tego podmiotu.

Wpis należy dodać do magazynu zaufanych certyfikatów tylko wtedy, gdy użytkownik ufa tej jednostce. Generując parę kluczy lub importując certyfikat, użytkownik ufa temu wpisowi. Każdy wpis w magazynie zaufania jest uważany za wpis zaufany.

Przydatne mogą być dwa różne pliki kluczy: jeden zawierający tylko wpisy kluczy, a drugi zawierający zaufane wpisy certyfikatów, w tym certyfikaty CA. Pierwsza zawiera informacje prywatne, a druga nie. Użycie dwóch plików zamiast jednego pliku kluczy zapewnia wyraźniejsze oddzielenie logicznego rozróżnienia między własnymi certyfikatami (i odpowiadającymi im kluczami prywatnymi) a certyfikatami innych. Aby zapewnić lepszą ochronę kluczy prywatnych, przechowuj je w magazynie kluczy z ograniczonym dostępem, aw razie potrzeby zapewnij zaufane certyfikaty w bardziej publicznie dostępnym magazynie kluczy.

jww
źródło
4
  1. Pierwszą i główną różnicą między trustStore a keyStore jest to, że trustManager jest używany przez TrustManager w celu ustalenia, czy zdalne połączenie powinno być zaufane, keyStore jest używany z KeyManager decydując, które poświadczenia uwierzytelnienia należy wysłać do zdalnego hosta w celu uwierzytelnienia podczas uzgadniania SSL.

  2. Inną różnicą jest to, że keyStore teoretycznie zawiera klucze prywatne wymagane tylko wtedy, gdy używasz serwera w połączeniu SSL lub masz włączone uwierzytelnianie klienta po stronie serwera, az drugiej strony trustStore przechowuje klucz publiczny lub certyfikaty z urzędu certyfikacji (CA) zaufaj zdalnej stronie lub połączeniu SSL.

    W rzeczywistości możesz przechowywać w tym samym pliku zarówno klucze prywatne, jak i publiczne, biorąc pod uwagę, że narzędzie do zarządzania tymi plikami jest takie samo (keytool), więc możesz użyć jednego pliku do obu celów, ale prawdopodobnie nie powinieneś .

  3. Przynajmniej na moim Mac OSX domyślnym sklepem kluczy jest ${user.home}/.keystore, a domyślnym sklepem zaufania jest /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts.

    Jeśli chcesz je zastąpić, dodaj parametry JVM -Djavax.net.ssl.keyStore /path/to/keyStorelub -Djavax.net.ssl.trustStore /path/to/trustStore. Konieczne może być również ustawienie hasła keyStore w przypadku java.security.UnrecoverableKeyException: Password must not be nullużycia parametru -Djavax.net.ssl.trustStorePassword=passwordlub-Djavax.net.ssl.trustStorePassword=password

Główne źródło:

http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

alessiop86
źródło