java.security
내 파일 을 보면 JRE
기본적으로 사용할 키 저장소 유형이로 설정되어 있음을 알 수 JKS
있습니다. 여기 에는 사용할 수있는 키 저장소 유형 목록이 있습니다.
권장되는 키 저장소 유형이 있습니까? 다양한 키 저장소 유형의 장단점은 무엇입니까?
java.security
내 파일 을 보면 JRE
기본적으로 사용할 키 저장소 유형이로 설정되어 있음을 알 수 JKS
있습니다. 여기 에는 사용할 수있는 키 저장소 유형 목록이 있습니다.
권장되는 키 저장소 유형이 있습니까? 다양한 키 저장소 유형의 장단점은 무엇입니까?
답변:
링크 한 표준 이름 목록에 나열된 것보다 몇 가지 더 많은 유형이 있습니다. 암호화 공급자 설명서 에서 자세한 내용을 찾을 수 있습니다 . 가장 일반적인 것은 확실히 JKS
(기본값) 및 PKCS12
(PKCS # 12 파일의 경우, 종종 확장자가 .p12
있거나 때로는 .pfx
)입니다.
JKS는 Java 세계에 머무르는 경우 가장 일반적입니다. PKCS # 12는 Java 전용이 아니며 브라우저에서 백업하거나 OpenSSL 기반 도구에서 제공되는 인증서 (개인 키 포함)를 사용하는 것이 특히 편리합니다 (키 keytool
저장소를 변환하고 Java 6 이전에 개인 키를 가져올 수 없었습니다). , 그래서 다른 도구를 사용해야했습니다).
이미 PKCS # 12 파일이있는 경우 PKCS12
유형을 직접 사용하는 것이 더 쉽습니다 . 형식을 변환 할 수 있지만 키 저장소 유형을 직접 선택할 수있는 경우 거의 필요하지 않습니다.
Java 7에서는 개인 키없이 인증서 항목을 저장할 수 없기 때문에 PKCS12
주로 키 저장소 로 유용 했지만 신뢰 저장소에 대해서는 덜 유용했습니다 ( 키 저장소와 신뢰 저장소 의 차이점 참조 ). 반대로 JKS
각 항목이 개인 키 항목 일 필요가 없으므로 인증서 만 포함 된 항목을 가질 수 있습니다. 이는 신뢰하는 인증서 목록을 저장하는 신뢰 저장소에 유용합니다. 개인 키).
이것은 Java 8에서 변경되었으므로 이제 PKCS12
상점에서도 인증서 전용 항목을 가질 수 있습니다. (이러한 변경 사항 및 추가 계획에 대한 자세한 내용은 JEP 229 : 기본적으로 PKCS12 키 저장소 만들기 에서 찾을 수 있습니다 .)
컨텍스트에 따라 덜 자주 사용되는 몇 가지 다른 키 저장소 유형이 있습니다.
PKCS11
, PKCS # 11 라이브러리의 경우 일반적으로 하드웨어 암호화 토큰에 액세스하지만 Sun 공급자 구현은이를 통해 Mozilla의 NSS 저장소도 지원합니다.BKS
, BouncyCastle 공급자 (일반적으로 Android에 사용됨)를 사용합니다.Windows-MY
/ Windows-ROOT
, Windows 인증서 저장소에 직접 액세스하려는 경우.KeychainStore
, OSX 키 체인을 직접 사용하려는 경우.JKS
으로 변경되었습니다JCEKS
다음은 Java의 다양한 유형의 키 저장소와 다양한 유형의 키 저장소 간의 차이점을 소개하는 게시물입니다. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java---- 개요
다음은 게시물의 여러 키 저장소에 대한 설명입니다.
JKS, Java 키 저장소. 이 파일은 sun.security.provider.JavaKeyStore에서 찾을 수 있습니다. 이 키 저장소는 Java에만 해당되며 일반적으로 jks의 확장자를 갖습니다. 이 유형의 키 저장소는 개인 키와 인증서를 포함 할 수 있지만 비밀 키를 저장하는 데 사용할 수 없습니다. Java 전용 키 저장소이므로 다른 프로그래밍 언어에서 사용할 수 없습니다.
JCEKS, JCE 키 저장소. 이 파일은 com.sun.crypto.provider.JceKeyStore에서 찾을 수 있습니다. 이 키 저장소에는 jceks의 확장자가 있습니다. JCEKS 키 저장소에 넣을 수있는 항목은 개인 키, 비밀 키 및 인증서입니다.
PKCS12, 이것은 Java 및 기타 언어에서 사용할 수있는 표준 키 저장소 유형입니다. 이 키 저장소 구현은 sun.security.pkcs12.PKCS12KeyStore에서 찾을 수 있습니다. 일반적으로 확장자는 p12 또는 pfx입니다. 이 유형에 개인 키, 비밀 키 및 인증서를 저장할 수 있습니다.
PKCS11, 이것은 하드웨어 키 저장소 유형입니다. Luna, nCipher와 같은 하드웨어 키 저장소 장치와 연결하기위한 Java 라이브러리 용 인터페이스를 제공합니다. 이 구현은 sun.security.pkcs11.P11KeyStore에서 찾을 수 있습니다. 키 저장소를로드 할 때 특정 구성으로 특정 공급자를 만들 필요가 없습니다. 이 키 저장소는 개인 키, 비밀 키 및 인증서를 저장할 수 있습니다. 키 저장소를로드 할 때 항목은 키 저장소에서 검색된 다음 소프트웨어 항목으로 변환됩니다.
Java 8 이상을 사용하는 경우 PKCS12
Java 9 ( JEP 229 ) 이후 기본값 인을 선택해야합니다 .
과 비교되는 장점 은 다음 JKS
과 JCEKS
같습니다.
PKCS12
표준 형식이며 다른 프로그램 및 라이브러리에서 읽을 수 있습니다. 1JKS
그리고 JCEKS
꽤 불안. 이는 특히 Android 개발자에게 인기있는 이러한 키 저장소 유형의 무차별 암호 대입 암호를위한 여러 도구에서 확인할 수 있습니다. 2, 31 Java 11에서 수정 된 JDK-8202837 이 있습니다.
2 모든 키 저장소 유형 (PKCS12 포함)에서 사용되는 PBE의 반복 횟수는 다소 주 였지만 ( CVE-2017-10356 ) 9.0.1, 8u151, 7u161 및 6u171에서 수정되었습니다.
3 추가 정보 :