基本的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‘表示的通配符域
根据Can Java connect to wildcard ssl..。对于java,通配符可能是有问题的。
但正如前面所说,我们已经使用它很长时间了,突然开始面对这个问题,太断断续续了。
我们使用以下版本:
jdk: 1.6
jets3: 0.7
openssl:1.0有人遇到过这个问题吗?如果是,是否有解决方法?
发布于 2012-08-09 23:26:16
这个wasn't an issue with the AWSS3JavaClient code,基于这个问题发生在S3库和其他Java S3库中,以及SSL cert verification is done inside the JVM platform library code,而不是在我们的S3库代码中。
问题在于,我们的JVM的密钥库没有最新的证书颁发机构(CAs),这些颁发机构允许JVM对我们从S3 SSL端点获得的任何证书形成信任链。对于Java和SSL,这是一个相当常见的问题,因为JVM维护它自己的密钥库(即,它不使用来自操作系统的证书)。
如果您遇到此问题,请尝试使用其他JVM重现此问题。每当客户在过去看到这个问题时,都是因为他们的本地JVM keystore (与JVM一起提供的密钥库,包含最新的证书和CA)已经过时。在过去,升级到最新的JVM版本总是会解决这个问题。
尝试将您的JVM version升级到最新的版本,这应该会有所帮助,因为您的密钥库肯定已经过期了!:)
https://stackoverflow.com/questions/11820166
复制相似问题