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