HTTPSClient.java

package fr.umlv.ji.tcp.client.https;
import java.io.*;
import java.net.URL;
import javax.net.ssl.*;
import java.util.prefs.*;
import java.security.GeneralSecurityException;
import fr.umlv.ji.ssl.SSLHelper;

public class HTTPSClient {
  public final static int BUFFER_SIZE = 1024;
  public static void main(String[] args)
    throws IOException, GeneralSecurityException {
    if(args.length != 1) {
      System.err.println("Usage: java " +
             HTTPSClient.class.getName() +
             " <https://...>");
      System.exit(1);
    }
    Preferences prefs = Preferences.userNodeForPackage(HTTPSClient.class);
    String keyStore = prefs.get("keyStore",null);
    char[] keySecret =
      prefs.get("keySecret", "keySecret").toCharArray();
    char[] keyPassword =
      prefs.get("keyPassword", "keyPassword").toCharArray();
    String trustStore = prefs.get("trustStore","trustStore");
    char[] trustSecret =
      prefs.get("trustSecret", "trustSecret").toCharArray();
    // Création de l'URL 
    URL url = new URL(args[0]);
    // Récupération de l'objet connexion 
    HttpsURLConnection connection =
      (HttpsURLConnection) url.openConnection();
    // Définition du contexte SSL
    SSLContext context;
    if(keyStore == null) {
      context = SSLHelper.getSSLContext(trustStore,trustSecret);
    } else {
      context = SSLHelper.getSSLContext(keyStore, keySecret, keyPassword,
                    trustStore, trustSecret);
    }
    // Affectation du contexte SSL  à cette connexion
    connection.setSSLSocketFactory(context.getSocketFactory());
    // Affectation d'un vérificateur d'hôte basé sur le nom canonique 
    connection.setHostnameVerifier(new CanonicalHostnameVerifier());
    // Connexion
    connection.connect();
    // Récupération et affichage du contenu de la ressource
    InputStream in = new BufferedInputStream(connection.getInputStream());
    int length = connection.getContentLength();
    byte[] buffer = new byte[BUFFER_SIZE];
    int nb;
    for(;length!=0;length-=nb) {
      nb = in.read(buffer);
      if(nb == -1) {
    break;
      }
      System.out.write(buffer, 0, nb);
    }
  }
}