Jaka jest różnica między magazynem kluczy a sklepem zaufania?
Jaka jest różnica między magazynem kluczy a sklepem zaufania?
Odpowiedzi:
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.
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 KeyStore
jest przekazywany do TrustManagerFactory
).
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 kluczy zawiera klucze prywatne. Potrzebujesz tego tylko, jeśli jesteś serwerem lub jeśli serwer wymaga uwierzytelnienia klienta.
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.
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
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.
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.
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.
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ś .
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/keyStore
lub
-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
null
użycia parametru
-Djavax.net.ssl.trustStorePassword=password
lub-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