신뢰 저장소 vs 키 저장소 - 키 도구를 사용하여 생성
보통 키스토어에는 개인키/공용키가 보관되어 신뢰스토어에는 공개키만 보관되어 있다는 것을 알고 있습니다(또한 통신하려는 신뢰할 수 있는 파티의 목록을 나타냅니다).그게 제 첫 번째 추측입니다. 그게 틀렸다면, 아마 제가 시작을 잘 못 했을 겁니다.
다만, 키툴을 사용할 때 매장을 구분하는 방법을 알고 싶었습니다.
지금까지 키스토어를 작성했습니다.
keytool -import -alias bob -file bob.crt -keystore keystore.ks
keystore.ks 파일이 생성됩니다.나는 대답한다yes
Bob을 신뢰하는 것은 맞는데 이것이 Keystore 파일인지 Truststore 파일인지 불분명합니다.파일을 사용하도록 애플리케이션을 설정할 수도 있습니다.
-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x
그리고System.setProperty( "javax.net.debug", "ssl")
set, 신뢰할 수 있는 증명서에서는 증명서를 볼 수 있습니다(키스토어 섹션에서는 볼 수 없습니다).Import하는 특정 증명서에는 공개 키만 있으며, 이 키를 사용하여 SSL 연결을 통해 Bob에게 정보를 보낼 예정입니다(그러나 다른 질문은 남겨두는 것이 좋습니다).
어떤 조언이나 설명이라도 해주시면 감사하겠습니다.키툴의 출력은 무엇을 가져오든 동일합니까?또 하나는 키스토어이고 다른 하나는 신뢰스토어라고 하는 단순한 규칙입니까?SSL 등을 사용할 때 어떤 관계가 있습니까?
용어가 좀 헷갈리긴 하지만 둘 다javax.net.ssl.keyStore
그리고.javax.net.ssl.trustStore
는, 사용하는 키 스토어를 지정하기 위해서, 2개의 다른 목적으로 사용됩니다.키스토어는 다양한 형식으로 제공되며 파일일 필요는 없습니다(이 질문 참조).keytool
에서는, 다양한 조작(import/export/list/...)을 실행하는 툴에 지나지 않습니다.
그javax.net.ssl.keyStore
그리고.javax.net.ssl.trustStore
파라미터는 디폴트 파라미터입니다.KeyManager
및TrustManager
s(각각)를 구축하기 위해 사용됩니다.SSLContext
기본적으로는 SSL/TLS 접속을 확립할 때 사용하는SSL/TLS 설정이 포함되어 있습니다.SSLSocketFactory
또는SSLEngine
. 이러한 시스템 속성은 기본값이 생성되는 곳이며, 이 값은 에 의해 사용됩니다.SSLContext.getDefault()
, 자체 사용SSLSocketFactory.getDefault()
예를 들어 (이 모든 것은 API를 통해 여러 장소에서 커스터마이즈할 수 있습니다.기본값이나 특정 값을 사용하지 않을 경우SSLContext
를 참조해 주세요).
의 차이점KeyManager
그리고.TrustManager
(따라서 그 사이에)javax.net.ssl.keyStore
그리고.javax.net.ssl.trustStore
(JSE 참조 가이드에서 인용)는 다음과 같습니다.
Trust Manager:리모트 인증 credential(및 접속)을 신뢰할 필요가 있는지 여부를 결정합니다.
Key Manager:리모트 호스트에 송신할 인증 credential을 결정합니다.
(기타 파라미터를 사용할 수 있으며 그 기본값은 JSE 참조 가이드에 설명되어 있습니다.신뢰 저장소에는 기본값이 있지만 키 저장소에는 기본값이 없습니다.)
기본적으로 키스토어는javax.net.ssl.keyStore
개인 키와 증명서를 포함하도록 되어 있는데,javax.net.ssl.trustStore
는 리모트 파티가 증명서를 제시했을 때 신뢰할 수 있는CA 증명서를 포함하는 것을 의미합니다.경우에 따라서는 1개의 스토어가 될 수도 있지만, (특히 파일 베이스의 경우) 개별 스토어를 사용하는 것이 좋습니다.
일반적인 사용 사례/목적 또는 비전문적인 방법으로 설명:
TrustStore : 신뢰할 수 있는 엔티티의 증명서를 저장하는 데 사용됩니다.프로세스는 신뢰하는 모든 신뢰할 수 있는 당사자의 인증서 저장소를 유지할 수 있습니다.
keyStore : 서버 키(공개 및 개인 모두)와 서명된 증명서를 저장하기 위해 사용됩니다.
SSL 핸드쉐이크 중에
클라이언트가 https:// 에 접속하려고 합니다.
따라서 서버는 SSL 증명서(keyStore에 저장)를 제공하여 응답합니다.
이제 클라이언트는 SSL 증명서를 수신하고 trustStore를 통해 이를 확인합니다(즉, 클라이언트의 trustStore는 이미 신뢰하는 증명서 세트를 가지고 있습니다.예를 들어, 이 서버를 신뢰할 수 있습니까?이 서버가 내가 말하려고 하는 서버와 같은 서버입니까?중간인이 공격하지 않는 서버입니까?
클라이언트는 신뢰하는 서버와 통신하고 있는 것을 확인하면, 공유 비밀 키를 개입시켜 SSL 통신을 실시할 수 있습니다.
주의: 서버측에서의 클라이언트 인증에 대해서는 여기서 말하는 것이 아닙니다.서버가 클라이언트 인증도 실행할 경우 서버는 클라이언트를 확인하기 위해 trustStore도 유지합니다.그 후 상호 TLS가 됩니다.
keystore 파일과 truststore 파일 사이에는 차이가 없습니다.둘 다 독자적인 JKS 파일 형식의 파일입니다.그 구별은 다음과 같습니다.내가 아는 한, Java는 에 의해 참조되는 스토어만 사용합니다.-Djavax.net.ssl.trustStore
SSL 연결을 만들 때 신뢰할 수 있는 인증서를 찾는 시스템 속성입니다.키와-Djavax.net.ssl.keyStore
그러나 이론적으로는 신뢰 스토어와 키 스토어에 동일한 파일을 사용하는 것이 좋습니다.
Keystore는 서버에서 개인 키를 저장하기 위해 사용되며 Truststore는 서드파티 클라이언트가 서버에서 제공하는 공용 키를 저장하기 위해 사용합니다.저는 그것을 생산 어플리케이션에서 했습니다.SSL 통신용 Java 증명서를 생성하는 절차는 다음과 같습니다.
- Windows에서 keygen 명령을 사용하여 증명서를 생성합니다.
keytool -genkey -keystore server.keystore -alias mycert -keyalg RSA -keysize 2048 -validity 3950
- 증명서 자체 인증:
keytool -selfcert -alias mycert -keystore server.keystore -validity 3950
- 인증서를 폴더로 내보내기:
keytool -export -alias mycert -keystore server.keystore -rfc -file mycert.cer
- 클라이언트 신뢰 스토어로 인증서 가져오기:
keytool -importcert -alias mycert -file mycert.cer -keystore truststore
Keytool을 사용하여 로컬머신에 신뢰 스토어를 작성하는 순서는 다음과 같습니다.로컬 머신에 URL 신뢰 스토어를 작성하는 순서.
1) Chrome을 사용하여 브라우저의 URL을 누릅니다.
2) Chrome에서 URL 왼쪽에 있는 "i" 아이콘을 확인하고 클릭합니다.
3) 증명서 옵션을 선택하고 클릭하면 [Dialog](대화상자)가 열립니다.
4) 트러스트 스토어 작성에 사용할 수 있는 증명서 수에 대해서는 [증명서 경로(certificate path)]탭을 체크합니다.
5) Go the"details" tab -> click"Copy to File" -> Give the path and the name for the certificate
작성해야 합니다.
6) 부모증명서가 있는지 확인하고 "5"에 따른다.
7) 모든 증명서가 작성되면 명령 프롬프트를 열고 증명서를 작성한 경로로 이동합니다.
8) 증명서를 추가하고 신뢰 스토어를 작성하기 위해 다음 Keytool 명령을 제공합니다.
Sample:
keytool -import -alias abcdefg -file abcdefg.cer -keystore cacerts
where "abcdefg" is the alias name and "abcdefg.cer" is the actual certificate name and "cacerts" is the truststore name
9) 모든 증명서에 대해 keytool 명령을 입력하여 신뢰 저장소에 추가합니다.
keytool -list -v -keystore cacerts
keystore는 개인 키만 저장하고 wheras truststore는 공개 키를 저장합니다.SSL 통신을 위한 Java 인증서를 생성합니다.윈도에서는 keygen 명령어를 사용할 수 있습니다.이것은 아마도 가장 간단한 해결책이 될 것입니다.
언급URL : https://stackoverflow.com/questions/6340918/trust-store-vs-key-store-creating-with-keytool
'itsource' 카테고리의 다른 글
중첩된 데이터를 사용한 VueJ 입력 바인딩 (0) | 2022.08.17 |
---|---|
after 모드: 'history' vue 라우터가 작동하지 않음 (0) | 2022.08.17 |
Vue2: 메모리 리크 (0) | 2022.08.17 |
Vuex: Axios GET 요청에서 구성 요소 내부에 정의되지 않은 값이 반환됨 (0) | 2022.08.17 |
자바에서는 어레이 내의 모든 숫자의 합계를 어떻게 찾을 수 있습니까? (0) | 2022.08.17 |