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