2012-11-07 5 views
2

로컬 개발 컴퓨터에 유효한 키 저장소가 있습니다. 여기에는 HTTPS를 통해 웹 서비스에 액세스하기위한 인증서가 들어 있습니다.자바 키 스토어 복사

System.setProperty("javax.net.ssl.truststore", "C:\\<workspaceprojectPath>\\SIPkeystore\\truststore.jks"); // sollte wohl auch ohne Keystore klappen 
System.setProperty("javax.net.ssl.keyStore", "C:\\<workspaceprojectPath>\\SIPkeystore\\SIPkeystore.jks"); 
System.setProperty("javax.net.ssl.keyStorePassword", "SECRET"); 

가 지금은 다른 프로젝트에서 해당 인증서에 액세스하려면 :

나는 통해 내 프로젝트에이 키 스토어에 액세스 할 수 있습니다. 다른 (로컬) 프로젝트 디렉토리의 키 스토어에 동일한 (전체) 경로를 제공합니다.

분명히 경로는 여전히 jvm에서 발견되며 속성이 설정되지만 웹 서비스에 액세스 할 때 키 스토어를 추가하지 않은 것과 같은 오류 메시지가 표시됩니다.

언제 얻을 응용 프로그램을 실행하려고

sun.security.validator.ValidatorException: PKIX path building failed: 
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid 
    certification path to requested target 

기존 키 스토어를 복사 할 가능성이 있습니까? 응용 프로그램을 서버에 배포 할 때도 중요합니다. 응용 프로그램은 독립 실행 형 jar로 실행됩니다. (어떤 웹 서버)

편집 : 좋아, 키 스토어를 복사하는 것은 내가 원래 키 스토어 파일의 로컬 복사본을 사용하는 동안 원래의 응용 프로그램을 실행할 수 있어요으로 문제 될 것 같지 않습니다. 구성 문제 인 것처럼 보입니다.

+0

두 번째 프로젝트에서 동일한 웹 서비스에 연결 하시겠습니까? – user1516873

+0

서명 인증서가 keyStore가 아닌 trustStore에 추가 되었습니까? (내가이 일을했기 때문에 물어 보았는데 왜 작동하지 않는지 궁금 했었습니다!) –

+0

@Devon_C_Miller : 키 스토어에 추가했습니다. 키 저장소가 신뢰할 수 있는지 확인하기 위해 트러스트 스토어가 거기에 있다고 생각했습니다. 더 자세히 설명해 주시겠습니까? 감사합니다 – LuigiEdlCarno

답변

2

우선 웹 서비스에 클라이언트 인증서가 필요없는 경우 (즉, 자신을 소개하는 경우) 키 스토어가 필요하지 않습니다. 신뢰 저장소 만 있으면됩니다.

다른 프로젝트가 트러스트 스토어에 액세스 할 수 없으므로 운동을 위해 C:\<workspaceprojectPath>\SIPkeystore\truststore.jks을 열고 처음 몇 바이트를 읽으십시오. 당신이 성공하면, 다른 프로젝트는 기본값으로 설정 다른 신뢰를 가지고 있음을 의미하는 경우 시도에 너무 : 또한

System.out.println(System.getProperty("javax.net.ssl.trustStore")); 

, 자바는 대소 문자를 구분, 당신은 javax.net.ssl.truststore 재산 대신 지정을 염두에 곰 javax.net.ssl.trustStore. 이 문제도 해결하십시오.

+0

CA 인증서가 포함 된 새 트러스트 스토어를 만들었습니다. 그런 다음 javax.net.ssl.trustStore 및 ... trustStorePassword (키 스토어를 지정하지 않고)를 지정하고 내 이클립스 (두 프로젝트의 동일한 트러스트 스토어에 대한 절대 경로)에서 두 프로젝트의 매력처럼 작동했습니다. 도움을 주셔서 감사합니다. – LuigiEdlCarno

+0

@LuigiEdlCarno 환영합니다! –

4

기존 키 저장소를 복사 할 수 있습니까?

예. 파일 시스템의 관점에서 이것은 단지 하나의 파일 일뿐입니다. 관련 속성이 올바르게 다른 프로젝트에 설정되지 않은

  • :

    나는 문제가 다음 중 하나라고 상상한다.

  • 다른 JVM에서 키 스토어 파일을 찾을 수 없습니다 (예 : chrooting 등으로 인해)
  • 다른 JVM에 키 저장소 파일을 액세스/읽기하는 데 필요한 권한이 없습니다.
  • 읽기 액세스가 (예를 들어) SELinux에 의해 차단되고 있습니다.
+0

답변 해 주셔서 감사합니다. 위의 코드를 프로젝트 1에서 프로젝트 2로 복사 했으므로 속성을 적절히 설정해야합니다. 나는 그것을 점검 할 것이다. JVM은 Project 1과 동일합니다. 속성을 존재하지 않는 경로로 설정하면'keystore not found' 예외가 발생합니다. 나는 이클립스에서 두 프로젝트를 모두 실행한다. 그들은 같은 작업 공간에 있습니다. 그것은 이상한 일입니다. – LuigiEdlCarno

0

valicert 클래스 3 CA 인증서가 기본 신뢰 저장소에 없습니다 (JRE lib/security 디렉토리의 cacerts 파일이지만 전체 내용은 JSSE documentation 참조).

나는 자신의 truststore 파일 (cacerts 파일의 복사본이 될 수 있음)을 만들어 valicert 루트 ca를 추가해야한다고 생각합니다. 그런 다음 javax.net.ssl.trustStore 시스템 특성으로이 파일을 가리 키십시오.

관련 문제