Author: veithen
Date: Fri May 29 15:51:04 2009
New Revision: 780019
URL: http://svn.apache.org/viewvc?rev=780019&view=rev
Log:
Added some basic support for SSL.
Added:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
(with props)
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java
Fri May 29 15:51:04 2009
@@ -16,10 +16,15 @@
package org.apache.ws.commons.tcpmon.core;
+import javax.net.ServerSocketFactory;
+import javax.net.SocketFactory;
+
import org.apache.ws.commons.tcpmon.core.filter.throttle.ThrottleConfiguration;
public class Configuration implements Cloneable {
+ private ServerSocketFactory serverSocketFactory;
private int listenPort;
+ private SocketFactory socketFactory;
private String targetHost;
private int targetPort;
private boolean proxy;
@@ -51,6 +56,14 @@
}
}
+ public ServerSocketFactory getServerSocketFactory() {
+ return serverSocketFactory != null ? serverSocketFactory :
ServerSocketFactory.getDefault();
+ }
+
+ public void setServerSocketFactory(ServerSocketFactory
serverSocketFactory) {
+ this.serverSocketFactory = serverSocketFactory;
+ }
+
public int getListenPort() {
return listenPort;
}
@@ -59,6 +72,14 @@
this.listenPort = listenPort;
}
+ public SocketFactory getSocketFactory() {
+ return socketFactory != null ? socketFactory :
SocketFactory.getDefault();
+ }
+
+ public void setSocketFactory(SocketFactory socketFactory) {
+ this.socketFactory = socketFactory;
+ }
+
public String getTargetHost() {
return targetHost;
}
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java
Fri May 29 15:51:04 2009
@@ -31,6 +31,8 @@
import java.io.OutputStream;
import java.net.Socket;
+import javax.net.SocketFactory;
+
/**
* a connection listens to a single current connection
*/
@@ -103,6 +105,7 @@
String HTTPProxyHost = config.getHttpProxyHost();
int HTTPProxyPort = config.getHttpProxyPort();
ThrottleConfiguration throttleConfig =
config.getThrottleConfiguration();
+ final SocketFactory socketFactory = config.getSocketFactory();
String fromHost;
if (inSocket != null) {
fromHost = (inSocket.getInetAddress()).getHostName();
@@ -130,7 +133,7 @@
protected void handleConnection(String host, int port) {
requestResponse.setTarget(host, port);
try {
- outSocket = new Socket(host, port);
+ outSocket = socketFactory.createSocket(host, port);
} catch (IOException ex) {
throw new StreamException(ex);
}
@@ -139,7 +142,7 @@
} else {
requestResponse.setTarget(targetHost, targetPort);
requestFilter.addHandler(new HttpHeaderRewriter("Host",
targetHost + ":" + targetPort));
- outSocket = new Socket(targetHost, targetPort);
+ outSocket = socketFactory.createSocket(targetHost, targetPort);
}
// We log the request data at this stage. This means that the user
will see the request
// as if it had been sent directly from the client to the server
(without TCPMon or a proxy
@@ -147,7 +150,7 @@
requestPipeline.addFilter(new
Tee(requestResponse.getRequestOutputStream()));
if (HTTPProxyHost != null) {
requestFilter.addHandler(new
HttpProxyClientHandler(targetHost, targetPort));
- outSocket = new Socket(HTTPProxyHost, HTTPProxyPort);
+ outSocket = socketFactory.createSocket(HTTPProxyHost,
HTTPProxyPort);
}
if (throttleConfig != null) {
requestPipeline.addFilter(new Throttle(throttleConfig));
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java
Fri May 29 15:51:04 2009
@@ -21,6 +21,8 @@
import java.util.Iterator;
import java.util.Vector;
+import javax.net.ServerSocketFactory;
+
/**
* wait for incoming connections, spawn a connection thread when
* stuff comes in.
@@ -37,6 +39,8 @@
*/
AbstractListener listener;
+ private final ServerSocketFactory serverSocketFactory;
+
/**
* Field port
*/
@@ -55,8 +59,9 @@
* @param l
* @param p
*/
- public SocketWaiter(AbstractListener l, int p) {
+ public SocketWaiter(AbstractListener l, ServerSocketFactory
serverSocketFactory, int p) {
listener = l;
+ this.serverSocketFactory = serverSocketFactory;
port = p;
start();
}
@@ -67,7 +72,7 @@
public void run() {
try {
listener.onServerSocketStart();
- sSocket = new ServerSocket(port);
+ sSocket = serverSocketFactory.createServerSocket(port);
for (; ;) {
Socket inSocket = sSocket.accept();
if (pleaseStop) {
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java
Fri May 29 15:51:04 2009
@@ -387,12 +387,12 @@
}
public void start() {
- int port = Integer.parseInt(portField.getText());
+ Configuration config = getConfiguration();
+ int port = config.getListenPort();
portField.setText("" + port);
portTabItem.setText(TCPMonBundle.getMessage("port01", "Port") + " " +
port);
- int tmp = Integer.parseInt(tPortField.getText());
- tPortField.setText("" + tmp);
- sw = new SocketWaiter(this, port);
+ tPortField.setText("" + config.getTargetPort());
+ sw = new SocketWaiter(this, config.getServerSocketFactory(), port);
stopButton.setText(TCPMonBundle.getMessage("stop00", "Stop"));
portField.setEditable(false);
hostField.setEditable(false);
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java
Fri May 29 15:51:04 2009
@@ -16,6 +16,8 @@
package org.apache.ws.commons.tcpmon;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
@@ -42,6 +44,7 @@
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.security.GeneralSecurityException;
/**
* this is the admin page
@@ -112,6 +115,10 @@
* Field delayBox
*/
public JCheckBox delayBox;
+
+// private final JCheckBox incomingSSLBox;
+
+ private final JCheckBox outgoingSSLBox;
/**
* Constructor AdminPage
@@ -356,7 +363,13 @@
}
}
});
-
+
+ // SSL options
+ c.anchor = GridBagConstraints.WEST;
+ c.gridwidth = GridBagConstraints.REMAINDER;
+// opts.add(incomingSSLBox = new JCheckBox("Use SSL for incoming
connections"), c); // TODO: i18n
+ opts.add(outgoingSSLBox = new JCheckBox("Use SSL for outgoing
connections"), c); // TODO: i18n
+
// Spacer
// ////////////////////////////////////////////////////////////////
mainPane.add(Box.createRigidArea(new Dimension(1, 10)), c);
@@ -427,6 +440,16 @@
config.setHttpProxyPort(Integer.parseInt(text));
}
+ if (outgoingSSLBox.isSelected()) {
+ try {
+ SSLContext ctx = SSLContext.getInstance("SSL");
+ ctx.init(null, new TrustManager[] { new
NoValidateCertTrustManager() }, null);
+ config.setSocketFactory(ctx.getSocketFactory());
+ } catch (GeneralSecurityException ex) {
+ throw new Error(ex);
+ }
+ }
+
return config;
}
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java
Fri May 29 15:51:04 2009
@@ -427,13 +427,13 @@
*/
public void start() {
if (sw == null) {
- int port = Integer.parseInt(portField.getText());
+ Configuration config = getConfiguration();
+ int port = config.getListenPort();
portField.setText("" + port);
int i = notebook.indexOfComponent(panel);
notebook.setTitleAt(i, TCPMonBundle.getMessage("port01", "Port") +
" " + port);
- int tmp = Integer.parseInt(tPortField.getText());
- tPortField.setText("" + tmp);
- sw = new SocketWaiter(this, port);
+ tPortField.setText("" + config.getTargetPort());
+ sw = new SocketWaiter(this, config.getServerSocketFactory(), port);
startButton.setSelected(true);
portField.setEditable(false);
hostField.setEditable(false);
Added:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java?rev=780019&view=auto
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
(added)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
Fri May 29 15:51:04 2009
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ws.commons.tcpmon;
+
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.X509TrustManager;
+
+/**
+ * Trust manager accepting any certificate.
+ */
+public class NoValidateCertTrustManager implements X509TrustManager {
+ public void checkClientTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ // Do nothing: we accept any certificate
+ }
+
+ public void checkServerTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ // Do nothing: we accept any certificate
+ }
+
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+}
Propchange:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
------------------------------------------------------------------------------
svn:eol-style = native