2011-12-04 5 views
9

매일 파일을 업데이트하는 XML 파일을 구문 분석하려고합니다. 그들은 자신의 인증서 (https://...)를 사용하며 특정 URL을 사용할 수 없으며 http : // ... 링크를 사용할 수 없습니다.javax.net.ssl.SSLException : java.security.InvalidAlgorithmParameterException : trustAnchors 매개 변수가 비어 있어야합니다.

javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

나는 이러한 종류의 연결 또는 개인 서버에서 처리하는 다양한 클래스를 만드는 다루는 제안의 다양성을 본 적이 : 내 테스트를 실행하는 동안

URL url = new URL("https://..."); 
... 
Document document = db.parse(url.openStream()); 

이 코드는 다음과 같은 예외를 throw , 키 스토어에 인증서를 추가 한 다음 Java 프로젝트에 키 스토어를 추가하는 작업을 수행 할 수 없었지만 XML 온라인 액세스에 대해 약간 더 간단한 방법을 찾고 있습니다.

+0

같습니다 기본 것들을 사용하지 않는 사용자의 신뢰 설정을 변경 것 같은. 뭐가 바뀌 었니? – Bruno

+1

이것은 기본 신뢰 저장소를 제거하는 효과가 있으므로 빈 trustAnchors 매개 변수가 있습니다. 항상 비어 있지 않은 트러스트 스토어 여야합니다. – Bruno

+0

See this [answer] [1] 즉, 키 저장소를 찾을 수 없습니다. [1] : http://stackoverflow.com/a/6788682/207131 – FabienB

답변

3

이 호기심 메시지는 트러스트 스토어를 찾을 수 없다는 것을 의미합니다.

XML BTW와는 아무런 관련이 없습니다.

+0

트러스트 스토어를 추가하고 관리하려면 어떻게해야합니까? – Acetaminophen

+0

@Acetaminophen Javadoc : Security/JSSE 참조 가이드를 참조하십시오. – EJP

+0

이전에 키 저장소에 가지고있는 인증서를 추가하기 위해 /lib/security/cacerts를 /lib/security/cacerts_orig로 이름을 바꿨습니다.이를 해결했고 다음 오류가 발생했습니다 : javax.net.ssl .SSLHandshakeException : sun.security.validator.ValidatorException : PKIX 패스 구축 실패 : sun.security.provider.certpath.SunCertPathBuilderException : 요청한 대상 – Acetaminophen

9

SSL 인증서를 저장하려면 트러스트 스토어가 필요합니다. 원하는 웹 브라우저를 사용하여 인증서를 다운로드 할 수 있습니다. 인증서를 truststore에로드하려면 JDK와 함께 제공되는 "keytool"프로그램이 필요합니다. 예를 들어

인증서 파일이 "certificate.crt"라는 당신은 다음과 같이 키 도구 호출 할 수 있습니다 "secure.ts"라는 이름의 신뢰를 작성하려는 경우 :

keytool -importcert -keystore secure.ts -storepass S3cuR3pas$! -file certificate.crt 

을 지금, 당신은해야합니다 연결

URL url = new URL("https://..."); 

System.setProperty("javax.net.ssl.trustStore", "secure.ts"); 
System.setProperty("javax.net.ssl.trustStorePassword", "S3cuR3pas$!"); 
... 
Document document = db.parse(url.openStream()); 
-3

을하기 전에 시스템 속성 "정보 javax.net.ssl.trustStore"및 "javax.net.ssl.trustStorePassword의"를 정의 열고, 키 스토어가 어디 있는지 프로그램을 말해 암호를 엽니 다 나는 같은 예외를 만났다. 내 MAC OSX (Yosemite)에서 Java 6 응용 프로그램을 개발하고 있습니다. 당신은 다운로드 OSX 2014 년 애플의 자바를 설치해야합니다

http://support.apple.com/kb/DL1572

0

당신이 함께 시도 할 수 있습니다 :

String javaHomePath = System.getProperty("java.home"); 
String keystore = javaHomePath + "/lib/security/cacerts"; 
String storepass= "changeit"; 
String storetype= "JKS"; 

String[][] props = { 
    { "javax.net.ssl.trustStore", keystore, }, 
    { "javax.net.ssl.keyStore", keystore, }, 
    { "javax.net.ssl.keyStorePassword", storepass, }, 
    { "javax.net.ssl.keyStoreType", storetype, }, 
}; 
for (int i = 0; i < props.length; i++) { 
    System.getProperties().setProperty(props[i][0], props[i][1]); 
} 
// Now you can proceed to connect to call the webservice. 
// SSL will be used automatically if the service endpoint url 
// starts with <a href="https://." target="_blank"   rel="nofollow">https://.</a> 
// The server will send its certificate signed by verisign and 
// client will trust and authenticate the server as it recognizes 
// verisign as one trusted root. 
관련 문제