История изменений
Исправление i-rinat, (текущая версия) :
Что характерно, алгоритм подписи с тех пор изменился до неузнаваемости, квадратные колеса заменили на сдвоенные треугольные, а велосипедный руль заменили рулем от камаза, но стандартные протоколы шифрования HTTP в амазоне использовать по прежнему не хотят.
Вот алгоритм подписи из документа по архивной ссылке, которую ты привёл:
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;
Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;
CanonicalizedResource = [ "/" + Bucket ] +
<HTTP-Request-URI, from the protocol name up to the query string> +
[ sub-resource, if present. For example "?torrent", or "?acl"];
CanonicalizedAmzHeaders = <described below>
Вот алгоритм подписи с https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#ConstructingTheAuthenticationHeader, то есть текущей версии:
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;
Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of(YourSecretAccessKey), UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;
CanonicalizedResource = [ "/" + Bucket ] +
<HTTP-Request-URI, from the protocol name up to the query string> +
[ subresource, if present. For example "?acl", "?location", or "?logging"];
CanonicalizedAmzHeaders = <described below>
Если выровнять пробельные символы, то разница получится примерно такой:
--- year-2007 2022-04-03 22:26:13.724282591 +0300
+++ year-2022 2022-04-03 22:26:17.392304265 +0300
@@ -1,16 +1,16 @@
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;
-Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of( StringToSign ) ) );
+Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of(YourSecretAccessKey), UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
- CanonicalizedAmzHeaders +
+ CanonicalizedAmzHeaders +
CanonicalizedResource;
CanonicalizedResource = [ "/" + Bucket ] +
<HTTP-Request-URI, from the protocol name up to the query string> +
- [ sub-resource, if present. For example "?torrent", or "?acl"];
+ [ subresource, if present. For example "?acl", "?location", or "?logging"];
CanonicalizedAmzHeaders = <described below>
Ты это имел в виду под «изменилось до неузнаваемости»?
Как видишь, никакого S3 API.
Я отвечал на сообщение, в котором ссылка вела на актуальную версию сайта, а не в архив: AWS и в частности S3 как vendor lock (комментарий)
Исходная версия i-rinat, :
Что характерно, алгоритм подписи с тех пор изменился до неузнаваемости, квадратные колеса заменили на сдвоенные треугольные, а велосипедный руль заменили рулем от камаза, но стандартные протоколы шифрования HTTP в амазоне использовать по прежнему не хотят.
Вот алгоритм подписи из документа по архивной ссылке, которую ты привёл:
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;
Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;
CanonicalizedResource = [ "/" + Bucket ] +
<HTTP-Request-URI, from the protocol name up to the query string> +
[ sub-resource, if present. For example "?torrent", or "?acl"];
CanonicalizedAmzHeaders = <described below>
Вот алгоритм подписи с https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#ConstructingTheAuthenticationHeader, то есть текущей версии:
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;
Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of(YourSecretAccessKey), UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;
CanonicalizedResource = [ "/" + Bucket ] +
<HTTP-Request-URI, from the protocol name up to the query string> +
[ subresource, if present. For example "?acl", "?location", or "?logging"];
CanonicalizedAmzHeaders = <described below>
Если выровнять пробельные символы, то разница получится примерно такой:
--- year-2007 2022-04-03 22:26:13.724282591 +0300
+++ year-2022 2022-04-03 22:26:17.392304265 +0300
@@ -1,16 +1,16 @@
Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;
-Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of( StringToSign ) ) );
+Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of(YourSecretAccessKey), UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
- CanonicalizedAmzHeaders +
+ CanonicalizedAmzHeaders +
CanonicalizedResource;
CanonicalizedResource = [ "/" + Bucket ] +
<HTTP-Request-URI, from the protocol name up to the query string> +
- [ sub-resource, if present. For example "?torrent", or "?acl"];
+ [ subresource, if present. For example "?acl", "?location", or "?logging"];
CanonicalizedAmzHeaders = <described below>
Ты это имел в виду под «изменилось до неузнаваемости»?