SSLHandshakeException lorsque j'essaie d'envoyer un get ou post https demande de ma webapp dans le serveur tomcat
Follwing exception est levée lors de l'envoyer https demande de ma webapp dans le serveur tomcat
javax.net.le protocole ssl.SSLHandshakeException: le soleil.de sécurité.programme de validation.ValidatorException: PKIX chemin d'accès du bâtiment a échoué: le soleil.de sécurité.fournisseur de.certpath.SunCertPathBuilderException: impossible de trouver le chemin de certification valide pour demandé cible
voici mon servelet
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package LBS;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.Proxy;
import java.net.SocketAddress;
import java.net.URL;
import java.net.URLConnection;
import javax.net.ssl.HttpsURLConnection;
//import javax.net.ssl.SSLContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.X509Certificate;
import javax.net.*;
import javax.net.ssl.*;
import java.security.cert.*;
/**
*
* @author Ruwan
*/
public class LBS2 extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
LBS2 s=new LBS2();
s.myReq();
} finally {
out.close();
}
}
public void myReq(){
System.setProperty("https.proxyHost", "10.48.242.90");
System.setProperty("https.proxyPort", "3128");
String uri = "https://somthing.com/abc?username=USERNAME&password=PASWORD";
try{
SSLContext sslctx = SSLContext.getInstance("SSL");
sslctx.init(null, new X509TrustManager[] { new MyTrustManager()}, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslctx.getSocketFactory());
URL url = new URL(uri);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setDoOutput(true);
con.connect();
if (con.getResponseCode() == HttpsURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new
InputStreamReader(con.getInputStream()));
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
con.disconnect();
}
catch(Exception e){
System.out.println(e.toString());
}
}
//<editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}//</editor-fold>
}
class MyTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String
authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String
authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
S'il vous plaît aidez-moi à trouver le problème avec SSL Certificat de manutention dans ce code
thnks à l'avance
- Avez-vous essayé ce Pas plus "impossible de trouver le chemin de certification valide de demande de cible" ?
- Non, je N'ai pas, je vais l'essayer. merci @Nishant . aussi pouvait-on s'il vous plaît dites-moi le mauvais avec le code ci-dessus lors de l'exécuter. Il est parfaitement travailler dans un programme java normal exécuter dans la JVM, mais pas dans le serveur tomcat comme une webapp
- hmm... c'est bizarre. Dans l'idéal, si vous vous connectez à la même (https), l'URL, vous devriez voir cette exception dans les deux -- application autonome, et webapp. J'ai ajouté la partie pertinente en réponse à expliquer que "comment ce qui arrive". Mais je ne suis pas certain pourquoi elle dépendra de conteneur qui s'exécute ce code.
Vous devez vous connecter pour publier un commentaire.
Ici ce qui pourrait aider: (extraits de http://code.naishe.in/2011/07/looks-like-article-no-more-unable-to.html )
PS: pour de long pour un commentaire, donc ajouté comme une réponse.
Votre truststore n'a pas confiance dans le certificat du serveur. Vous devez l'exporter à partir du serveur et de l'installer chez le client. Le lien d'autres ont posté montre une façon de le faire. Le vrai problème est probablement que le serveur utilise un certificat auto-signé à la place d'une autorité de certification-certificat signé, qui sont les causes de ce problème pour chaque client. La meilleure solution consiste à dépenser de l'argent et de le corriger.
Problème : Programme Java Normal fonctionné correctement
Mais webapp dans le serveur tomcat ne marchait pas bien que j'ai utilisé la même méthode/code
Solution:
J'ai donc configuré le serveur tomcat pour le Certificat SSL.
Si quelqu'un ayant le même problème.
Il suffit de configurer le serveur tomcat pour le Certificat SSL.
Ce sera utile pour configurer tomcat pour le Certificat SSL
Merci pour toutes les réponses et les commentaires. 🙂
J'ai eu le même problème avec la validation de la signature de certificat générique de symantec.
D'abord essayer de lancer votre application java avec -Djavax.net.debug=SSL pour voir ce qui se passe réellement.
J'ai fini par importer le certificat intermédiaire qui était à l'origine du cert de la chaîne de pause.
J'ai téléchargé les intermédiaires manquants cert de symantec (vous pouvez voir le lien de téléchargement de l'absence d'une cert dans le handshake ssl journal: http://svrintl-g3-aia.verisign.com/SVRIntlG3.cer dans mon cas).
Et j'ai importé le cert dans le keystore java. Après l'importation, le certificat intermédiaire de mon wildcard ssl cert enfin commencé à travailler:
vous avez besoin de retourner la valeur null pour contourner la validation de Certificat
null
à tous à partir de cette méthode: voir la Javadoc; c'est une violation de son contrat. 3. Il n'est pas correct d'écrire unTrustManager
qui fait confiance à quoi que ce soit, car elle viole le but entier de l'échange de certificats et SSL rend vulnérables à man-in-the-middle attaques. -1.