You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jakarta.apache.org by se...@apache.org on 2011/05/27 15:14:32 UTC
svn commit: r1128295 - in
/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http:
sampler/HTTPHC4Impl.java util/HC4TrustAllSSLSocketFactory.java
util/SlowHC4SSLSocketFactory.java
Author: sebb
Date: Fri May 27 13:14:32 2011
New Revision: 1128295
URL: http://svn.apache.org/viewvc?rev=1128295&view=rev
Log:
Refactor HC4 SSL factory setup
Added:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/HC4TrustAllSSLSocketFactory.java (with props)
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/SlowHC4SSLSocketFactory.java
Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1128295&r1=1128294&r2=1128295&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java Fri May 27 13:14:32 2011
@@ -29,7 +29,6 @@ import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.security.GeneralSecurityException;
-import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -66,9 +65,6 @@ import org.apache.http.client.protocol.R
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.FileEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.FormBodyPart;
@@ -94,6 +90,7 @@ import org.apache.jmeter.protocol.http.c
import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.util.EncoderCache;
+import org.apache.jmeter.protocol.http.util.HC4TrustAllSSLSocketFactory;
import org.apache.jmeter.protocol.http.util.HTTPArgument;
import org.apache.jmeter.protocol.http.util.HTTPFileArg;
import org.apache.jmeter.protocol.http.util.SlowHC4SSLSocketFactory;
@@ -133,19 +130,11 @@ public class HTTPHC4Impl extends HTTPHCA
}
};
- // Trust all certificates
- private static final TrustStrategy TRUSTALL = new TrustStrategy(){
- public boolean isTrusted(X509Certificate[] chain, String authType) {
- return true;
- }
- };
-
- // Allow all host names
- private static final AllowAllHostnameVerifier ALLOW_ALL_HOSTNAMES = new AllowAllHostnameVerifier();
-
- // Scheme used for slow sockets. Cannot be set as a default, because must be set on an HttpClient instance.
+ // Scheme used for slow HTTP sockets. Cannot be set as a default, because must be set on an HttpClient instance.
private static final Scheme SLOW_HTTP;
- private static final Scheme SLOW_HTTPS;
+
+ // We always want to override the HTTPS scheme, because we want to trust all certificates and hosts
+ private static final Scheme HTTPS_SCHEME;
/*
* Create a set of default parameters from the ones initially created.
@@ -166,24 +155,32 @@ public class HTTPHC4Impl extends HTTPHCA
HttpClientDefaultParameters.load(file, DEFAULT_HTTP_PARAMS);
}
+ // Set up HTTP scheme override if necessary
if (CPS_HTTP > 0) {
log.info("Setting up HTTP SlowProtocol, cps="+CPS_HTTP);
SLOW_HTTP = new Scheme(PROTOCOL_HTTP, DEFAULT_HTTP_PORT, new SlowHC4SocketFactory(CPS_HTTP));
} else {
SLOW_HTTP = null;
}
+
+ // We always want to override the HTTPS scheme
+ Scheme https = null;
if (CPS_HTTPS > 0) {
log.info("Setting up HTTPS SlowProtocol, cps="+CPS_HTTPS);
- Scheme s = null;
try {
- s = new Scheme(PROTOCOL_HTTPS, DEFAULT_HTTPS_PORT, new SlowHC4SSLSocketFactory(CPS_HTTPS));
+ https = new Scheme(PROTOCOL_HTTPS, DEFAULT_HTTPS_PORT, new SlowHC4SSLSocketFactory(CPS_HTTPS));
} catch (GeneralSecurityException e) {
- log.warn("Failed to initialise SLOW_HTTPS scheme", e);
+ log.warn("Failed to initialise SLOW_HTTPS scheme, cps="+CPS_HTTPS, e);
}
- SLOW_HTTPS = s;
} else {
- SLOW_HTTPS = null;
+ log.info("Setting up HTTPS TrustAll scheme");
+ try {
+ https = new Scheme(PROTOCOL_HTTPS, DEFAULT_HTTPS_PORT, new HC4TrustAllSSLSocketFactory());
+ } catch (GeneralSecurityException e) {
+ log.warn("Failed to initialise HTTPS TrustAll scheme", e);
+ }
}
+ HTTPS_SCHEME = https;
if (localAddress != null){
DEFAULT_HTTP_PARAMS.setParameter(ConnRoutePNames.LOCAL_ADDRESS, localAddress);
}
@@ -448,7 +445,7 @@ public class HTTPHC4Impl extends HTTPHCA
HttpClient httpClient = map.get(key);
- if (httpClient == null){
+ if (httpClient == null){ // One-time init for this client
HttpParams clientParams = new DefaultedHttpParams(new BasicHttpParams(), DEFAULT_HTTP_PARAMS);
@@ -456,22 +453,15 @@ public class HTTPHC4Impl extends HTTPHCA
((AbstractHttpClient) httpClient).addResponseInterceptor(new ResponseContentEncoding());
((AbstractHttpClient) httpClient).addResponseInterceptor(METRICS_SAVER); // HACK
+ // Override the defualt schemes as necessary
SchemeRegistry schemeRegistry = httpClient.getConnectionManager().getSchemeRegistry();
- // Allow all hostnames and all certificates
- try {
- SSLSocketFactory socketFactory = new SSLSocketFactory(TRUSTALL, ALLOW_ALL_HOSTNAMES);
- Scheme sch = new Scheme(PROTOCOL_HTTPS, DEFAULT_HTTPS_PORT, socketFactory);
- schemeRegistry.register(sch);
- } catch (GeneralSecurityException e) {
- log.warn("Failed to register trust-all socket factory", e);
- }
-
if (SLOW_HTTP != null){
schemeRegistry.register(SLOW_HTTP);
}
- if (SLOW_HTTPS != null){
- schemeRegistry.register(SLOW_HTTPS);
+
+ if (HTTPS_SCHEME != null){
+ schemeRegistry.register(HTTPS_SCHEME);
}
// Set up proxy details
Added: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/HC4TrustAllSSLSocketFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/HC4TrustAllSSLSocketFactory.java?rev=1128295&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/HC4TrustAllSSLSocketFactory.java (added)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/HC4TrustAllSSLSocketFactory.java Fri May 27 13:14:32 2011
@@ -0,0 +1,47 @@
+/*
+ * 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.jmeter.protocol.http.util;
+
+import java.security.GeneralSecurityException;
+import java.security.cert.X509Certificate;
+
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.conn.ssl.TrustStrategy;
+
+/**
+ * Apache HttpClient protocol factory to generate SSL sockets
+ */
+
+public class HC4TrustAllSSLSocketFactory extends SSLSocketFactory {
+
+ private static final TrustStrategy TRUSTALL = new TrustStrategy(){
+ public boolean isTrusted(X509Certificate[] chain, String authType) {
+ return true;
+ }
+ };
+
+ /**
+ * Create an SSL factory which trusts all certificates and hosts.
+ * {@link SSLSocketFactory#SSLSocketFactory(TrustStrategy, org.apache.http.conn.ssl.X509HostnameVerifier)}
+ * @throws GeneralSecurityException if there's a problem setting up the security
+ */
+ public HC4TrustAllSSLSocketFactory() throws GeneralSecurityException {
+ super(TRUSTALL, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+ }
+}
Propchange: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/HC4TrustAllSSLSocketFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/HC4TrustAllSSLSocketFactory.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/SlowHC4SSLSocketFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/SlowHC4SSLSocketFactory.java?rev=1128295&r1=1128294&r2=1128295&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/SlowHC4SSLSocketFactory.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/SlowHC4SSLSocketFactory.java Fri May 27 13:14:32 2011
@@ -20,11 +20,7 @@ package org.apache.jmeter.protocol.http.
import java.net.Socket;
import java.security.GeneralSecurityException;
-import java.security.cert.X509Certificate;
-import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.params.HttpParams;
import org.apache.jmeter.util.SlowSocket;
@@ -32,28 +28,25 @@ import org.apache.jmeter.util.SlowSocket
* Apache HttpClient protocol factory to generate "slow" SSL sockets for emulating dial-up modems
*/
-public class SlowHC4SSLSocketFactory extends SSLSocketFactory {
-
- private static final TrustStrategy TRUSTALL = new TrustStrategy(){
- public boolean isTrusted(X509Certificate[] chain, String authType) {
- return true;
- }
- };
-
- private static final AllowAllHostnameVerifier ALLOW_ALL_HOSTS = new AllowAllHostnameVerifier();
+public class SlowHC4SSLSocketFactory extends HC4TrustAllSSLSocketFactory {
private final int CPS; // Characters per second to emulate
/**
* Create a factory
- * @param cps - characters per second
+ * @param cps - characters per second, must be > 0
* @throws GeneralSecurityException if there's a problem setting up the security
+ * @throws IllegalArgumentException if cps ≤ 0
*/
public SlowHC4SSLSocketFactory(final int cps) throws GeneralSecurityException {
- super(TRUSTALL, ALLOW_ALL_HOSTS);
+ super();
+ if (cps <= 0) {
+ throw new IllegalArgumentException("CPS must be > 0, but is "+cps);
+ }
CPS = cps;
}
+ // Override all the socket creation methods in SSLSocketFactory
@Override
public Socket createSocket(final HttpParams params) {
return new SlowSocket(CPS);
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@jakarta.apache.org
For additional commands, e-mail: notifications-help@jakarta.apache.org