Author: markt
Date: Mon Aug 21 14:00:32 2017
New Revision: 1805637
URL: http://svn.apache.org/viewvc?rev=1805637&view=rev
Log:
Handle the case when OpenSSL resumes a TLS session using a ticket and the full
client certificate chain is not available. In this case the client certificate
without the chain will be presented to the application.
Modified:
tomcat/trunk/java/org/apache/tomcat/util/net/AprSSLSupport.java
tomcat/trunk/webapps/docs/changelog.xml
tomcat/trunk/webapps/docs/config/http.xml
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=1805637&r1=1805636&r2=1805637&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprSSLSupport.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprSSLSupport.java Mon Aug 21
14:00:32 2017
@@ -54,11 +54,17 @@ public class AprSSLSupport implements SS
@Override
public X509Certificate[] getPeerCertificateChain() throws IOException {
try {
- // certLength == -1 indicates an error
+ // certLength == -1 indicates an error unless TLS session tickets
+ // are in use in which case OpenSSL won't store the chain in the
+ // ticket.
int certLength =
socketWrapper.getSSLInfoI(SSL.SSL_INFO_CLIENT_CERT_CHAIN);
byte[] clientCert =
socketWrapper.getSSLInfoB(SSL.SSL_INFO_CLIENT_CERT);
X509Certificate[] certs = null;
- if (clientCert != null && certLength > -1) {
+
+ if (clientCert != null) {
+ if (certLength < 0) {
+ certLength = 0;
+ }
certs = new X509Certificate[certLength + 1];
CertificateFactory cf;
if (clientCertProvider == null) {
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1805637&r1=1805636&r2=1805637&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Aug 21 14:00:32 2017
@@ -106,6 +106,12 @@
Ensure that the APR/native connector uses blocking I/O for TLS
renegotiation. (markt)
</fix>
+ <fix>
+ <bug>58244</bug>: Handle the case when OpenSSL resumes a TLS session
+ using a ticket and the full client certificate chain is not available.
+ In this case the client certificate without the chain will be presented
+ to the application. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Other">
Modified: tomcat/trunk/webapps/docs/config/http.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/http.xml?rev=1805637&r1=1805636&r2=1805637&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/http.xml (original)
+++ tomcat/trunk/webapps/docs/config/http.xml Mon Aug 21 14:00:32 2017
@@ -1192,8 +1192,12 @@
<attribute name="disableSessionTickets" required="false">
<p>OpenSSL only.</p>
- <p>Disables use of TLS Session Tickets (RFC 4507) if set to
- <code>true</code>. Default is <code>false</code>.</p>
+ <p>Disables use of TLS session tickets (RFC 5077) if set to
+ <code>true</code>. Default is <code>false</code>. Note that when TLS
+ session tickets are in use, the full peer certificate chain will only be
+ available on the first connection. Subsequent connections (that use a
+ ticket to estrablish the TLS session) will only have the peer
certificate,
+ not the full chain.</p>
</attribute>
<attribute name="honorCipherOrder" required="false">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]