2017-03-31 4 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(); 
} 

Ce code est exécuté correctement JDK8 mais si je tente de l'exécuter dans JDK7, il jette javax.net.ssl.SSLPeerUnverifiedException : exception homologue non homologue. J'ai essayé de google le problème. J'ai trouvé que nous pouvons écrire X509TrustManager et X509HostnameVerifier. J'ai essayé avec ces implémentations aussi, mais ne fonctionnait toujours pas. S'il vous plaît me suggérer comment puis-je l'exécuter dans JDK7. Encore une fois si j'exécuter le code avec X509TrustManager et X509HostnameVerifier, je reçois « java.net.SocketException: Connection reset »javax.net.ssl.SSLPeerUnverifiedException: peer non authentifié jdk7 mais pas dans jdk8

Répondre

0

Je viens récemment effectué des recherches et je veux ajouter ceci - Support pour TLS 1.2 est apparu en 7 JDK Pour des raisons de compatibilité, il est activé par défaut sur les sockets du serveur mais désactivé sur les clients. Pour le changer, j'ai écrit le code suivant et cela a fonctionné pour moi:

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());