Hi all,

I have a strange problem with Tomcat 8.5. Using the exact same setup as Tomcat 
8.0 (connector and keystore) ssllabs will downgrade my setup from A to B 
because of a missing intermediate certificate.

I have the two versions working side by side on two ports.

    <Connector
      port="8443"
      protocol="org.apache.coyote.http11.Http11NioProtocol"
      server="Apache Tomcat"
      SSLEnabled="true"
      allowTrace="false"
      maxThreads="150"
      scheme="https"
      secure="true"
      clientAuth="false"
      sslEnabledProtocols="TLSv1.1, TLSv1.2"
      
ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA"
      useBodyEncodingForURI="true"
      useServerCipherSuitesOrder="true"
      keystoreFile="${catalina.base}/conf/ssl/jssecacerts"
      keystorePass="<snip>"
    />

Openssl on the two will give me the following output:

Tomcat 8.0:
openssl s_client -showcerts -connect logopk.no-ip.com:8444
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1
verify return:1
depth=0 CN = logopk.no-ip.com
verify return:1
---
Certificate chain
0 s:/CN=logopk.no-ip.com
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
-----BEGIN CERTIFICATE-----
<snip>
-----END CERTIFICATE-----
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
<snip>
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=logopk.no-ip.com
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3483 bytes and written 434 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 572071490E6F469D2C65463A084AD02D737DB2AE3D52A8026129E856735FDBA8
    Session-ID-ctx:
    Master-Key: 
CB723211640C7C7698A6F490E3EF9C3EBAB403D8C4333A0ED4641BF0F0A998BFA4097491DE12940BF8932C9912579C85
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1461743945
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)


Tomcat 8.5:
openssl s_client -showcerts -connect logopk.no-ip.com:8443
CONNECTED(00000003)
depth=0 CN = logopk.no-ip.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = logopk.no-ip.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=logopk.no-ip.com
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
-----BEGIN CERTIFICATE-----
<snip>
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=logopk.no-ip.com
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2459 bytes and written 434 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: E5BB5BCF0C1518DD22879C818416A1EA428DE340221D79F1F06957AC2AC7C1EF
    Session-ID-ctx:
    Master-Key: 
7B069F4782914A0F5F12AEC1EEC97EB469F5AD49FC1E9F7847E510B14314EC40551D8314CA683FC9253B16801E8235CF
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 86400 (seconds)
    TLS session ticket:
    0000 - 60 c1 0e c6 02 99 d0 fe-65 22 2f e1 54 ae e4 c4   `.......e"/.T...
    0010 - c3 f0 50 2d b1 bd e1 e8-f8 24 f6 5e 32 c9 dc 26   ..P-.....$.^2..&
    0020 - fa 05 70 df 7c d7 b8 1a-17 81 ec 36 d5 66 03 84   ..p.|......6.f..
    0030 - 81 7b 48 c8 3c 04 6f eb-da 9c c7 bb 4a 5f 21 22   .{H.<.o.....J_!"
    0040 - fe b5 4e 95 24 b8 89 c6-2c 12 4a fa bf 0d b8 c0   ..N.$...,.J.....
    0050 - 45 5d 0d 87 c8 38 cc 36-c4 5b 52 8e 47 ae 8b 8d   E]...8.6.[R.G...
    0060 - b0 de e4 6c d6 71 dd d3-67 78 2e 27 a2 ad d0 be   ...l.q..gx.'....
    0070 - 28 96 a7 71 66 c0 a1 30-b7 5b 9f 37 0b dd 5e 55   (..qf..0.[.7..^U
    0080 - ea d2 46 94 1e ee 2a 51-b6 41 77 30 cd e9 26 83   ..F...*Q.Aw0..&.
    0090 - 4d 79 2a 7f 32 98 62 e4-26 c9 41 76 f5 56 e6 83   My*.2.b.&.Av.V..

    Start Time: 1461744248
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)

Any idea? I have even regenerated the keystore using the setup of 
https://tomcat.apache.org/tomcat-8.5-doc/ssl-howto.html#Prepare_the_Certificate_Keystore
The connector setup with openssl (including the intermediate.pem) and the new 
NIO2 does work fine - with an A+.

Thank You. Best regards

Peter

Reply via email to