신뢰 저장소 및 키 저장소 정의


답변:


268

키 저장소에는 개인 키와 해당 공개 키가있는 인증서가 포함됩니다.

신뢰 저장소에는 통신하려는 다른 당사자 또는 다른 당사자를 식별하기 위해 신뢰하는 인증 기관의 인증서가 포함됩니다.


12
실제로는 이것이 사실이지만, 같은 경우에도 가능할 수 있습니다. 실제로 개인 키와 공개 인증서를 [java home] / jre / lib / security / cacerts 기본 "truststore"로 가져올 수 있습니다. 키 도구 유틸리티는 두 가지 용어를 구별하지 않으며 상점 유형 (예 : JKS와 PKCS12) 만 구별합니다. 그 문제에 대해 Java는 소스 코드에서 동일한 작업을 수행합니다. java.security.KeyStore를 작성하고 신뢰 관리자를 사용하여 인증서를 관리하지만 TrustStore 클래스는 없습니다.

4
자바는 TrustStore 그 자체 가 없다 . 또는 Java 문서 (예 :)에서 찾을 수 없습니다 java.security.TrustStore. 인증 기관을 신뢰하려면 인증 기관을 통해 신뢰할 수 있습니다 KeyStore( KeyStore및는에 전달됨 TrustManagerFactory).
jww

5
그것은 그 언급 할 가치가있다 KeyStore.load(InputStream is, char[] password)( 문서를 ) 널 암호를 취할 수 있으며 다음 공개 인증서에 대한 액세스 권한을 제공 할 것입니다. 즉, 신뢰 저장소를 탐색하려는 코드는 비밀번호를 알 필요가 없습니다 (아주 좋은 이유로!)
xverges

83
  1. 키 저장소에는 개인 키가 포함되어 있습니다. 서버이거나 서버에 클라이언트 인증이 필요한 경우에만 필요합니다.

  2. 신뢰 저장소에는 신뢰할 CA 인증서가 포함됩니다. 서버의 인증서가 공인 된 CA에 의해 서명 된 경우 JRE와 함께 제공되는 기본 신뢰 저장소는 이미 신뢰할 수있는 CA를 신뢰하기 때문에 이미 신뢰합니다. 따라서 자체 인증서를 작성하거나 인증서를 추가 할 필요가 없습니다. JRE에서.

출처


73

SSL 데이터 교환 에서 trustStore 의 목적은 자격 증명을 확인 하는 것이며 keyStore 의 목적은 자격 증명을 제공 하는 것입니다 .

키 스토어

Java의 keyStore는 공개 키에 해당하는 개인 키 및 인증서를 저장하며 SSL 서버 또는 SSL 인 경우 클라이언트 인증이 필요합니다.

신뢰 저장소

TrustStore는 타사의 인증서를 저장하고 Java 응용 프로그램이 통신하거나 CA (Verisign, Thawte, Geotrust 또는 GoDaddy와 같은 인증 기관)에서 서명 한 인증서를 저장하여 타사를 식별 할 수 있습니다.

TrustManager

TrustManager는 원격 연결의 신뢰 여부를 결정합니다. 즉, 원격 당사자가 주장하는 사람인지 여부와 KeyManager는 SSL 핸드 셰이크 동안 인증을 위해 원격 호스트에 전송해야 할 인증 자격 증명을 결정합니다.

SSL 서버 인 경우 키 교환 알고리즘 중에 개인 키를 사용하고 공개 키에 해당하는 인증서를 클라이언트로 보내면이 인증서는 keyStore에서 가져옵니다. SSL 클라이언트 측에서 Java로 작성된 경우 trustStore에 저장된 인증서를 사용하여 서버의 ID를 확인합니다. SSL 인증서는 가장 일반적으로 keytool과 같은 키 관리 유틸리티를 사용하여 keyStore 또는 trustStore에 추가되는 .cer 파일 로 제공됩니다 .

출처 : http://javarevisited.blogspot.ch


31

표준 JSSE 문서의 일부로 Sun의 문서 작성에 관심이있을 수도 있습니다.

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

일반적으로 신뢰 저장소는 X.509 인증과 같은 확인 목적으로 공개 키만 저장하는 데 사용됩니다. 관리 효율성을 위해 관리자 나 개발자는이 둘을 단일 저장소로 간단히 연결하는 것이 일반적입니다.


1
불행히도 404 제공
Chris Beach

@ChrisBeach-Oracle 사이트에서 올바른 링크를 업데이트했습니다.
Peter Mularien

1
신뢰 저장소는 신뢰할 수있는 서명자 인증서
Lorne의 후작

9

Java에서 키 저장소와 신뢰 저장소의 차이점은 무엇입니까?

다음은 JSSE (Java Secure Socket Extension) 참조 안내서 의 Java 문서에 대한 설명입니다 . 나는 그것이 당신이 다른 사람들의 말과 다른 것을 말하지 않는다고 생각합니다. 그러나 그것은 공식적인 참조를 제공합니다.

키 저장소 / 신뢰 저장소

키 저장소는 키 자료의 데이터베이스입니다. 키 자료는 인증 및 데이터 무결성을 포함한 다양한 목적으로 사용됩니다. PKCS12 및 Oracle의 JKS를 포함하여 다양한 유형의 키 저장소를 사용할 수 있습니다.

일반적으로 키 저장소 정보는 키 항목과 신뢰할 수있는 인증서 항목의 두 가지 범주로 그룹화 할 수 있습니다. 키 항목은 엔터티의 ID와 개인 키로 구성되며 다양한 암호화 목적으로 사용될 수 있습니다. 반대로 신뢰할 수있는 인증서 항목에는 엔터티의 ID 외에 공개 키만 포함됩니다. 따라서 javax.net.ssl.KeyManager와 같이 개인 키가 필요한 경우 신뢰할 수있는 인증서 항목을 사용할 수 없습니다. JKS의 JDK 구현에서 키 저장소에는 키 항목과 신뢰할 수있는 인증서 항목이 모두 포함될 수 있습니다.

신뢰 저장소는 신뢰할 대상에 대한 결정을 내릴 때 사용되는 키 저장소입니다. 이미 신뢰하는 엔터티에서 데이터를 수신하고 엔터티가 주장하는 엔터티인지 확인할 수 있으면 해당 엔터티에서 데이터가 실제로 온 것으로 가정 할 수 있습니다.

사용자가 해당 엔티티를 신뢰하는 경우에만 신뢰 저장소에 항목을 추가해야합니다. 키 페어를 생성하거나 인증서를 가져 와서 사용자는 해당 항목을 신뢰합니다. 신뢰 저장소의 모든 항목은 신뢰할 수있는 항목으로 간주됩니다.

하나는 키 항목 만 포함하고 다른 하나는 CA 인증서를 포함하여 신뢰할 수있는 인증서 항목을 포함하는 두 개의 다른 키 저장소 파일을 갖는 것이 유용 할 수 있습니다. 전자는 개인 정보를 포함하지만 후자는 그렇지 않습니다. 단일 키 저장소 파일 대신 두 개의 파일을 사용하면 자신의 인증서 (및 해당 개인 키)와 다른 인증서 간의 논리적 구분을 명확하게 구분할 수 있습니다. 개인 키를보다 안전하게 보호하려면 액세스가 제한된 키 저장소에 키를 저장하고 필요한 경우 공개적으로 액세스 가능한 키 저장소에 신뢰할 수있는 인증서를 제공하십시오.


4
  1. trustStore와 keyStore의 첫 번째 주요 차이점은 TrustManager가 trustStore를 사용하여 원격 연결을 신뢰할 수 있는지 여부를 결정하고, KeyStore는 keyManager를 사용하여 SSL 핸드 셰이크 중 인증을 위해 원격 호스트에 전송해야 할 인증 신임 정보를 결정한다는 것입니다.

  2. 또 다른 차이점은 SSL에 서버를 실행 중이거나 서버 측에서 클라이언트 인증을 활성화 한 경우에만 키 저장소에 이론적으로 필요한 개인 키가 포함된다는 점입니다. 반면에 trustStore는 공개 키 또는 CA (인증 기관)의 인증서를 저장합니다. 원격 당사자 또는 SSL 연결을 신뢰하십시오.

    사실, 그래서 당신은 그 파일을 관리 할 수있는 도구 (키 도구) 같은 것을 주어, 같은 파일을 모두 개인 키와 공개 키에 저장할 수있는 당신이 수 모두 목적을 위해 하나의 파일을 사용하지만, 당신은 아마 .

  3. 적어도 내 Mac OSX에서 기본 키 저장소는 ${user.home}/.keystore이고 기본 신뢰 저장소는 /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts입니다.

    당신이 그들을 무시하고 싶은 경우에 당신은 JVM 매개 변수를 추가해야 -Djavax.net.ssl.keyStore /path/to/keyStore하거나 -Djavax.net.ssl.trustStore /path/to/trustStore. 또는 java.security.UnrecoverableKeyException: Password must not be null매개 변수를 사용하여 키 저장소 비밀번호를 설정해야 할 수도 있습니다. -Djavax.net.ssl.trustStorePassword=password-Djavax.net.ssl.trustStorePassword=password

주 원천:

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.