Curl is a tool and libcurl is a library for transferring data with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TFTP, SCP, SFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3, RTSP and RTMP. libcurl offers a myriad of powerful features
Перейти к файлу
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
.github Revert "CI/github: work-around for brew breakage on macOS" 2020-12-16 14:37:41 +01:00
.muse CI: Add muse CI config 2020-08-04 09:52:52 +02:00
CMake cmake: make CURL_ZLIB a tri-state variable 2020-11-19 13:38:47 +01:00
docs http: introduce AWS HTTP v4 Signature 2020-12-21 16:27:50 +01:00
include http: introduce AWS HTTP v4 Signature 2020-12-21 16:27:50 +01:00
lib http: introduce AWS HTTP v4 Signature 2020-12-21 16:27:50 +01:00
m4 Revert "libcurl.pc: make it relocatable" 2020-11-09 09:13:06 +01:00
packages OS400: update ccsidcurl.c 2020-12-10 11:30:19 +01:00
plan9 copyright: fix year ranges 2020-11-05 08:22:10 +01:00
projects copyright: fix year ranges 2020-11-05 08:22:10 +01:00
scripts travis: add CI job for Hyper build 2020-12-18 09:58:04 +01:00
src curl: add --create-file-mode [mode] 2020-12-21 10:52:41 +01:00
tests curl: add --create-file-mode [mode] 2020-12-21 10:52:41 +01:00
winbuild winbuild: remove docs from Makefiles and refer to README.md 2020-11-22 23:02:25 +01:00
.azure-pipelines.yml curl.se: new home 2020-11-04 23:59:47 +01:00
.cirrus.yml CI/cirrus: simplify logic for disabled tests 2020-11-20 12:45:11 +01:00
.dcignore .dcignore: ignore tests and docs directories 2020-06-27 00:07:37 +02:00
.dir-locals.el curl.se: new home 2020-11-04 23:59:47 +01:00
.gitattributes .gitattributes: make tabs in indentation a visible error 2018-12-06 20:21:17 +01:00
.gitignore .gitignore: add directory containing the stats repo 2020-06-05 19:54:34 +02:00
.lgtm.yml curl.se: new home 2020-11-04 23:59:47 +01:00
.mailmap mailmap: Daniel Hwang 2020-11-20 11:05:46 +01:00
.travis.yml travis: restrict the openssl3 job to only run https and ftps tests 2020-12-18 23:08:41 +01:00
CHANGES curl.se: new home 2020-11-04 23:59:47 +01:00
CMakeLists.txt cmake: enable gophers correctly in curl-config 2020-12-17 13:56:18 +01:00
COPYING COPYING: it's 2020! 2020-01-03 15:12:46 +01:00
GIT-INFO CHANGES.0: removed 2017-02-07 08:20:10 +01:00
MacOSX-Framework curl.se: new home 2020-11-04 23:59:47 +01:00
Makefile.am Revert "libcurl.pc: make it relocatable" 2020-11-09 09:13:06 +01:00
Makefile.dist curl.se: new home 2020-11-04 23:59:47 +01:00
README curl.se: new home 2020-11-04 23:59:47 +01:00
README.md curl.se: new home 2020-11-04 23:59:47 +01:00
RELEASE-NOTES RELEASE-NOTES: synced 2020-12-18 13:02:40 +01:00
SECURITY.md SECURITY.md: minor rephrase 2020-03-30 08:53:25 +02:00
acinclude.m4 curl: add compatibility for Amiga and GCC 6.5 2020-11-20 23:36:51 +01:00
appveyor.yml curl.se: new home 2020-11-04 23:59:47 +01:00
buildconf buildconf: exec autoreconf to avoid additional process 2020-08-29 21:43:49 +02:00
buildconf.bat curl.se: new home 2020-11-04 23:59:47 +01:00
configure.ac configure: add --with-hyper 2020-12-18 09:57:51 +01:00
curl-config.in curl.se: new home 2020-11-04 23:59:47 +01:00
libcurl.pc.in Revert "libcurl.pc: make it relocatable" 2020-11-09 09:13:06 +01:00
maketgz copyright: fix year ranges 2020-11-05 08:22:10 +01:00

README.md

curl logo

CII Best Practices Coverity passed Travis-CI Build Status AppVeyor Build Status Azure DevOps Build Status Cirrus Build Status Backers on Open Collective Sponsors on Open Collective Language Grade: C/C++ Codacy Badge Fuzzing Status

Curl is a command-line tool for transferring data specified with URL syntax. Find out how to use curl by reading the curl.1 man page or the MANUAL document. Find out how to install Curl by reading the INSTALL document.

libcurl is the library curl is using to do its job. It is readily available to be used by your software. Read the libcurl.3 man page to learn how!

You can find answers to the most frequent questions we get in the FAQ document.

Study the COPYING file for distribution terms.

Contact

If you have problems, questions, ideas or suggestions, please contact us by posting to a suitable mailing list.

All contributors to the project are listed in the THANKS document.

Website

Visit the curl website for the latest news and downloads.

Git

To download the very latest source from the Git server do this:

git clone https://github.com/curl/curl.git

(you'll get a directory named curl created, filled with the source code)

Security problems

Report suspected security problems via our HackerOne page and not in public!

Notice

Curl contains pieces of source code that is Copyright (c) 1998, 1999 Kungliga Tekniska Högskolan. This notice is included here to comply with the distribution terms.

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]