2017-12-30 21 views
1

私はSpring Bootアプリケーション内でAWS Java SDKを使用しています。現在 、私は私が使用してS3オブジェクトのURL戻りたい:S3Client.getURLのフォーマットを変更するには

s3Client.putObject(new PutObjectRequest(S3_BUCKET_NAME, key,fileToUpload)); 
URL signedUrl = s3Client.getUrl(S3_BUCKET_NAME, key); 

をそしてsignedUrlは、次のようになります。

https://<my_bucket_name>.s3.eu-central-1.amazonaws.com/<my_key> 

問題は、このURLが無効であることである(それは返すHTTPS接続中のエラー)。今、私はカスタムドメインを設定できず、CloudFrontの設定で問題を解決できません。

だから私の考えは、SDKに異なるフォーマットを強制することです。このようなもの:

https://s3.eu-central-1.amazonaws.com/<my_bucket_name>/<my_key> 

誰かが正しい方向に向いていますか?

PS: 私は知っている、私はURLで簡単に置き換えることができますが、それは洗練されたソリューションではありません。

+0

受信したHTTPSエラーは何ですか?なぜ異なるURL形式がHTTPSの問題を緩和すると思いますか? – Anuruddha

+0

「エラーコード:SSL_ERROR_BAD_CERT_DOMAIN」というメッセージが表示されます。 my_bucket_name.s3.eu-central-1.amazonaws.comは無効なセキュリティ証明書を使用します。 ttps://s3.eu-central-1.amazonaws.comで問題を軽減できます。 – TheKalin

+0

FirefoxでこのURLにアクセスしようとしていますか?あなたはChromeでURLを試しましたか? Firefoxのバグがあるようですhttps://support.mozilla.org/en-US/questions/1049026 – Anuruddha

答えて

0

問題はバケット名で問題になりました。バケット名のドット文字がすべての問題を引き起こしていました。

バケット名としてfoo-bar-comが期待どおりに機能します。 foo.bar.cam.s3。バケット名がhttps例外を引き起こしています。

+0

'https:// bucket.s3.region.amazonaws.com/key'の形式のS3 URLは* virtual-style access *と呼ばれ、' https://s3.region.amazonaws.com/bucket/key 'は* path-style access *と呼ばれます。後者はワイルドカードSSL証明書の検証の仕組みのために、バケット名のドットをサポートしますが、前者はドットをサポートしません。私はJava開発者ではありませんが、['isPathStyleAccess'](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/S3ClientOptions.html#builder--)の私が信じているのはあなたの代わりの解決策かもしれません。 –

+0

また、Java SDKの推奨アプローチは、何年にもわたって数回反復されているようです。 https://stackoverflow.com/a/24012996/1695906 –

+0

また、URLをあるスタイルから別のスタイルに再フォーマットするための文字列置換は、Signature V2ではその署名アルゴリズムがその入力に実際のバケット名を使用するため、使用できることに注意してください。対照的に、Signature V4は、URLのホスト名全体を署名アルゴリズムの入力として使用するため、URLの文字列を置換すると(必ずしもホスト名が変更されます)、署名も無効になります。この道を行くことはありません。 SigV4 URLには 'X-Amz-Credential'が含まれていますが、Sig V2 URLには' AWSAccessKeyId'が含まれています。 –

関連する問題