0

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

看起来像 SSL 证书问题。

堆栈跟踪片段。

   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

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

4

1 回答 1

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到最新版本,这应该会有所帮助,因为您的密钥库必须已过期!:)

于 2012-08-09T15:26:16.070 回答