我们的应用程序使用Apache HttpClient 4.5.3,我们观察到一个非常奇怪的行为,我们的客户端和服务器之间使用SNI功能进行通信
如果SSL请求带有来自客户端的服务器名称(即:服务器的主机名),则服务器配置为返回Go Daddy签名证书,并且它将返回所有其他的自签名证书域名
观察行为
我们过去曾使用javax.net.debug进行调试,但在这种情况下我们无法使用它,因为我们需要重新启动tomcat服务器以实现其效果,当我们重新启动tomcat服务器时,调用端点服务器开始成功。 此外,javax.net.debug记录了大量信息,这些信息将充斥我们的日志,因此我们希望它仅针对特定请求启用。 我们希望只记录Client Hello(包含传递给端点的server_name)
我已经通读了 https://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#OwnX509ETM 但不确定我们可以使用什么来仅打印下推到服务器的SSL服务器名称指示器。
答案 0 :(得分:0)
我和你一样关心,然后我首先考虑动态添加环境变量,但它始终采用旧的价值。然后我发现javax.net.debug
环境变量仅在SSLSocketFactory.java
中使用静态块读取一次。完整的源代码可用here。
static {
String s = java.security.AccessController.doPrivileged(
new GetPropertyAction("javax.net.debug", "")).toLowerCase(Locale.ENGLISH);
DEBUG = s.contains("all") || s.contains("ssl");
}