【问题标题】:JetS3t client putObject stopped working with HTTPS hostname invalid exceptionJetS3t 客户端 putObject 停止使用 HTTPS 主机名无效异常
【发布时间】:2012-08-05 21:19:50
【问题描述】:

基本的 put 对象调用突然停止工作(有时会成功)。它已经工作了很长时间。

看起来像是 SSL 证书问题。

堆栈跟踪 sn-p。

   org.jets3t.service.S3ServiceException: S3 PUT connection failed for '/s3_request_message-38afbd8e-7d65-428a-a708-5d34104ded95-4912660956668093023.xml'
            at org.jets3t.service.impl.rest.httpclient.RestS3Service.performRequest(RestS3Service.java:516)
            at org.jets3t.service.impl.rest.httpclient.RestS3Service.performRestPut(RestS3Service.java:800)
            at org.jets3t.service.impl.rest.httpclient.RestS3Service.createObjectImpl(RestS3Service.java:1399)
            at org.jets3t.service.impl.rest.httpclient.RestS3Service.putObjectImpl(RestS3Service.java:1317)
            at org.jets3t.service.S3Service.putObject(S3Service.java:1661)
            at org.jets3t.service.S3Service.putObject(S3Service.java:1914)
            at com.amazon.lm.utils.aws.S3Box.putFile(S3Box.java:111)
            at com.amazon.lm.engine.LMEngine.copyRequestS3(LMEngine.java:350)
            at com.amazon.lm.engine.LMEngine.run(LMEngine.java:165)
            at com.amazon.lm.engine.discover.DiscoveryEngine.run(DiscoveryEngine.java:156)
            at com.amazon.lm.engine.discover.GoogleBaseSearch.run(GoogleBaseSearch.java:25)
            at com.amazon.lm.ui.UIDiscoverTask.run(UIDiscoverTask.java:41)
            at java.lang.Thread.run(Thread.java:662)
    Caused by: javax.net.ssl.SSLPeerUnverifiedException: HTTPS hostname invalid: expected 'lm-requests-prod.s3.amazonaws.com', received '*.s3.amazonaws.com'
            at org.apache.commons.httpclient.contrib.ssl.StrictSSLProtocolSocketFactory.verifyHostname(StrictSSLProtocolSocketFactory.java:293)
            at org.apache.commons.httpclient.contrib.ssl.StrictSSLProtocolSocketFactory.createSocket(StrictSSLProtocolSocketFactory.java:215)
            at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
            at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
            at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
            at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
            at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
            at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
            at org.jets3t.service.impl.rest.httpclient.RestS3Service.performRequest(RestS3Service.java:342)
            ... 12 more

看起来 Java 不喜欢显示为“*.s3.amazonaws.com”的通配符域

per Can Java connect to wildcard ssl... 通配符在 java 中可能会出现问题。

但如前所述,我们使用它很久了,突然开始遇到这个问题,太断断续续了。

我们正在使用以下版本:

jdk: 1.6 
jets3: 0.7
openssl:1.0

有人遇到过这个问题吗?如果是,是否有任何解决方法?

【问题讨论】:

    标签: amazon-s3 amazon-web-services openssl jets3t


    【解决方案1】:

    这个wasn't an issue with the AWSS3JavaClient code,基于这个问题发生在 S3 库和其他 Java S3 库中,以及 SSL cert verification is done inside the JVM platform library code 不在我们的 S3 库代码中的事实。

    问题在于,我们的 JVM 的密钥库没有最新的证书颁发机构 (CA),无法让 JVM 为我们从 S3 SSL 端点获得的任何证书形成信任链。这是 Java 和 SSL 的一个相当普遍的问题,因为 JVM 维护它自己的密钥库(即它不使用来自操作系统的证书)。

    如果您遇到此问题,请尝试使用其他 JVM 重现此问题。过去,每当客户看到此问题时,都是因为他们的本地 JVM keystore(密钥库随 JVM 一起提供并包含最新的证书和 CA)已经过时。过去,升级到最新的 JVM 版本总是可以解决这个问题。

    尝试将您的JVM version 升级到最新版本,这应该会有所帮助,因为您的密钥库肯定已经过期! :)

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多