· 7 years ago · Mar 20, 2018, 02:54 PM
1require 'openssl'
2require 'base64'
3require 'digest'
4
5SECRET_KEY = "9qVrrCk/9OtL5tD9fLASOtFQvbDo74oRh6JUeb0zprQ"
6ACCESS_KEY = "PXCXJJK6N7T3S4HSDKQH"
7
8request_timestamp = Time.now.utc
9
10canonicalRequest = ""
11canonicalRequest += "GET\n"
12canonicalRequest += "/\n"
13canonicalRequest += "\n"
14canonicalRequest += "host:cp-space-test.nyc3.digitaloceanspaces.com\n"
15canonicalRequest += "x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n"
16canonicalRequest += "x-amz-date:#{request_timestamp.strftime("%Y%m%dT%H%M%SZ")}\n"
17canonicalRequest += "\n"
18canonicalRequest += "host;x-amz-content-sha256;x-amz-date\n"
19canonicalRequest += "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
20
21sha_of_canonicalRequest = (Digest::SHA256::new << canonicalRequest).hexdigest
22
23stringToSign = "AWS4-HMAC-SHA256" + "\n"
24stringToSign += request_timestamp.strftime("%F") + "\n"
25stringToSign += request_timestamp.strftime("%Y%m%d") + "/nyc3/s3/aws4_request\n"
26stringToSign += sha_of_canonicalRequest
27
28dateKey = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), "AWS4#{SECRET_KEY}", request_timestamp.strftime("%Y%m%d"))
29dateRegionKey = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), dateKey, "nyc3")
30dateRegionServiceKey = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), dateRegionKey, "s3")
31signingKey = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), dateRegionServiceKey, "aws4_request")
32
33signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha256'), signingKey, stringToSign)
34
35puts "Request:"
36puts
37puts "GET /"
38puts "Host: cp-space-test.nyc3.digitaloceanspaces.com"
39puts "X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
40puts "X-Amz-Date: #{request_timestamp.strftime("%Y%m%dT%H%M%SZ")}"
41puts "Authorization: AWS4-HMAC-SHA256 Credential=#{ACCESS_KEY}/#{request_timestamp.strftime("%Y%m%d")}/nyc3/s3/aws4_request,SignedHeaders=host;x-amz-acl;x-amz-content-sha256;x-amz-date,Signature=#{signature}"
42puts