Jaka jest różnica między magazynem kluczy a sklepem zaufania?
keystore
encryption-asymmetric
truststore
Rob Wright
źródło
źródło
TrustStore
per se . Lub nie mogłem go znaleźć w dokumentach Java (na przykładjava.security.TrustStore
). Kiedy chcemy zaufać urzędowi certyfikacji, jest on zaufany przezKeyStore
(iKeyStore
jest przekazywany doTrustManagerFactory
).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.
Źródło
źródło
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
źródło
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.
źródło
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.
źródło
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 przypadkujava.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:
źródło