首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在与Java 8重新协商TLS_1.2时,服务器证书更改受到限制

在与Java 8重新协商TLS_1.2时,服务器证书更改受到限制
EN

Stack Overflow用户
提问于 2016-06-14 20:22:53
回答 1查看 5K关注 0票数 6

我对SSL非常陌生,受到了似乎是已知问题的打击。我的应用程序是SSL客户端,并调用另一个组件,该组件为双向SSL启用。这两个组件中的证书都是正确的,有时连接工作正常。每个服务器都有自己的服务器证书和私钥,但根证书和中间证书是相同的。

SSL签入服务器是在Apache中完成的。

代码语言:javascript
复制
                                                                            |-------------|
                                                                          / |   Tomcat1   |
                                                         |-------------| /  |-------------| 
                                             |---------->|Apache SW LB |/ 
                                             |           |-------------|\       
                                             |                           \
                                             |                            \  |-------------|
|-----------|            |------------|      |                               |  Tomcat 2   |
|SSL Client |---HTTPS--->|Hardware LB |------|                               |-------------|    
|-----------|            |------------|      |                              |-------------| 
                                             |                            / |   Tomcat3   |
                                             |           |-------------| /  |-------------|
                                             |---------->|Apache SW LB |/   
                                                         |-------------|\
                                                                         \
                                                                          \|-------------|  
                                                                           |    Tomcat4  |
                                                                           |-------------|

有时我会犯以下错误:-

代码语言:javascript
复制
***
%% Invalidated:  [Session-10, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256]
http-nio-8443-exec-10, SEND TLSv1.2 ALERT:  fatal, description = bad_certificate
http-nio-8443-exec-10, WRITE: TLSv1.2 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 03 00 02 02 2A                               ......*
http-nio-8443-exec-10, called closeSocket()
http-nio-8443-exec-10, handling exception: javax.net.ssl.SSLHandshakeException: server certificate change is restricted during renegotiation

我使用Spring模板来调用REST调用,并且只使用TLS_V1.2,但仍然得到上述错误。

代码语言:javascript
复制
TrustStrategy ts = new TrustStrategy() {
      @Override
      public boolean isTrusted(
          X509Certificate[] x509Certificates, String s)
          throws CertificateException {
        return true; // TODO : revisit
      }
    };
    SSLContext sslcontext = org.apache.http.ssl.SSLContexts.custom()
        .loadKeyMaterial(keyStore, keypass.toCharArray())
        .loadTrustMaterial(trustStore, ts) 
        .build();

 SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(

            sslcontext, new String[] {
                "TLSv1.2" }, null,
            SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);   
        return HttpClients.custom().setSSLSocketFactory(sslsf).build();

      }

在谷歌上,我发现对于TLSv1.2和Java8( Java版本"1.8.0_60")来说,这个问题不会出现。我使用Spring 4 RestTemplete调用rest调用。

我正在使用以下版本的httpclinet :-

代码语言:javascript
复制
 <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.4.1</version>
    </dependency>

由于我对SSL是新手,所以我有几个问题要先问:-

1)。这是SSL clinet还是SSL服务器问题?

2)。有什么真正的原因,为什么有时连接工作,有时中断?技术原因的失败。

3)。这与客户端的缓存有关吗?

另外,如果有人能指出这个问题的真正目的,那就太好了。

EN

回答 1

Stack Overflow用户

发布于 2016-06-17 10:26:28

Java堆栈拒绝重新协商,可能是在硬件负载平衡器将连接从一个节点切换到另一个节点之后。

要使这种部署有效,两个"Apache“实例都必须使用完全相同的虚拟主机URL和SSL配置。没有明显的理由不这样做,因为它不与任何系统配置冲突。

因此,您的问题是拒绝集群部署的客户端行为之间的混合,每个节点都使用不同的私钥/服务器证书,即使虚拟主机URL是相同的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37821428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档