브라우저와 java7이 영향을받지 않는 이유는 SSL 정보의 일부로 서버 이름 표시 -SNI를 보내기 때문입니다. 따라서 apache는 SSL 핸드 셰이크를 시작하기 전에 가상 호스트가 사용할 호스트를 알고 적절한 인증서를 반환합니다. Java 6은 SNI를 지원하지 않습니다. 당신이 코드를 볼 수 있듯이 내 질문은 그래서, 어떻게 확인하고 인증서가 나는 웹 서비스를 소비하는 봄 클라이언트를 만든 6.JAVA 6는 SNI를 지원하지 않습니다. TLS를 통해 SSL 인증서를 확인하고 수락하는 다른 방법은 없습니까?
자바에서 허용 될 수있게 않습니다, 나는 여기, 내 코드
public class classname1 {
static {
System.setProperty("javax.net.ssl.trustStore", "E://Workspace//keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
System.setProperty("https.protocols", "SSLv3");
System.setProperty("https.protocols", "TLSv1");
}
static {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
{
public boolean verify(String hostname, SSLSession session)
{
if (hostname.equals("192.168.10.22"))
return true;
return false;
}
});
}
private static void main(String[] args) {
try {
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
String url = "https://192.168.10.22/getInformationSearch.asmx?wsdl";
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);
printSOAPResponse(soapResponse);
soapConnection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static SOAPMessage createSOAPRequest() throws Exception {
// ... Code for request, which will be hitted to url
}
private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception {
// ... Code for response, which will fetch information from webservice
// URL
}
}
입니다 두 가지 방법, 1. Request 용 createSOAPRequest()
2. 응답 용 printSOAPResponse()
. 요청을 생성하고 HttpsURLConnection.setDefaultHostnameVerifier()
방법 위와 같이이 정적 블록 간다 그 후 소정 url SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);
해당 요청을 전송할 것이다 라인 아래 main()
방법
디버거는 다음과 같이 말합니다. ssl 핸드 셰이크에 실패했으며 SSL 피어가 잘못 종료되었습니다. 자바 6에서만 발생하지만이 코드는 자바 7/8에서 제대로 작동합니다. 대신 정적 블록의
, 나는 자바 6HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName,
SSLSession session) {
return true;
}
};
코드 아래에 시도하지만 어쨌든 작동하지 않습니다!
다음 jar xercesImpl.jar, saaj-api.jar, saaj-impl.jar, spring-ws-core-1.5.6.jar, spring-ws-security-1.5.6.jar 및 인증서를 사용하고 있습니다. 이 SSL 도메인은 keystore로 가져 왔고 java7/8에서 작동하므로 truststore에 문제가 없습니다. (나는 java 6과 7의 keytool을 사용하여 2 개의 인증서를 만들었고, 둘 다 java7/8에서는 제대로 작동하지만 6에서는 작동하지 않는다.)
나는이 thread을 따라 갔지만 제대로 작동하지는 않는다. 그래서 인증서를 확인하고 자바 6 환경에서 응답을 얻는 다른 방법이 있습니까, 아니면 JAR을 변경해야합니까?