RE: Weirdness with our Tomcat webapp, at only one customer

Rob Berendt <[email protected]>
Newsgroups gmane.comp.lang.as400.java
Message-ID <BL0PR11MB2964BE5F49A7FBEAB9576CCAA4140@BL0PR11MB2964.namprd11.prod.outlook.com>
James,
I'm no Java expert.  Just speaking on protocols I would find out the list of protocols accepted by googleapis.  Then I would remove as many obsolete protocols you attempt to connect with.

Some references
https://www-01.ibm.com/support/docview.wss?uid=nas8N1020876
https://developer.ibm.com/answers/questions/242997/how-to-configure-websphere-application-server-to-u/
https://tomcat.apache.org/tomcat-8.5-doc/config/http.html#SSL_Support

If you're running IBM i 7.1 or older you may be in a world of hurt.

-----Original Message-----
From: JAVA400-L <java400-l-bounces-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org> On Behalf Of James Lampert
Sent: Friday, May 31, 2019 6:45 PM
To: Java 400 List <[email protected]>
Subject: Weirdness with our Tomcat webapp, at only one customer

We've got a customer with a problem. And I can't make head or tail of it.

The Tomcat-based webapp on our CRM product makes a call to maps.googleapis.com:
> https://maps.googleapis.com/maps/api/geocode/json?key=<REDACTED>&addre
> ss=<REDACTED>

In every other installation of the product, it works just fine, under Java 6, Java 7, and Java 8 JVMs.

But on this one customer box, it fails, throwing either
> java.net.ConnectException: Failed to connect to 
> maps.googleapis.com/2607:f8b0:4009:807:0:0:0:200a:443
or
> Unable to find acceptable protocols. isFallback=false, 
> modes=[ConnectionSpec(cipherSuites=[TLS_ECDHE_ECDSA_WITH_AES_128_GCM_S
> HA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
> TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
> TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
> TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
> TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
> TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 
> TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, 
> TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, 
> TLS_RSA_WITH_3DES_EDE_CBC_SHA], tlsVersions=[TLS_1_2, TLS_1_1, 
> TLS_1_0], supportsTlsExtensions=true), 
> ConnectionSpec(cipherSuites=[TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
> TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
> TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
> TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
> TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
> TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
> TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 
> TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, 
> TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, 
> TLS_RSA_WITH_3DES_EDE_CBC_SHA], tlsVersions=[TLS_1_0], 
> supportsTlsExtensions=true), ConnectionSpec()], supported 
> protocols=[TLSv1]

(and which one gets thrown seems to be at random, without apparent rhyme or reason). And it's not getting thrown in our code: it's getting thrown in classes and methods belonging to something called "squareup.okhttp."

But I can ping maps.googleapis.com from their command line just fine.

I wrote a simple RPG program to send the exact same request through Scott Klement's HTTPAPI. As soon as I got it working on our box, I stuck it into a save file, and squirted it over to the customer box, where it also worked just fine.

One suggestion I got from a Tomcat List member was to try compiling and running the simple cipher list program found at
> https://confluence.atlassian.com/stashkb/list-ciphers-used-by-jvm-6796
> 09085.html

If I set the same JAVA_HOME as Tomcat was launched under, and compile and run "Ciphers.java" from the above site, on the customer box, I
get:

> Default Cipher
>         SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SH
> *       SSL_DHE_DSS_WITH_AES_128_CBC_SHA
> *       SSL_DHE_DSS_WITH_AES_128_CBC_SHA256
>         SSL_DHE_DSS_WITH_AES_128_GCM_SHA256
> *       SSL_DHE_DSS_WITH_AES_256_CBC_SHA
> *       SSL_DHE_DSS_WITH_AES_256_CBC_SHA256
>         SSL_DHE_DSS_WITH_AES_256_GCM_SHA384
>         SSL_DHE_DSS_WITH_DES_CBC_SHA
>         SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
> *       SSL_DHE_RSA_WITH_AES_128_CBC_SHA
> *       SSL_DHE_RSA_WITH_AES_128_CBC_SHA256
>         SSL_DHE_RSA_WITH_AES_128_GCM_SHA256
> *       SSL_DHE_RSA_WITH_AES_256_CBC_SHA
> *       SSL_DHE_RSA_WITH_AES_256_CBC_SHA256
>         SSL_DHE_RSA_WITH_AES_256_GCM_SHA384
>         SSL_DHE_RSA_WITH_DES_CBC_SHA
>         SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
>         SSL_DH_anon_WITH_AES_128_CBC_SHA
>         SSL_DH_anon_WITH_AES_128_CBC_SHA256
>         SSL_DH_anon_WITH_AES_128_GCM_SHA256
>         SSL_DH_anon_WITH_AES_256_CBC_SHA
>         SSL_DH_anon_WITH_AES_256_CBC_SHA256
>         SSL_DH_anon_WITH_AES_256_GCM_SHA384
>         SSL_DH_anon_WITH_DES_CBC_SHA
> *       SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
> *       SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
>         SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
> *       SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
> *       SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
>         SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
>         SSL_ECDHE_ECDSA_WITH_NULL_SHA
> *       SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA
> *       SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA256
>         SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256
> *       SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA
> *       SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384
>         SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384
>         SSL_ECDHE_RSA_WITH_NULL_SHA
> *       SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA
> *       SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
>         SSL_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
> *       SSL_ECDH_ECDSA_WITH_AES_256_CBC_SHA
> *       SSL_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
>         SSL_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
>         SSL_ECDH_ECDSA_WITH_NULL_SHA
> *       SSL_ECDH_RSA_WITH_AES_128_CBC_SHA
> *       SSL_ECDH_RSA_WITH_AES_128_CBC_SHA256
>         SSL_ECDH_RSA_WITH_AES_128_GCM_SHA256
> *       SSL_ECDH_RSA_WITH_AES_256_CBC_SHA
> *       SSL_ECDH_RSA_WITH_AES_256_CBC_SHA384
>         SSL_ECDH_RSA_WITH_AES_256_GCM_SHA384
>         SSL_ECDH_RSA_WITH_NULL_SHA
>         SSL_ECDH_anon_WITH_AES_128_CBC_SHA
>         SSL_ECDH_anon_WITH_AES_256_CBC_SHA
>         SSL_ECDH_anon_WITH_NULL_SHA
>         SSL_KRB5_EXPORT_WITH_DES_CBC_40_MD5
>         SSL_KRB5_EXPORT_WITH_DES_CBC_40_SHA
>         SSL_KRB5_WITH_DES_CBC_MD5
>         SSL_KRB5_WITH_DES_CBC_SHA
>         SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
>         SSL_RSA_FIPS_WITH_DES_CBC_SHA
> *       SSL_RSA_WITH_AES_128_CBC_SHA
> *       SSL_RSA_WITH_AES_128_CBC_SHA256
>         SSL_RSA_WITH_AES_128_GCM_SHA256
> *       SSL_RSA_WITH_AES_256_CBC_SHA
> *       SSL_RSA_WITH_AES_256_CBC_SHA256
>         SSL_RSA_WITH_AES_256_GCM_SHA384
>         SSL_RSA_WITH_DES_CBC_SHA
>         SSL_RSA_WITH_NULL_MD5
>         SSL_RSA_WITH_NULL_SHA
>         SSL_RSA_WITH_NULL_SHA256
> *       TLS_EMPTY_RENEGOTIATION_INFO_SCSV

FOR COMPARISON PURPOSES, what we get on our box is:
> Default Cipher
> *       SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
> *       SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
> *       SSL_DHE_DSS_WITH_AES_128_CBC_SHA
> *       SSL_DHE_DSS_WITH_AES_256_CBC_SHA
> *       SSL_DHE_DSS_WITH_DES_CBC_SHA
> *       SSL_DHE_DSS_WITH_RC4_128_SHA
> *       SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
> *       SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
> *       SSL_DHE_RSA_WITH_AES_128_CBC_SHA
> *       SSL_DHE_RSA_WITH_AES_256_CBC_SHA
> *       SSL_DHE_RSA_WITH_DES_CBC_SHA
>         SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
>         SSL_DH_anon_EXPORT_WITH_RC4_40_MD5
>         SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
>         SSL_DH_anon_WITH_AES_128_CBC_SHA
>         SSL_DH_anon_WITH_AES_256_CBC_SHA
>         SSL_DH_anon_WITH_DES_CBC_SHA
>         SSL_DH_anon_WITH_RC4_128_MD5
>         SSL_KRB5_EXPORT_WITH_DES_CBC_40_MD5
>         SSL_KRB5_EXPORT_WITH_DES_CBC_40_SHA
>         SSL_KRB5_EXPORT_WITH_RC4_40_MD5
>         SSL_KRB5_EXPORT_WITH_RC4_40_SHA
>         SSL_KRB5_WITH_3DES_EDE_CBC_MD5
>         SSL_KRB5_WITH_3DES_EDE_CBC_SHA
>         SSL_KRB5_WITH_DES_CBC_MD5
>         SSL_KRB5_WITH_DES_CBC_SHA
>         SSL_KRB5_WITH_RC4_128_MD5
>         SSL_KRB5_WITH_RC4_128_SHA
> *       SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
> *       SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
> *       SSL_RSA_EXPORT_WITH_RC4_40_MD5
> *       SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA
> *       SSL_RSA_FIPS_WITH_DES_CBC_SHA
> *       SSL_RSA_WITH_3DES_EDE_CBC_SHA
> *       SSL_RSA_WITH_AES_128_CBC_SHA
> *       SSL_RSA_WITH_AES_256_CBC_SHA
> *       SSL_RSA_WITH_DES_CBC_SHA
>         SSL_RSA_WITH_NULL_MD5
>         SSL_RSA_WITH_NULL_SHA
> *       SSL_RSA_WITH_RC4_128_MD5
> *       SSL_RSA_WITH_RC4_128_SHA

Anybody have any insights?
--
This is the Java Programming on and around the IBM i (JAVA400-L) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org
Before posting, please take a moment to review the archives at https://archive.midrange.com/java400-l.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com
-- 
This is the Java Programming on and around the IBM i (JAVA400-L) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org
Before posting, please take a moment to review the archives
at https://archive.midrange.com/java400-l.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.