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