Author: bdonlan
Date: 2005-06-21 16:05:46 -0400 (Tue, 21 Jun 2005)
New Revision: 791

Added:
   trunk/java/TODO
   trunk/java/src/org/haverdev/javer2/TrustManagerLoader.java
Modified:
   trunk/java/src/org/haverdev/javer2/JaverForm.java
Log:
Allow the user to specify a source for trust material

Added: trunk/java/TODO
===================================================================
--- trunk/java/TODO     2005-06-21 18:42:08 UTC (rev 790)
+++ trunk/java/TODO     2005-06-21 20:05:46 UTC (rev 791)
@@ -0,0 +1,3 @@
+* applet frame
+* allow user to overrride SSL cert handling (will require X509TrustManager
+  wrapper)

Modified: trunk/java/src/org/haverdev/javer2/JaverForm.java
===================================================================
--- trunk/java/src/org/haverdev/javer2/JaverForm.java   2005-06-21 18:42:08 UTC 
(rev 790)
+++ trunk/java/src/org/haverdev/javer2/JaverForm.java   2005-06-21 20:05:46 UTC 
(rev 791)
@@ -22,20 +22,6 @@
  */
 public class JaverForm extends javax.swing.JPanel {
     
-    static final TrustManager[] trustAllCerts = new TrustManager[]{
-        new X509TrustManager() {
-            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
-                return null;
-            }
-            public void checkClientTrusted(
-                java.security.cert.X509Certificate[] certs, String authType) {
-            }
-            public void checkServerTrusted(
-                java.security.cert.X509Certificate[] certs, String authType) {
-            }
-        }
-    };
-    
     String host;
     int port;
     Thread connectThread = null;
@@ -92,25 +78,41 @@
         }
     }
     
+    static final String usage = "Usage: [...] org.haverdev.javer2.JaverForm 
[-ssl keystore password] host port";
+    
+    static final void usage() {
+        System.err.println(usage);
+        System.exit(1);
+    }
+            
     public final static void main(final String[] args) throws Throwable {
-        if (args.length != 2 && (args.length != 3 || !args[0].equals("-ssl"))) 
{
-            System.err.println("Usage: [...] org.haverdev.javer2.JaverForm 
[-ssl] host port");
-            System.exit(1);
-        }
+
+        if (args.length == 0)
+            usage();
         
-        final boolean ssl = args.length == 3;
-        final String host = args[args.length - 2];
-        final int port = Integer.decode(args[args.length - 1]).intValue();
+        final boolean ssl = args[0].equals("-ssl");
+        
+        if (ssl && args.length != 5)
+            usage();
+        if (!ssl && args.length != 2)
+            usage();
+        
         SocketFactory sf_;
         if (ssl) {
+            TrustManager[] tms = TrustManagerLoader.fromKeystoreStream(
+                    new FileInputStream(args[1]), args[2].toCharArray(),
+                    java.security.KeyStore.getDefaultType()
+                    );
             SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, trustAllCerts, new java.security.SecureRandom());
+            sc.init(null, tms, new java.security.SecureRandom());
             sf_ = sc.getSocketFactory();
-        } else {
-            sf_ = SocketFactory.getDefault();
-        }
-        final SocketFactory sf = sf_;
+        } else sf_ = SocketFactory.getDefault();
         
+        final String host = args[args.length - 2];
+        final int port = Integer.decode(args[args.length - 1]).intValue();
+
+        final SocketFactory sf = sf_; // for anonymous class
+        
         javax.swing.SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                 JFrame f = new JFrame("test");

Added: trunk/java/src/org/haverdev/javer2/TrustManagerLoader.java
===================================================================
--- trunk/java/src/org/haverdev/javer2/TrustManagerLoader.java  2005-06-21 
18:42:08 UTC (rev 790)
+++ trunk/java/src/org/haverdev/javer2/TrustManagerLoader.java  2005-06-21 
20:05:46 UTC (rev 791)
@@ -0,0 +1,43 @@
+/*
+ * TrustManagerFactory.java
+ *
+ * Created on June 21, 2005, 3:48 PM
+ *
+ * To change this template, choose Tools | Options and locate the template 
under
+ * the Source Creation and Management node. Right-click the template and choose
+ * Open. You can then make changes to the template in the Source Editor.
+ */
+
+package org.haverdev.javer2;
+import javax.net.ssl.*;
+import java.security.*;
+import java.security.cert.*;
+import java.io.*;
+
+/**
+ *
+ * @author bdonlan
+ */
+public final class TrustManagerLoader {
+    
+    /** Creates a new instance of TrustManagerFactory */
+    private TrustManagerLoader() {
+    }
+    
+    static TrustManager[] fromKeystoreStream(InputStream s, char[] password, 
String storeType)
+        throws KeyStoreException, IOException, NoSuchAlgorithmException,
+               CertificateException
+    {
+        KeyStore store = KeyStore.getInstance(storeType);
+        store.load(s, password);
+        return fromKeystore(store);
+    }
+    
+    static TrustManager[] fromKeystore(KeyStore store)
+        throws NoSuchAlgorithmException, KeyStoreException
+    {
+        TrustManagerFactory f = 
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+        f.init(store);
+        return f.getTrustManagers();
+    }
+}


Property changes on: trunk/java/src/org/haverdev/javer2/TrustManagerLoader.java
___________________________________________________________________
Name: svn:eol-style
   + native


Reply via email to