Java客户端SSL重新协商

时间:2018-10-05 18:56:01

标签: java ssl jersey dropwizard jersey-client

我有一个Dropwizard应用程序,其中的资源需要在另一个Dropwizard应用程序上调用资源。我们注意到SSL重新协商花费了大量时间。经过仔细检查,仅当其他应用程序在同一台计算机上时,才会发生这种情况。即:

client.target("https://mymachine.com/test").request().post(null);
client.target("https://mymachine.com/test").request().post(null);
// renegotiation

如果使用命令行选项-Djavax.net.debug=ssl:handshake:verbose,则日志显示

%% Client cached [Session-13, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256]
%% Try resuming [Session-13, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256] from port 55043
...
%% Invalidated:  [Session-13, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256]
%% Initialized:  [Session-15, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256]

但是在我的本地计算机上调用相同的服务时:

client.target("https://othermachine.com/test").request().post(null);
client.target("https://othermachine.com/test").request().post(null);
// SSL session re-use (=wanted)

日志显示:

%% Client cached [Session-15, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256]
%% Try resuming [Session-15, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256] from port 55051
...
%% Server resumed [Session-15, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256]

这是怎么回事?

1 个答案:

答案 0 :(得分:0)

结果显示不同的Java版本。我的本地主机正在使用旧版本:-$。

  

Java™SE开发工具包8,更新161(JDK 8u161),2018年1月16日

     

新功能

     

security-libs / javax.net.ssl添加了TLS会话哈希和扩展的master   秘密扩展支持已添加对TLS会话的支持   JDK JSSE中的哈希和扩展主密钥扩展(RFC 7627)   提供者。请注意,通常,服务器证书更改为   如果未启用端点标识,并且前一个   握手是会话恢复的缩写初始握手,   除非可以同时考虑两个证书所代表的身份   一样。但是,如果启用或协商了扩展名,则   服务器证书更改限制不是必需的,将是   相应地丢弃。如果存在兼容性问题,请申请   可以通过设置系统来禁用此扩展程序的协商   在JDK中,将jdk.tls.useExtendedMasterSecret属性设置为false。通过   将系统属性jdk.tls.allowLegacyResumption设置为false,   会话哈希时,应用程序可以拒绝简短的握手   与扩展主密钥扩展未协商。通过设置   系统属性jdk.tls.allowLegacyMasterSecret为false,   应用程序可以拒绝不支持该会话的连接   哈希和扩展的主密钥扩展。

请参见JDK-8148421