SSL - SERVEUR HTTP/S AVEC CERTIFICAT

Signaler
Messages postés
99
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
9 avril 2009
-
shiva426
Messages postés
1
Date d'inscription
jeudi 5 juillet 2007
Statut
Membre
Dernière intervention
5 juillet 2007
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29581-ssl-serveur-http-s-avec-certificat

shiva426
Messages postés
1
Date d'inscription
jeudi 5 juillet 2007
Statut
Membre
Dernière intervention
5 juillet 2007

Bravo neodante ton code m'a été bien utile pour comprendre !!
cs_demo2000
Messages postés
8
Date d'inscription
mercredi 13 septembre 2006
Statut
Membre
Dernière intervention
5 décembre 2006

Pour ton code : http://www.javafr.com/codes/CONNEXION-TRAVERS-PROXY-HTTP-FTP_40511.aspx, j'ai poster labà une petite remarque labà :).

Concernant notre sujet, noilà mon problème :
Je suis entrain de developper un client java qui se connecte a une servlet (web service) en HTTPS / SSL , mon application passe par le proxy.

Voilà le code :

// Begin code

package sslproject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import javax.net.ssl.*;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;



public class HtpsConnection {
public static String urlHost ="https://X.X.X.X:443/PathServle";

public static void main (String[] args) throws IOException {
System.out.println(getPage(urlHost).toString());
}

public static StringBuffer getPage(String urlString)
{
public static String proxyPwd = "proxyPWD";
public static String proxyUser = "proxyUSER";
public static String proxyHost = "proxyIP";
public static int proxyPort = port_proxy;

System.getProperties().put("javax.net.debug", "ssl" );
System.getProperties().put("https.proxySet", "true");
System.getProperties().put("https.proxyHost", proxyHost);
System.getProperties().put("https.proxyPort", proxyPort);


TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public boolean checkClientTrusted(java.security.cert.X509Certificate[] chain){
return true;
}
public boolean isServerTrusted(java.security.cert.X509Certificate[] chain){
return true;
}
public boolean isClientTrusted(java.security.cert.X509Certificate[] chain){
return true;
}
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
}

};

try
{
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
catch(NoSuchAlgorithmException nsae)
{}
catch(KeyManagementException kme)
{
kme.printStackTrace();
}

try
{
HttpsURLConnection connec = null;
URL url = new URL(urlString);
connec = (HttpsURLConnection)url.openConnection();
connec.setDoInput(true);
connec.setUseCaches(false);

String authentication = proxyUser + ":" + proxyPwd;
String encodedPassword = "Basic " + new sun.misc.BASE64Encoder().encode(authentication.getBytes());
connec.setRequestProperty("Proxy-Authorization", encodedPassword);
//connec.setRequestProperty("X-TestHeader", "value");

connec.setRequestMethod("POST");
connec.setDoOutput(true);

String msg;

msg= "---"+"\r\n";

int statusCode = connec.getResponseCode();

//System.err.println("Certificats --->"+connec.getServerCertificates());
System.err.println("HEADER --->"+connec.getHeaderFields());

StringBuffer pageContents = new StringBuffer();
if(statusCode==HttpsURLConnection.HTTP_OK)
{
System.err.println("Connected ...!");

BufferedReader in = new BufferedReader(new InputStreamReader(connec.getInputStream()));

PrintWriter out = new PrintWriter(connec.getOutputStream(), true );
out.println(msg);

String curLine = in.readLine();
while(curLine!=null)
{
pageContents.append(curLine);
curLine = in.readLine();
}
}
return pageContents;
}
catch(MalformedURLException mue)
{
mue.printStackTrace();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}

return null;
}
}


// End code

a l'execution j'ai un message :

// begin message
HEADER --->{null=[HTTP/1.1 500 Internal Server Error], Content-Length=[101], Connection=[Close], Date=[Fri, 01 Dec 2006 11:38:11 GMT], Content-Type=[text/html]}

// End message

Sou unix/linx j'ai executer la command wget voilà le résultat :

// begin execute command in unix/linux
root@becane:~#wget X.X.X.X 443
...
Connecting to X.X.X.X:443... connected.
ERROR: Certificate verification error for X.X.X.X : unable to get local issuer certificate
ERROR: certificate common name `X.X.X.X' doesn't match requested host name `X.X.X.X:443'.
To connect to X.X.X.X:443 insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.
--17:19:09-- http://443/
=> `index.html.1'
Resolving 443... 0.0.1.187
Connecting to 443|0.0.1.187|:80... failed: Invalid argument.
FINISHED --17:19:09--
Downloaded: 0 bytes in 0 files


// End execute command in unix/linux

Apparament j'ai un problème de certificat !

Comment utiliser le certificat du serveur https dans le code client java ?
Et comment fait on pour l'obtenir ?

Est ce que quelqu'un peut m'expliquer comment résoudre le problème est établir une connexion https ?

Des exemples de code sa serai sympa.

Merci d'avance
cs_neodante
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
Ca tombe bien car c'est ma dernière source : http://www.javafr.com/codes/CONNEXION-TRAVERS-PROXY-HTTP-FTP_40511.aspx

++
cs_demo2000
Messages postés
8
Date d'inscription
mercredi 13 septembre 2006
Statut
Membre
Dernière intervention
5 décembre 2006

Merci pour le code.

Est ce qu'il n y a pas un exemple de code qui illustre comment un client java se connecte a un server HTTPS via le proxy ?