Author: markt
Date: Sat Sep 15 22:18:08 2012
New Revision: 1385193
URL: http://svn.apache.org/viewvc?rev=1385193&view=rev
Log:
Start to expand the diagnostic information available from the Manager web
application
Added:
tomcat/trunk/webapps/manager/WEB-INF/jsp/connectorCiphers.jsp (with props)
Modified:
tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml
tomcat/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties
tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java
tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java
tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
tomcat/trunk/webapps/docs/changelog.xml
tomcat/trunk/webapps/docs/manager-howto.xml
Modified: tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml Sat
Sep 15 22:18:08 2012
@@ -44,6 +44,15 @@
description="Allow disabling TRACE method"
type="boolean"/>
+ <attribute name="ciphers"
+ description="Comma-separated list of requested cipher suites"
+ type="java.lang.String"/>
+
+ <attribute name="ciphersUsed"
+ description="Array of ciphers suites in use"
+ type="[Ljava.lang.String;"
+ writeable="false"/>
+
<attribute name="className"
description="Fully qualified class name of the managed object"
type="java.lang.String"
Modified: tomcat/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java Sat
Sep 15 22:18:08 2012
@@ -89,8 +89,12 @@ public final class HTMLManagerServlet ex
protected static final String APPLICATION_MESSAGE = "message";
protected static final String APPLICATION_ERROR = "error";
- protected static final String sessionsListJspPath =
"/WEB-INF/jsp/sessionsList.jsp";
- protected static final String sessionDetailJspPath =
"/WEB-INF/jsp/sessionDetail.jsp";
+ protected static final String sessionsListJspPath =
+ "/WEB-INF/jsp/sessionsList.jsp";
+ protected static final String sessionDetailJspPath =
+ "/WEB-INF/jsp/sessionDetail.jsp";
+ protected static final String connectorCiphersJspPath =
+ "/WEB-INF/jsp/connectorCiphers.jsp";
static {
URL_ENCODER = new URLEncoder();
@@ -147,6 +151,8 @@ public final class HTMLManagerServlet ex
message = smClient.getString("managerServlet.exception",
e.toString());
}
+ } else if (command.equals("/sslConnectorCiphers")) {
+ sslConnectorCiphers(request, response);
} else if (command.equals("/upload") || command.equals("/deploy") ||
command.equals("/reload") || command.equals("/undeploy") ||
command.equals("/expire") || command.equals("/start") ||
@@ -589,13 +595,18 @@ public final class HTMLManagerServlet ex
writer.print(MessageFormat.format(UPLOAD_SECTION, args));
// Diagnostics section
- args = new Object[5];
+ args = new Object[9];
args[0] = smClient.getString("htmlManagerServlet.diagnosticsTitle");
args[1] = smClient.getString("htmlManagerServlet.diagnosticsLeak");
args[2] = response.encodeURL(
request.getContextPath() + "/html/findleaks");
args[3] =
smClient.getString("htmlManagerServlet.diagnosticsLeakWarning");
args[4] =
smClient.getString("htmlManagerServlet.diagnosticsLeakButton");
+ args[5] = smClient.getString("htmlManagerServlet.diagnosticsSsl");
+ args[6] = response.encodeURL(
+ request.getContextPath() + "/html/sslConnectorCiphers");
+ args[7] =
smClient.getString("htmlManagerServlet.diagnosticsSslConnectorCipherButton");
+ args[8] =
smClient.getString("htmlManagerServlet.diagnosticsSslConnectorCipherText");
writer.print(MessageFormat.format(DIAGNOSTICS_SECTION, args));
// Server Header Section
@@ -769,6 +780,13 @@ public final class HTMLManagerServlet ex
}
+ protected void sslConnectorCiphers(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException
{
+ request.setAttribute("cipherList", getConnectorCiphers());
+ getServletContext().getRequestDispatcher(
+ connectorCiphersJspPath).forward(request, response);
+ }
+
/**
* @see javax.servlet.Servlet#getServletInfo()
*/
@@ -1347,6 +1365,25 @@ public final class HTMLManagerServlet ex
"</form>\n" +
"</td>\n" +
"</tr>\n" +
+ "<tr>\n" +
+ " <td colspan=\"2\" class=\"header-left\"><small>{5}</small></td>\n" +
+ "</tr>\n" +
+ "<tr>\n" +
+ " <td colspan=\"2\">\n" +
+ "<form method=\"post\" action=\"{6}\">\n" +
+ "<table cellspacing=\"0\" cellpadding=\"3\">\n" +
+ "<tr>\n" +
+ " <td class=\"row-left\">\n" +
+ " <input type=\"submit\" value=\"{7}\">\n" +
+ " </td>\n" +
+ " <td class=\"row-left\">\n" +
+ " <small>{8}</small>\n" +
+ " </td>\n" +
+ "</tr>\n" +
+ "</table>\n" +
+ "</form>\n" +
+ "</td>\n" +
+ "</tr>\n" +
"</table>\n" +
"<br>";
}
Modified: tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties Sat
Sep 15 22:18:08 2012
@@ -48,6 +48,9 @@ htmlManagerServlet.deployWar=WAR or Dire
htmlManagerServlet.diagnosticsLeak=Check to see if a web application has
caused a memory leak on stop, reload or undeploy
htmlManagerServlet.diagnosticsLeakButton=Find leaks
htmlManagerServlet.diagnosticsLeakWarning=This diagnostic check will trigger a
full garbage collection. Use it with extreme caution on production systems.
+htmlManagerServlet.diagnosticsSsl=SSL connector configuration diagnostics
+htmlManagerServlet.diagnosticsSslConnectorCipherButton=Connector ciphers
+htmlManagerServlet.diagnosticsSslConnectorCipherText=List the configured
ciphers for each connector
htmlManagerServlet.diagnosticsTitle=Diagnostics
htmlManagerServlet.findleaksList=\
The following web applications were stopped (reloaded, undeployed), but
their\n\
@@ -88,6 +91,7 @@ managerServlet.noManager=FAIL - No manag
managerServlet.noSelf=FAIL - The manager can not reload, undeploy, stop, or
undeploy itself
managerServlet.noWrapper=Container has not called setWrapper() for this servlet
managerServlet.notDeployed=FAIL - Context {0} is defined in server.xml and may
not be undeployed
+managerServlet.notSslConnector=SSL is not enabled for this connector
managerServlet.objectNameFail=FAIL - Unable to register object name [{0}] for
Manager Servlet
managerServlet.postCommand=FAIL - Tried to use command {0} via a GET request
but POST is required
managerServlet.reloaded=OK - Reloaded application at context path {0}
Modified: tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java Sat Sep
15 22:18:08 2012
@@ -23,7 +23,11 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@@ -44,8 +48,10 @@ import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.Manager;
import org.apache.catalina.Server;
+import org.apache.catalina.Service;
import org.apache.catalina.Session;
import org.apache.catalina.Wrapper;
+import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.util.ContextName;
@@ -360,6 +366,8 @@ public class ManagerServlet extends Http
undeploy(writer, cn, smClient);
} else if (command.equals("/findleaks")) {
findleaks(statusLine, writer, smClient);
+ } else if (command.equals("/sslConnectorCiphers")) {
+ sslConnectorCiphers(writer);
} else {
writer.println(smClient.getString("managerServlet.unknownCommand",
command));
@@ -524,6 +532,19 @@ public class ManagerServlet extends Http
}
+ protected void sslConnectorCiphers(PrintWriter writer) {
+ writer.println("OK - Connector / SSL Cipher information");
+ Map<String,Set<String>> connectorCiphers = getConnectorCiphers();
+ for (Map.Entry<String,Set<String>> entry :
connectorCiphers.entrySet()) {
+ writer.println(entry.getKey());
+ for (String cipher : entry.getValue()) {
+ writer.print(" ");
+ writer.println(cipher);
+ }
+ }
+ }
+
+
/**
* Store server configuration.
*
@@ -1621,8 +1642,28 @@ public class ManagerServlet extends Http
}
}
return result;
-
}
+ protected Map<String,Set<String>> getConnectorCiphers() {
+ Map<String,Set<String>> result = new HashMap<>();
+
+ Engine e = (Engine) host.getParent();
+ Service s = e.getService();
+ Connector connectors[] = s.findConnectors();
+ for (Connector connector : connectors) {
+ Set<String> cipherList = new HashSet<>();
+ if (Boolean.TRUE.equals(connector.getProperty("SSLEnabled"))) {
+ String[] ciphersUsed =
+ (String[]) connector.getProperty("ciphersUsed");
+ for (String cipherUsed : ciphersUsed) {
+ cipherList.add(cipherUsed);
+ }
+ } else {
+ cipherList.add(sm.getString("managerServlet.notSslConnector"));
+ }
+ result.put(connector.toString(), cipherList);
+ }
+ return result;
+ }
}
Modified:
tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java
Sat Sep 15 22:18:08 2012
@@ -50,6 +50,7 @@ public abstract class AbstractHttp11Jsse
public String getCiphers() { return endpoint.getCiphers();}
public void setCiphers(String s) { endpoint.setCiphers(s);}
+ public String[] getCiphersUsed() { return endpoint.getCiphersUsed();}
public String getKeyAlias() { return endpoint.getKeyAlias();}
public void setKeyAlias(String s ) { endpoint.setKeyAlias(s);}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Sat Sep
15 22:18:08 2012
@@ -115,7 +115,7 @@ public class Http11AprProtocol extends A
*/
public String getSSLCipherSuite() { return
((AprEndpoint)endpoint).getSSLCipherSuite(); }
public void setSSLCipherSuite(String SSLCipherSuite) {
((AprEndpoint)endpoint).setSSLCipherSuite(SSLCipherSuite); }
-
+ public String[] getCiphersUsed() { return endpoint.getCiphersUsed();}
/**
* SSL honor cipher order.
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Sat Sep
15 22:18:08 2012
@@ -811,6 +811,10 @@ public abstract class AbstractEndpoint {
for (int i=0; i<ciphersarr.length; i++ ) ciphersarr[i] =
t.nextToken();
}
}
+ /**
+ * @return The ciphers in use by this Endpoint
+ */
+ public abstract String[] getCiphersUsed();
private String keyAlias = null;
public String getKeyAlias() { return keyAlias;}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Sat Sep 15
22:18:08 2012
@@ -349,6 +349,14 @@ public class AprEndpoint extends Abstrac
}
+ @Override
+ public String[] getCiphersUsed() {
+ // TODO : Investigate if it is possible to extract the current list of
+ // available ciphers. Native code changes will be required.
+ return new String[] { getSSLCipherSuite() };
+ }
+
+
// --------------------------------------------------------- Public Methods
/**
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Sat Sep 15
22:18:08 2012
@@ -32,6 +32,7 @@ import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
+import org.apache.tomcat.util.net.jsse.JSSESocketFactory;
/**
@@ -102,6 +103,16 @@ public class JIoEndpoint extends Abstrac
}
}
+
+ @Override
+ public String[] getCiphersUsed() {
+ if (serverSocketFactory instanceof JSSESocketFactory) {
+ return ((JSSESocketFactory)
serverSocketFactory).getEnabledCiphers();
+ }
+ return new String[0];
+ }
+
+
/*
* Optional feature support.
*/
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Sat Sep 15
22:18:08 2012
@@ -408,6 +408,21 @@ public class NioEndpoint extends Abstrac
}
+ @Override
+ public String[] getCiphersUsed() {
+ SSLContext sslContext = getSSLContext();
+ if (sslContext != null) {
+ SSLEngine engine = getSSLContext().createSSLEngine();
+ if (getCiphersArray().length > 0) {
+ engine.setEnabledCipherSuites(getCiphersArray());
+ }
+ return engine.getEnabledCipherSuites();
+ } else {
+ return new String[0];
+ }
+ }
+
+
// --------------------------------------------------------- OOM Parachute
Methods
protected void checkParachute() {
Modified:
tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
Sat Sep 15 22:18:08 2012
@@ -279,6 +279,10 @@ public class JSSESocketFactory implement
return result;
}
+ public String[] getEnabledCiphers() {
+ return enabledCiphers;
+ }
+
/*
* Gets the SSL server's keystore password.
*/
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Sat Sep 15 22:18:08 2012
@@ -107,6 +107,15 @@
</scode>
</changelog>
</subsection>
+ <subsection name="Web applications">
+ <changelog>
+ <add>
+ Extend the diagnostic information provided by the Manager web
+ application to include details of the configured SSL ciphers suites for
+ each connector. (markt)
+ </add>
+ </changelog>
+ </subsection>
<subsection name="Tribes">
<changelog>
<scode>
Modified: tomcat/trunk/webapps/docs/manager-howto.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/manager-howto.xml?rev=1385193&r1=1385192&r2=1385193&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/manager-howto.xml (original)
+++ tomcat/trunk/webapps/docs/manager-howto.xml Sat Sep 15 22:18:08 2012
@@ -881,6 +881,31 @@ has been reloaded several times, it may
</subsection>
+<subsection name="Connector SSL diagnostics">
+
+<source>
+http://localhost:8080/manager/text/sslConnectorCiphers
+</source>
+
+<p>The SSL Connector/Ciphers diagnostic lists the SSL ciphers that are
currently
+configured for each connector. For BIO and NIO, the names of the individual
+cipher suites are listed. For APR, the value of SSLCipherSuite is returned.</p>
+
+<p>The response will ook something like this:</p>
+<source>
+OK - Connector / SSL Cipher information
+Connector[HTTP/1.1-8080]
+ SSL is not enabled for this connector
+Connector[HTTP/1.1-8443]
+ TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
+ TLS_DHE_RSA_WITH_AES_128_CBC_SHA
+ TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
+ TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
+ ...
+</source>
+
+</subsection>
+
<subsection name="Server Status">
<p>From this link , you can view information about the server.</p>
Added: tomcat/trunk/webapps/manager/WEB-INF/jsp/connectorCiphers.jsp
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/manager/WEB-INF/jsp/connectorCiphers.jsp?rev=1385193&view=auto
==============================================================================
--- tomcat/trunk/webapps/manager/WEB-INF/jsp/connectorCiphers.jsp (added)
+++ tomcat/trunk/webapps/manager/WEB-INF/jsp/connectorCiphers.jsp Sat Sep 15
22:18:08 2012
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<%--
+ 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.
+--%>
+<%@page session="false" contentType="text/html; charset=ISO-8859-1" %>
+<%@page import="java.util.Map" %>
+<%@page import="java.util.Map.Entry" %>
+<%@page import="java.util.Set" %>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<% Map<String,Set<String>> cipherList = (Map<String,Set<String>>)
request.getAttribute("cipherList");
+%>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
+ <meta http-equiv="pragma" content="no-cache"/><!-- HTTP 1.0 -->
+ <meta http-equiv="cache-control" content="no-cache,must-revalidate"/><!--
HTTP 1.1 -->
+ <meta http-equiv="expires" content="0"/><!-- 0 is an invalid value and
should be treated as 'now' -->
+ <meta http-equiv="content-language" content="en"/>
+ <meta name="copyright" content="copyright 2005-2012 the Apache Software
Foundation"/>
+ <meta name="robots" content="noindex,nofollow,noarchive"/>
+ <title>Configured ciphers per Connector</title>
+</head>
+<body>
+<h1>Configured ciphers per Connector</h1>
+
+<table border="1" cellpadding="2" cellspacing="2" width="100%">
+ <thead>
+ <tr>
+ <th>Connector</th>
+ <th>Enabled Ciphers</th>
+ </tr>
+ </thead>
+ <tbody>
+ <%
+ for (Map.Entry<String, Set<String>> entry : cipherList.entrySet()) {
+ %>
+ <tr>
+ <td><%=entry.getKey()%></td>
+ <td>
+ <%
+ for (String cipher : entry.getValue()) {
+ %>
+ <p><%=cipher%></p>
+ <%
+ }
+ %>
+ </td>
+ </tr>
+ <%
+ }
+ %>
+ </tbody>
+</table>
+
+<form method="get" action="<%=request.getContextPath()%>/html">
+ <p style="text-align: center;">
+ <input type="submit" value="Return to main page" />
+ </p>
+</form>
+
+<%--div style="display: none;">
+<p>
+ <a href="http://validator.w3.org/check?uri=referer"><img
+ src="http://www.w3.org/Icons/valid-html401"
+ alt="Valid HTML 4.01!" height="31" width="88"></a>
+ <a href="http://validator.w3.org/check?uri=referer"><img
+ src="http://www.w3.org/Icons/valid-xhtml10"
+ alt="Valid XHTML 1.0!" height="31" width="88" /></a>
+ <a href="http://validator.w3.org/check?uri=referer"><img
+ src="http://www.w3.org/Icons/valid-xhtml11"
+ alt="Valid XHTML 1.1!" height="31" width="88" /></a>
+</p>
+</div--%>
+
+</body>
+</html>
Propchange: tomcat/trunk/webapps/manager/WEB-INF/jsp/connectorCiphers.jsp
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]