2017-12-30 43 views
1

Ich verwende das AWS Java SDK in meiner Spring Boot App. Derzeit, wenn ich die URL des s3 Objekt zurückgeben möchte ich verwenden:So ändern Sie das Format von S3Client.getURL

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

Und die signedUrl sieht wie folgt aus:

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

Das Problem ist, dass diese URL ungültig ist (es gibt HTTPS Fehler während der Verbindung). Im Moment kann ich meine benutzerdefinierte Domäne nicht konfigurieren und das Problem über die CloudFront-Konfiguration beheben.

Also meine Idee ist es, das andere Format auf dem SDK zu erzwingen. Etwas wie dieses:

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

Kann mir jemand in die richtige Richtung zeigen?

PS: Ich weiß, dass ich eine einfache ersetzen auf der URL tun kann, aber es ist keine elegante Lösung.

+0

Was ist der HTTPS-Fehler, den Sie erhalten haben? Warum glauben Sie, dass ein anderes URL-Format das HTTPS-Problem abschwächen wird? – Anuruddha

+0

Es schreit "Fehlercode: SSL_ERROR_BAD_CERT_DOMAIN". my_bucket_name.s3.eu-central-1.amazonaws.com verwendet ein ungültiges Sicherheitszertifikat. Mit ttps: //s3.eu-central-1.amazonaws.com kann ich das Problem mildern. – TheKalin

+0

Versuchen Sie, auf diese URL in Firefox zuzugreifen? Hast du die URL in Chrome ausprobiert? Scheint, als gäbe es einen Bug mit Firefox https://support.mozilla.org/en-US/questions/1049026 – Anuruddha

Antwort

0

Ok, das Problem war mit Bucket Name. Das Punktzeichen im Bucket-Namen verursachte alle Schwierigkeiten.

foo-bar-com als Bucket-Name funktioniert wie erwartet. foo.bar.cam.s3. Der Bucket-Name verursacht die HTTPS-Ausnahme.

+0

Eine S3-URL in der Form "https: // bucket.s3.region.amazonaws.com/key" wird als * virtueller Zugriff * und als "https://s3.region.amazonaws.com/bucket/key" bezeichnet 'wird * Pfadstil-Zugriff * genannt. Letzteres unterstützt Punkte im Bucket-Namen, während der erstere aufgrund der Wildcard-SSL-Cert-Validierung keine Punkte unterstützt. Ich bin kein Java-Entwickler, sehe aber ['isPathStyleAccess'] (https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/S3ClientOptions.html#builder--) für was ich glaube, könnte deine alternative Lösung gewesen sein. –

+0

Es scheint auch, dass der bevorzugte Ansatz mit dem Java SDK im Laufe der Jahre mehrere Iterationen durchlaufen hat, vgl. https://stackoverflow.com/a/24012996/1695906. –

+0

Beachten Sie auch, dass das Ersetzen von Strings zum Umformatieren der URL von einem Stil zum anderen nur mit Signature V2 möglich ist, da der Signaturalgorithmus dort den tatsächlichen Bucket-Namen in seiner Eingabe verwendet; Im Gegensatz dazu verwendet Signature V4 den gesamten Hostnamen in der URL als Eingabe für den Signaturalgorithmus, so dass die String-Ersetzung in der URL - die notwendigerweise den Hostnamen ändern würde - auch die Signatur ungültig machen wird ... also wahrscheinlich gut, dass Sie das getan haben Geh nicht diese Route. Ein bemerkenswerter visueller Unterschied zwischen den beiden besteht darin, dass Sig-V2-URLs "AWSAccessKeyId" enthalten, während Sig-V4-URLs "X-Amz-Credential" enthalten. –

Verwandte Themen