Patrząc na plik java.security
my JRE
, widzę, że domyślnym typem magazynu kluczy jest JKS
. Tutaj znajduje się lista typów kluczy, których można użyć.
Czy istnieje zalecany typ magazynu kluczy? Jakie są wady / zalety różnych typów magazynów kluczy?
Odpowiedzi:
Istnieje kilka innych typów niż te, które są wymienione na standardowej liście nazw, z którą łączysz się. Więcej informacji można znaleźć w dokumentacji dostawców usług kryptograficznych . Najpopularniejsze z nich to z pewnością
JKS
(domyślne) iPKCS12
(dla plików PKCS # 12, często z rozszerzeniem.p12
lub czasami.pfx
).JKS jest najbardziej powszechny, jeśli pozostajesz w świecie Java. PKCS # 12 nie jest specyficzny dla Javy, szczególnie wygodne jest używanie certyfikatów (z kluczami prywatnymi) z kopii zapasowej z przeglądarki lub pochodzących z narzędzi opartych na OpenSSL (
keytool
nie był w stanie przekonwertować magazynu kluczy i zaimportować jego kluczy prywatnych przed Java 6 , więc musiałeś użyć innych narzędzi).Jeśli masz już plik PKCS # 12, często łatwiej jest
PKCS12
bezpośrednio użyć tego typu. Konwersja formatów jest możliwa, ale rzadko jest to konieczne, jeśli można bezpośrednio wybrać typ magazynu kluczy.W Javie 7
PKCS12
był używany głównie jako magazyn kluczy, ale mniej w przypadku magazynu zaufanych certyfikatów (zobacz różnicę między magazynem kluczy a magazynem zaufanych certyfikatów ), ponieważ nie można przechowywać wpisów certyfikatów bez klucza prywatnego. W przeciwieństwie do tego,JKS
nie wymaga, aby każdy wpis był wpisem klucza prywatnego, więc możesz mieć wpisy zawierające tylko certyfikaty, co jest przydatne w przypadku magazynów zaufania, w których przechowujesz listę zaufanych certyfikatów (ale nie masz klucz prywatny dla nich).Zmieniło się to w Javie 8, więc teraz w
PKCS12
sklepach możesz mieć wpisy zawierające tylko certyfikaty . (Więcej szczegółów na temat tych zmian i dalszych planów można znaleźć w JEP 229: Domyślne tworzenie magazynów kluczy PKCS12 ).Istnieje kilka innych typów magazynów kluczy, być może rzadziej używanych (w zależności od kontekstu). Są to:
PKCS11
, dla bibliotek PKCS # 11, zwykle do uzyskiwania dostępu do sprzętowych tokenów kryptograficznych, ale implementacja dostawcy Sun obsługuje również magazyny NSS (z Mozilli).BKS
przy użyciu dostawcy BouncyCastle (powszechnie używanego w systemie Android).Windows-MY
/Windows-ROOT
, jeśli chcesz uzyskać bezpośredni dostęp do magazynu certyfikatów systemu Windows.KeychainStore
, jeśli chcesz bezpośrednio użyć pęku kluczy OSX.źródło
KeyStore
implementację). Możesz jednak załadować je w locie do instancji magazynu kluczy (zwykle JKS, typ domyślny) w pamięci za pomocąCertificateFactory
(jak pokazano w tej odpowiedzi ).JKS
zmienił się naJCEKS
Oto post, który przedstawia różne typy magazynu kluczy w Javie i różnice między różnymi typami magazynu kluczy. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----Overview
Poniżej znajdują się opisy różnych magazynów kluczy z postu:
źródło
Jeśli używasz Java 8 lub nowszej, zdecydowanie powinieneś wybrać
PKCS12
domyślną wersję od Java 9 ( JEP 229 ).Zalety w porównaniu z
JKS
iJCEKS
to:PKCS12
jest formatem standardowym, może być odczytany przez inne programy i biblioteki 1JKS
iJCEKS
są dość niepewne. Widać to po liczbie narzędzi do brutalnego wymuszania haseł tych typów magazynów kluczy, szczególnie popularnych wśród programistów Androida. 2, 31 Jest JDK-8202837 , który został poprawiony w Javie 11
2 Liczba iteracji dla PBE używanego przez wszystkie typy magazynów kluczy (w tym PKCS12) wynosiła raczej tydzień ( CVE-2017-10356 ), jednak zostało to naprawione w wersjach 9.0.1, 8u151, 7u161 i 6u171
3 Więcej informacji:
źródło