目前,云監控只支持數字簽名算法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