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 Java はワイルドカード 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のキーストアに、S3 SSLエンドポイントから取得する証明書に対してJVMが信頼の鎖を形成できるようにする最新の認証局(CA)がなかったことです。JVMは独自のキーストアを維持するため(つまり、OSからの証明書を使用しないため)、これはJavaとSSLでかなり一般的な問題です。

この問題に直面した場合は、他のJVMでこの問題を再現してみてください。お客様が過去にこの問題を目にしたことがあるのは、ローカルJVM keystore(キーストアにはJVMが付属しており、最新の証明書とCAが含まれている)が古くなっているためです。最新のJVMバージョンにアップグレードすると、これまで常にこれが修正されています。

JVM version最近のものにアップグレードしてみてください。キーストアの有効期限が切れている必要があるため、役立つはずです。:)

于 2012-08-09T15:26:16.070 に答える