目前,CloudMonitor只支援數位簽章演算法HMAC-SHA1。通過本文您可以瞭解數位簽章演算法HMAC-SHA1的操作方法。
操作步驟
準備可用的阿里雲存取金鑰。
當HTTP請求產生簽名時,需要使用一對存取金鑰(AccessKey ID和AccessKey Secret)。
說明您可以使用已存在的存取金鑰,也可以建立新的存取金鑰,但需要保證該密鑰處在啟用狀態。
產生請求的簽名字串。
HTTP簽名字串由HTTP請求中的Method、Header和Body資訊共同產生。
SignString = VERB + "\n" + CONTENT-MD5 + "\n" + CONTENT-TYPE + "\n" + DATE + "\n" + CanonicalizedHeaders + "\n" + CanonicalizedResource
上述簽名字串中的
\n
表示換行逸出字元,+
表示字串串連操作,其他部分定義如下表所示。名稱
描述
樣本
VERB
HTTP請求的方法名稱。
PUT、GET、POST
CONTENT-MD5
HTTP請求中Body部分的MD5值。
說明MD5必須為大寫字母和數字字串。
0B9BE351E56C90FED853B32524253E8B
CONTENT-TYPE
HTTP請求中Body部分的類型。
application/json
DATE
HTTP請求中的標準時間戳記頭。
說明遵循RFC 1123格式,使用GMT標準時間。
Mon, 3 Jan 2010 08:33:47 GMT
CanonicalizedHeaders
由HTTP請求中以
x-cms
和x-acs
為首碼的自訂頭構造的字串。x-cms-api-version:0.1.0
x-cms-signature
CanonicalizedResource
由HTTP請求資源構造的字串。
/event/custom/upload
上表中CanonicalizedHeaders和CanonicalizedResource構造方式如下:
CanonicalizedHeaders
將所有以
x-cms
和x-acs
為首碼的HTTP要求標頭的名字轉換成小寫字母。將所有CMS和ACS自訂要求標頭按照字典序的升序進行排序。
刪除要求標頭和內容之間分隔字元兩端出現的任何空格。
將所有的要求標頭和內容用
\n
分隔字元組合成最後的CanonicalizedHeaders。
CanonicalizedResource
將CanonicalizedResource設定為空白字串(””)。
將CanonicalizedResource中放入待訪問的URI,例如:
/event/custom/upload
。如果請求包含查詢字串(
QUERY_STRING
),則在CanonicalizedResource字串尾部添加?
和查詢字串。其中
QUERY_STRING
是URI中請求參數按字典序排序後的字串,其中參數名和值之間用=
相隔組成字串,並對參數名和值按照字典序升序排序,然後以&
符號串連構成字串。其公式化描述如下:QUERY_STRING = "KEY1=VALUE1" + "&" + "KEY2=VALUE2"
產生請求的數位簽章。
數位簽章公式如下:
Signature=base16(hmac-sha1(UTF8-Encoding-Of(SignString),AccessKeySecret))
簽名舉例:
SignString="POST" + "\n" +"0B9BE351E56C90FED853B32524253E8B" + "\n" +"application/json" + "\n" +"Tue, 11 Dec 2018 21:05:51 +0800" + "\n" +"x-cms-api-version:1.0" + "\n" +"x-cms-ip:127.0.0.1" + "\n" +"x-cms-signature:hmac-sha1" + "\n" +"/metric/custom/upload" accesskey="testkey" accessSecret="testsecret" //簽名密鑰。
簽名結果:
1DC19ED63F755ACDE203614C8A1157EB1097E922