2017-03-31 2 views
0
HttpClient =new DefaultHttpClient(); 
HttpPost post = new HttpPost("https://myulr/token"); 
post.addHeader("Content-Type", "application/x-www-form-urlencoded"); 
List<BasicNameValuePair> parametersBody = new ArrayList<BasicNameValuePair>(); 
parametersBody.add(new BasicNameValuePair("client_id","my-client-id")); 
parametersBody.add(new BasicNameValuePair("client_secret","my-secret-key")); 
parametersBody.add(new BasicNameValuePair("scope","my-scope")); 
parametersBody.add(new BasicNameValuePair("grant_type","client_credentials")); 
try{ 
    post.setEntity(new UrlEncodedFormEntity(parametersBody)); 
    HttpResponse httpResponse = httpClient.execute(post); 
    int code = httpResponse.getStatusLine().getStatusCode(); 
    System.out.println("Code::::: "+code); 
    String result=EntityUtils.toString(httpResponse.getEntity()); 
    System.out.println("Result: "+result); 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

에이 코드는 제대로 JDK8에서 실행되지하지만 JDK7에서 그것을 실행하려고하면, 그것은 javax.net.ssl.SSLPeerUnverifiedException을 던지고있다 : 피어 인증되지 않은 예외입니다. 나는 문제를 Google에 시도했다. X509TrustManager 및 X509HostnameVerifier를 작성할 수 있다는 것을 알았습니다. 나는 이러한 구현을 시도했지만 여전히 작동하지 않았다. 어떻게 JDK7에서 실행할 수 있는지 제안 해주십시오. 첫째 JDK 7에 출연 TLS 1.2 지원 -javax.net.ssl.SSLPeerUnverifiedException : jdk7에 인증되지 피어하지만 jdk8

답변

0

난 그냥 최근에이 연구 : "연결 재설정 java.net.SocketException의는"나는이를 추가 할 내가 X509TrustManager의와 X509HostnameVerifier와 코드를 실행 다시, 내가 무엇입니까 호환성을 위해 기본적으로 서버 소켓에서 활성화되지만 클라이언트에서는 비활성화됩니다. 변경하려면 다음 코드를 작성하고 나를 위해 일했습니다 :

HttpClient base = new DefaultHttpClient(); 
SSLContext ctx = SSLContext.getInstance("TLSv1.2"); 
X509TrustManager tm = new X509TrustManager() { 
    public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException { 
    } 
    public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException { 
    } 
    public X509Certificate[] getAcceptedIssuers() { 
     return null; 
    } 
}; 
X509HostnameVerifier verifier = new X509HostnameVerifier() { 
    @Override 
    public void verify(String string, X509Certificate xc) throws SSLException { 
    } 
    @Override 
    public void verify(String string, String[] strings, String[] strings1) throws SSLException { 
    } 
    @Override 
    public boolean verify(String string, SSLSession ssls) { 
     return true; 
    } 
    @Override 
    public void verify(String arg0, SSLSocket arg1) throws IOException { 
    } 
}; 
ctx.init(null, new TrustManager[]{tm}, null); 
SSLSocketFactory ssf = new 
SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
ssf.setHostnameVerifier(verifier); 
ClientConnectionManager ccm = base.getConnectionManager(); 
SchemeRegistry sr = ccm.getSchemeRegistry(); 
sr.register(new Scheme("https", ssf, 443)); 
httpClient = new DefaultHttpClient(ccm, base.getParams()); 
관련 문제