curl/docs/libcurl
Matthias Gatto 08e8455ddd
http: introduce AWS HTTP v4 Signature
It is a security process for HTTP.

It doesn't seems to be standard, but it is used by some cloud providers.

Aws:
https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html
Outscale:
https://wiki.outscale.net/display/EN/Creating+a+Canonical+Request
GCP (I didn't test that this code work with GCP though):
https://cloud.google.com/storage/docs/access-control/signing-urls-manually

most of the code is in lib/http_v4_signature.c

Information require by the algorithm:
- The URL
- Current time
-  some prefix that are append to some of the signature parameters.

The data extracted from the URL are: the URI, the region,
the host and the API type

example:
https://api.eu-west-2.outscale.com/api/latest/ReadNets
        ~~~ ~~~~~~~~               ~~~~~~~~~~~~~~~~~~~
        ^       ^                          ^
       /         \                        URI
   API type     region

Small description of the algorithm:
- make canonical header using content type, the host, and the date
- hash the post data
- make canonical_request using custom request, the URI,
  the get data, the canonical header, the signed header
  and post data hash
- hash canonical_request
- make str_to_sign using one of the prefix pass in parameter,
  the date, the credential scope and the canonical_request hash
- compute hmac from date, using secret key as key.
- compute hmac from region, using above hmac as key
- compute hmac from api_type, using above hmac as key
- compute hmac from request_type, using above hmac as key
- compute hmac from str_to_sign using above hmac as key
- create Authorization header using above hmac, prefix pass in parameter,
  the date, and above hash

Signed-off-by: Matthias Gatto <matthias.gatto@outscale.com>

Closes #5703
2020-12-21 16:27:50 +01:00
..
opts
.gitignore
ABI.md
CMakeLists.txt
curl_easy_cleanup.3
curl_easy_duphandle.3
curl_easy_escape.3
curl_easy_getinfo.3
curl_easy_init.3
curl_easy_option_by_id.3
curl_easy_option_by_name.3
curl_easy_option_next.3
curl_easy_pause.3
curl_easy_perform.3
curl_easy_recv.3
curl_easy_reset.3
curl_easy_send.3
curl_easy_setopt.3
curl_easy_strerror.3
curl_easy_unescape.3
curl_easy_upkeep.3
curl_escape.3
curl_formadd.3
curl_formfree.3
curl_formget.3
curl_free.3
curl_getdate.3
curl_getenv.3
curl_global_cleanup.3
curl_global_init_mem.3
curl_global_init.3
curl_global_sslset.3
curl_mime_addpart.3
curl_mime_data_cb.3
curl_mime_data.3
curl_mime_encoder.3
curl_mime_filedata.3
curl_mime_filename.3
curl_mime_free.3
curl_mime_headers.3
curl_mime_init.3
curl_mime_name.3
curl_mime_subparts.3
curl_mime_type.3
curl_mprintf.3
curl_multi_add_handle.3
curl_multi_assign.3
curl_multi_cleanup.3
curl_multi_fdset.3
curl_multi_info_read.3
curl_multi_init.3
curl_multi_perform.3
curl_multi_poll.3
curl_multi_remove_handle.3
curl_multi_setopt.3
curl_multi_socket_action.3
curl_multi_socket_all.3
curl_multi_socket.3
curl_multi_strerror.3
curl_multi_timeout.3
curl_multi_wait.3
curl_multi_wakeup.3
curl_share_cleanup.3
curl_share_init.3
curl_share_setopt.3
curl_share_strerror.3
curl_slist_append.3
curl_slist_free_all.3
curl_strequal.3
curl_strnequal.3
curl_unescape.3
curl_url_cleanup.3
curl_url_dup.3
curl_url_get.3
curl_url_set.3
curl_url.3
curl_version_info.3
curl_version.3
libcurl-easy.3
libcurl-env.3
libcurl-errors.3
libcurl-multi.3
libcurl-security.3
libcurl-share.3
libcurl-thread.3
libcurl-tutorial.3
libcurl-url.3
libcurl.3
libcurl.m4
Makefile.am
Makefile.inc
mksymbolsmanpage.pl
symbols-in-versions http: introduce AWS HTTP v4 Signature 2020-12-21 16:27:50 +01:00
symbols.pl