Author: schultz
Date: Thu Feb 19 16:21:27 2015
New Revision: 1660924
URL: http://svn.apache.org/r1660924
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=57540
Add SSL protocol to request attributes
("org.apache.tomcat.util.net.secure_protocol_version").
Note that this feature requires mod_jk 1.2.41 or later, or manual configuration
of a JkEnvVar to set and send an AJP_SSL_PROTOCOL environment variable.
Modified:
tomcat/trunk/java/org/apache/catalina/connector/Request.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/Constants.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/tomcat/util/net/AprSSLSupport.java
tomcat/trunk/java/org/apache/tomcat/util/net/SSLSupport.java
tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1660924&r1=1660923&r2=1660924&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Thu Feb 19
16:21:27 2015
@@ -98,6 +98,7 @@ import org.apache.tomcat.util.http.fileu
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext;
import org.apache.tomcat.util.http.parser.AcceptLanguage;
+import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.res.StringManager;
import org.ietf.jgss.GSSCredential;
import org.ietf.jgss.GSSException;
@@ -853,7 +854,7 @@ public class Request
if(attr != null) {
return attr;
}
- if( isSSLAttribute(name) ) {
+ if( isSSLAttribute(name) ||
name.equals(SSLSupport.PROTOCOL_VERSION_KEY)) {
coyoteRequest.action(ActionCode.REQ_SSL_ATTRIBUTE,
coyoteRequest);
attr = coyoteRequest.getAttribute(Globals.CERTIFICATES_ATTR);
@@ -876,6 +877,10 @@ public class Request
if(attr != null) {
attributes.put(Globals.SSL_SESSION_MGR_ATTR, attr);
}
+ attr = coyoteRequest.getAttribute(SSLSupport.PROTOCOL_VERSION_KEY);
+ if(attr != null) {
+ attributes.put(SSLSupport.PROTOCOL_VERSION_KEY, attr);
+ }
attr = attributes.get(name);
sslAttributesParsed = true;
}
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1660924&r1=1660923&r2=1660924&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Thu Feb 19
16:21:27 2015
@@ -1140,6 +1140,8 @@ public class AjpProcessor extends Abstra
} catch (NumberFormatException nfe) {
// Ignore invalid value
}
+ } else if(n.equals(Constants.SC_A_SSL_PROTOCOL)) {
+ request.setAttribute(SSLSupport.PROTOCOL_VERSION_KEY, v);
} else {
request.setAttribute(n, v );
}
Modified: tomcat/trunk/java/org/apache/coyote/ajp/Constants.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/Constants.java?rev=1660924&r1=1660923&r2=1660924&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/Constants.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/Constants.java Thu Feb 19 16:21:27
2015
@@ -76,6 +76,7 @@ public final class Constants {
*/
public static final String SC_A_REQ_LOCAL_ADDR = "AJP_LOCAL_ADDR";
public static final String SC_A_REQ_REMOTE_PORT = "AJP_REMOTE_PORT";
+ public static final String SC_A_SSL_PROTOCOL = "AJP_SSL_PROTOCOL";
// Terminates list of attributes
public static final byte SC_A_ARE_DONE = (byte)0xFF;
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1660924&r1=1660923&r2=1660924&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Thu Feb 19
16:21:27 2015
@@ -975,6 +975,11 @@ public class Http11Processor extends Abs
request.setAttribute
(SSLSupport.SESSION_ID_KEY, sslO);
}
+ sslO = sslSupport.getProtocol();
+ if (sslO != null) {
+ request.setAttribute
+ (SSLSupport.PROTOCOL_VERSION_KEY, sslO);
+ }
request.setAttribute(SSLSupport.SESSION_MGR, sslSupport);
}
} catch (Exception e) {
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprSSLSupport.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprSSLSupport.java?rev=1660924&r1=1660923&r2=1660924&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprSSLSupport.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprSSLSupport.java Thu Feb 19
16:21:27 2015
@@ -117,4 +117,18 @@ public class AprSSLSupport implements SS
throw new IOException(e);
}
}
+
+ @Override
+ public String getProtocol() throws IOException {
+ long socketRef = socketWrapper.getSocket().longValue();
+ if (socketRef == 0) {
+ return null;
+ }
+
+ try {
+ return SSLSocket.getInfoS(socketRef, SSL.SSL_INFO_PROTOCOL);
+ } catch (Exception e) {
+ throw new IOException(e);
+ }
+ }
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SSLSupport.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SSLSupport.java?rev=1660924&r1=1660923&r2=1660924&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SSLSupport.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SSLSupport.java Thu Feb 19
16:21:27 2015
@@ -55,6 +55,12 @@ public interface SSLSupport {
public static final String SESSION_MGR =
"javax.servlet.request.ssl_session_mgr";
+ /**
+ * The request attribute key under which the String indicating the protocol
+ * that created the SSL socket is recorded - e.g. TLSv1 or TLSv1.2 etc.
+ */
+ public static final String PROTOCOL_VERSION_KEY =
+ "org.apache.tomcat.util.net.secure_protocol_version";
/**
* The cipher suite being used on this connection.
@@ -106,5 +112,11 @@ public interface SSLSupport {
* @throws IOException If an error occurs trying to obtain the session ID
*/
public String getSessionId() throws IOException;
+
+ /**
+ * @return the protocol String indicating how the SSL socket was created
+ * e.g. TLSv1 or TLSv1.2 etc.
+ */
+ public String getProtocol() throws IOException;
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java?rev=1660924&r1=1660923&r2=1660924&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESupport.java Thu Feb
19 16:21:27 2015
@@ -180,5 +180,13 @@ public class JSSESupport implements SSLS
public void invalidateSession() {
session.invalidate();
}
+
+ @Override
+ public String getProtocol() throws IOException {
+ if (session == null) {
+ return null;
+ }
+ return session.getProtocol();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]