2014-10-29 1 views
4

내 응용 프로그램은 인증서를 사용하여 ID를 확인하는 SSL 웹 서비스에 연결합니다. 최근에이 인증서가 변경되었으며 신뢰할 수있는 기관에서 서명하지 않았기 때문에 응용 프로그램의 일부가 실패했습니다. 앞으로이 상황을 방지하기위한 서비스의 조언은 개별 인증서 대신 기존 인증서의 서명 기관을 신뢰해야한다는 것입니다.Java에서 인증 기관을 신뢰하는 방법은 무엇입니까?

Java로 어떻게 구현할 수 있습니까?

은 현재 내가 키 도구를 사용하고 같은 TrustManagerFactory에 뭔가를 구성하는 키 스토어에 그들이 제공하는 인증서를 추가 해요 :

public static TrustManager[] getTrustManagers() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException { 
    KeyStore tks = KeyStore.getInstance(KeyStore.getDefaultType()); 
    tks.load(StarTrustManagerFactory.class.getResourceAsStream("webservice.ks"), "password".toCharArray()); 
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
    tmf.init(tks); 
    return tmf.getTrustManagers(); 
}; 

을 트러스트하는 TrustManager을 반환하는이 방법을 적응의 방법이 있나요 내가 가지고있는 증명서의 서명 권한은? 또한, 내가 갖고있는 인증서에서 인증서의 서명자에 관한 정보를 어떻게 추출 할 수 있습니까?

감사합니다. Dan.

+0

http://javarevisited.blogspot.de/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html - 트러스트 스토어에 포함 된 모든 인증서를 신뢰합니다. – zapl

답변

2

인증서가 변경되기 전에 게시 된 코드가 작동한다고 가정하면 그대로 두십시오. 대신 webservice.ks 키 저장소를 수정하고 연결하려는 사이트의 중급 및 루트 CA 인증서를 가져옵니다.

웹 브라우저에서 주소를 방문하여 디스크에 저장하면 인증서를 가져올 수 있습니다. 파이어 폭스에서이 작업을 수행하는 방법은 https://superuser.com/a/97203/172370을 참조하십시오. 그러나 링크 된 지침의 4 단계에서 내보낼 루트 / ca 인증서를 선택합니다 (원하는 인증서 계층 구조 상자를 클릭).

.ks 파일이 jks 키 스토어라고 가정하고 keytool을 사용하여 인증서를 키 저장소로 가져옵니다.

업데이트 : 중간 인증서에 대한 내용을 무시하면 필요하지 않습니다 (Does a truststore need the sub-ca certificate? 참조). 루트 CA 인증서를 가져 오면됩니다.

+0

감사합니다. 나는 그것이 어떻게 작동해야하는지 지금 본다. 불행히도 브라우저를 사용하여 웹 서비스에 액세스하지 못하면 인증서 계층이 혼자가됩니다. 그래서 나는 그들에게 돌아가서 CA의 인증서 또는 루트/중개자를 요청해야합니까? 내가 사용해야하는 용어를 분명히하는 것. 감사! – Dan

+1

인증서가 CA에 의해 생성되지 않았거나 웹 서버가 올바르게 구성되지 않은 것 같습니다. 웹 서비스 관리자에게이 값을 올려야 할 수도 있습니다. – poida

관련 문제