Java에서 Reply 및 Keystore Don't Match 오류의 공개 키 해결

Mehvish Ashiq 2023년6월20일
  1. 오류 설명, 원인 및 Public Keys in Reply and Keystore Don't Match 오류에 대한 가능한 해결책
  2. Java에서 Public Keys in Reply and Keystore Don't Match 오류 해결
Java에서 Reply 및 Keystore Don't Match 오류의 공개 키 해결

오늘의 튜토리얼에서는 keytool error: java.lang.Exception: Public keys in reply and keystore don't match 오류에 대해 설명합니다. 또한 이 오류가 발생할 수 있는 이유를 강조 표시합니다.

또한 이 오류를 수정하는 데 사용할 수 있는 다양한 솔루션에 대해 알아봅니다.

오류 설명, 원인 및 Public Keys in Reply and Keystore Don't Match 오류에 대한 가능한 해결책

포트 443에서 호스팅되는 웹 서비스에 액세스를 시도합니다. 서비스 공급자는 ABCD.cer, CCA_Certificate.cerCA_Certificate.cer의 세 가지 인증서를 공유했습니다.

SSL 통신을 위한 양식 체인 생성을 통해 모든 항목을 KeyStore에 추가해야 합니다. 문서에서 수행한 단계는 아래에 순차적으로 제공됩니다.

  • keytool -keystore npci_keystore.jks -genkey -alias npci_client
  • keytool -import -keystore npci_keystore.jks -file CA_Certificate.cer -alias CARoot
  • keytool -import -keystore npci_keystore.jks -file CCA_Certificate.cer -alias CCARoot
  • keytool -import -keystore npci_keystore.jks -file ABCD.cer -alias npci_client

이 시점에서 keytool error: java.lang.Exception: Public keys in reply and keystore don't match라는 오류가 발생했습니다. 이 오류는 무엇에 관한 것입니까? 이 문제가 발생하는 이유는 무엇입니까?

아래 나열된 여러 가지 이유로 이 문제가 발생합니다.

  1. 다른 키 쌍으로 인증서를 생성하려고 하면 이 오류가 발생합니다.
  2. 인증서를 가져오고 JKS 저장소를 만드는 동안 동일한 별칭을 사용한 경우 이 오류가 발생합니다.
  3. 경우에 따라 잘못된 순서로 인증서를 설치해도 이 오류가 발생합니다.
  4. 루트 CA의 인증서가 체인에서 누락된 경우에도 이 문제를 진행합니다.

이제 어떻게 없애느냐가 관건이다. 다음 섹션에서 살펴보겠습니다.

Java에서 Public Keys in Reply and Keystore Don't Match 오류 해결

우리의 시나리오에서 우리가 사용하고 있던 링크는 우리가 달성하고자 하는 것이 아닌 서버용 SSL 키 저장소를 만드는 방법을 안내합니다. 우리가 한 일은 새 키 쌍을 만드는 것부터 시작했습니다.

다음으로 신뢰할 수 있는 인증서를 KeyStore에 추가하고 또 다른 신뢰할 수 있는 인증서를 KeyStore에 추가한 다음 키 쌍에 대한 서버의 SSL 인증서 가져오기를 시도했습니다.

이 시점에서 생성된 SSL 인증서가 완전히 다른 키 쌍을 위한 것이기 때문에 실패하고 있습니다. 우리가 가지고 있는 세 가지 인증서에는 다음이 포함됩니다.

  1. 웹 서비스의 SSL 인증서
  2. SSL 인증서에 서명한 CA 인증서
  3. CA에 서명한 루트 인증서

이제 TrustStore에 트러스트 앵커를 추가해야 합니다. 기본적으로 ${JAVA_HOME}/jre/lib/security/cacerts이며 결과적으로 클라이언트가 웹 서비스의 SSL 인증서를 수락합니다.

SSL 핸드셰이크 중에 SSL 서버는 루트 인증서를 제외한 전체 체인을 클라이언트로 보냅니다. 따라서 다음과 같이 신뢰 저장소에 루트 인증서를 추가해야 합니다.

keytool -import -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file CCA_Certificate.cer -alias CCARoot

웹 서비스에 SSL 클라이언트 인증이 필요한 경우 몇 가지 추가 단계가 필요합니다. 클라이언트 인증을 언급한 적이 없다면 이는 불필요합니다.

이것이 우리의 경우 오류를 수정하는 방법이지만 다른 상황에 처한 경우 시도할 수 있는 다른 솔루션이 있습니다.

  1. 이 오류를 제거하려면 동일한 실제 키 쌍을 사용하여 인증서를 다시 생성해야 합니다.
  2. JKS 저장소를 생성하고 인증서를 가져오는 동안 동일한 별칭을 사용하여 오류가 발생하는 경우가 있습니다. 그런 다음 오류를 해결하려면 별칭을 변경해야 합니다.
  3. 루트 CA의 인증서가 체인에서 누락되지 않았는지 확인하십시오.
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - Java Error