我的Web应用程序正在使用Apigee后面的一些REST服务(是客户端),现在当Apigee只需要与TLS v1.2进行通信时,我们作为该REST服务的客户端也会收到通知我们的请求将是如果我们不将我们的网络应用程序配置为使用较新版本的TLS,则会被拒绝。
我正在使用Java 7和Tomcat 7,我知道那些Java和Tomcat支持开箱即用的TLS v1.2连接,但我在Tomcat服务器上没有配置SSL / TLS 我只将Tomcat用作HTTP和出站代理进行SSL通信。
问题1:
有没有办法检查在Tomcat上发送我的Web应用程序的请求类型,这些请求是否会被仅接受TLS v1.2的服务器拒绝?
问题2:
如果默认情况下没有配置,如何在Tomcat上配置它?我从official doc找到了这个,但我想知道这只影响INBOUND,还是OUTBOUND连接。
答案 0 :(得分:2)
有没有办法检查在Tomcat上发送我的Web应用程序的请求类型,那些只接受TLS v1.2的服务器是否会拒绝这些请求?
使用系统属性javax.net.debug=ssl
运行 - 通常最好在CATALINA_OPTS
或setenv.sh
setenv.bat
中设置,尽管可能还有其他方法 - 并捕获写入的相当大量的跟踪标准输出 - 如何做到这一点取决于您的环境。这将在JVM进程中记录所有 SSL / TLS连接,但由于您没有使用SSL / TLS(HTTPS)入站,因此这应该不是问题。
或者,使用Wireshark或tcpdump等从网络捕获;这可能需要root或某些(Linux)功能,但可以过滤到只有感兴趣的连接。
是的,如果您(通过Java)发送不提供1.2的握手,并且服务器要求(仅)1.2,则握手将失败。
如果默认情况下没有配置,如何在Tomcat上配置它?我从官方文档中找到了这个,但我想知道这只影响INBOUND,还是OUTBOUND连接。
是,这仅影响入站SSL / TLS(HTTPS)连接。 Tomcat代码通常只处理入站HTTP或HTTPS连接;任何出站连接在您的代码中都是显式的,或者是您调用的库代码,例如数据库驱动程序。
免费版本的Oracle Java 7 实现 TLS 1.2,但默认情况下禁用(以及1.1)用于客户端。如何更改这取决于您的代码如何建立连接,例如通过什么库,并且您没有提供任何相关信息。有很多关于此问题的许多 Stack问题(很多年前),例如:
https://superuser.com/questions/747377/enable-tls-1.1-and-1.2-for-clients-on-java-7
getting javax.net.ssl.SSLException: Received fatal alert: protocol_version while scraping data using Jsoup
Enable TLS 1.2 on JDK7 Client side
How to enable TLSv1.1+ outbound communication from web app on Win10/Tomcat7/Java7?
Server closes connections made using httpclient and Java 7
SSLHandshakeException : Remote host closed connection during handshake
How to enable TLS 1.2 in Java 7
TLS 1.2 was supported in Java 8 but not in Java 7
最后两点指出,如果您支付Oracle支持合同,您只需升级到7u131(或更好)。或者,如果您(可以)使用OpenJDK。