公共HTTP參數__API 參考_密鑰管理服務-阿裏雲
通訊協議
KMS服務隻支持使用HTTPS通道發送請求。
KMS不支持SSLv2和SSLv3,僅支持TLS1.0及以上。
請求方法
支持HTTP POST和GET方法發送請求
簽名機製
KMS 服務會對每個訪問的請求進行身份驗證,用戶需要在請求中包含簽名(Signature)信息。KMS 通過使用 Access Key ID 和 Access Key Secret 進行MAC(Message Authentication Code)計算的方法來驗證請求的發送者身份。Access Key ID 和 Access Key Secret 由阿裏雲官方頒發給訪問者(可以通過阿裏雲官方網站申請和管理),其中 Access Key ID 用於標識訪問者的身份;Access Key Secret 是用於加密簽名字符串和服務器端驗證簽名字符串的密鑰,必須嚴格保密,隻有阿裏雲和用戶知道。
用戶在訪問時,按照下麵的方法對請求進行簽名處理:
使用請求參數構造規範化的請求字符串(Canonicalized Query String)
(a) 按照參數名稱的字典順序對請求中所有的請求參數(包括文檔中描述的“公共請求參數”和給定了的請求接口的自定義參數,但不能包括“公共請求參數”中提到 Signature 參數本身)進行排序。注:當使用 GET 方法提交請求時,這些參數就是請求 URI 中的參數部分(即 URI 中“?”之後由“&”連接的部分)。
(b) 對每個請求參數的名稱和值進行編碼。名稱和值要使用 UTF-8 字符集進行 URL 編碼,URL 編碼的編碼規則是:
- i. 對於字符 A-Z、a-z、0-9 以及字符“-”、“_”、“.”、“~”不編碼;
- ii. 對於其他字符編碼成 “%XY” 的格式,其中 XY 是字符對應 ASCII 碼的 16 進製表示。比如英文的雙引號(”)對應的編碼就是 %22
- iii.對於擴展的 UTF-8 字符,編碼成 “%XY%ZA…” 的格式;
- iv. 需要說明的是英文空格( )要被編碼是 %20,而不是加號(+)。
- 注:一般支持 URL 編碼的庫(比如 Java 中的 java.net.URLEncoder)都是按照 “application/x-www-form-urlencoded” 的 MIME 類型的規則進行編碼的。實現時可以直接使用這類方式進行編碼,把編碼後的字符串中加號(+)替換成 %20、星號(*)替換成 %2A、%7E 替換回波浪號(~),即可得到上述規則描述的編碼字符串。```
(c) 對編碼後的參數名稱和值使用英文等號(=)進行連接。
(d) 再把英文等號連接得到的字符串按參數名稱的字典順序依次使用 &符號連接,即得到規範化請求字符串。
使用上一步構造的規範化字符串按照下麵的規則構造用於計算簽名的字符串:
StringToSign=
HTTPMethod + “&” +
percentEncode(“/”) + ”&” +
percentEncode(CanonicalizedQueryString)
其中 HTTPMethod 是提交請求用的 HTTP 方法,比如 GET。
percentEncode(“/”) 是按照 1.b 中描述的 URL 編碼規則對字符 “/” 進行編碼得到 的值,即 “%2F”。
percentEncode(CanonicalizedQueryString) 是對第 1 步中構造的規範化請求字 符串按 1.b 中描述的 URL 編碼規則編碼後得到的字符串。
按照 RFC2104 的定義,使用上麵的用於簽名的字符串計算簽名 HMAC 值。注意:計算簽名時使用的 Key 就是用戶持有的 Access Key Secret 並加上一個 “&” 字符(ASCII:38),使用的哈希算法是 SHA1。
按照 Base64 編碼規則把上麵的 HMAC 值編碼成字符串,即得到簽名值(Signature)。
將得到的簽名值作為 Signature 參數添加到請求參數中,即完成對請求簽名的過程。
注意:得到的簽名值在作為最後的請求參數值提交給KMS服務器的時候,要和其他參數一樣,按照 RFC3986 的規則進行 URL 編碼。
以CreateKey為例,簽名前的請求URL為:
https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=testid
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z
那麼StringToSign就是:
AccessKeyId=testid&Action=CreateKey&Format=json&SignatureMethod=HMAC-SHA1&SignatureVersion=1.0&Timestamp=2016-03-28T03%3A13%3A08Z&Version=2016-01-20
假如使用的Access Key Id是“testid”,Access Key Secret是“testsecret”,用於計算HMAC的Key就是“testsecret&”,則計算得到的簽名值是:
41wk2SSX1GJh7fwnc5eqOfiJPFg= //url編碼之後是41wk2SSX1GJh7fwnc5eqOfiJPFg%3D
簽名後的請求URL為(注意增加了Signature參數):
https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=F5856RW8kXMuAPMU
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z
&Signature=41wk2SSX1GJh7fwnc5eqOfiJPFg%3D
公共參數
公共請求參數是指每個接口都需要使用到的請求參數。
名稱 | 類型 | 是否必須 | 描述 |
---|---|---|---|
Format | String | 否 | 返回值的類型,支持 JSON 與 XML。默認為 XML。 |
Action | String | 是 | Api名稱,目前提供的api有:CreateKey,GenerayeDataKey,Encrypt,Decrypt,ListKeys,DescribeKey |
Version | String | 是 | API 版本號,為日期形式:YYYY-MM-DD,本版本對應為 2016-01-20。 |
AccessKeyId | String | 是 | 阿裏雲頒發給用戶的訪問服務所用的密鑰 ID。 |
Signature | String | 是 | 簽名結果串,關於簽名的計算方法,請參見上一小節中的簽名機製 |
SignatureMethod | String | 是 | 簽名方式,目前支持 HMAC-SHA1。 |
Timestamp | String | 是 | 請求的時間戳。日期格式按照 ISO8601 標準表示,並需要使用 UTC 時間。格式為:YYYY-MM-DDThh:mm:ssZ。例如,2015-12-01T12:00:00Z(為北京時間 2015 年 12 月 01 日 20 點 0 分 0 秒)。 |
SignatureVersion | String | 是 | 簽名算法版本,目前版本是 1.0。 |
示例:
https://kms.cn-hangzhou.aliyuncs.com/?
Format=json
&Action=CreateKey
&Version=2016-01-20
&AccessKeyId=testid
&Signature=YlrFhyqDZQ1ThNYARrv3Ptaxqfc%3D
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-25T09:36:58Z
&SignatureVersion=1.0
公共返回參數
用戶發送的每次接口調用請求,無論成功與否,係統都會返回一個唯一識別碼RequestId給用戶。
Xml示例:
<KMS>
<RequestId>348d9445-e39a-4d80-907d-298cc6c94447</RequestId>
<!—返回結果數據-->
</KMS>
Json示例:
{
"RequestId": "284b2b80-9b17-4546-a093-adfbae512a54"
}
公共錯誤
錯誤代碼 | 描述 | HTTP狀態碼 |
---|---|---|
InternalFailure | Internal Failure | 500 |
SerivceUnvailableTemporary | Service Unvailable Temporary | 503 |
InvalidAccessKeyId.NotFound | The Access Key ID provided does not exist in our records. | 404 |
Forbidden.KeyNotFound | The specified Key is not found. | 404 |
Forbidden.NoPermission | This operation is forbidden by permission system. | 403 |
Forbidden.AccessKey | This AccessKey is not enabled. | 403 |
ParseRequestParameterException | server parse parameters exception,please check your input params. | 400 |
MissingParameter | The parameter “< parameter name >” is needed but no provided. | 400 |
InvalidParameter | The specified parameter “< parameter name >” is not valid. | 400 |
IncompleteSignature | The request signature does not conform to Aliyun standards. | 400 |
IllegalTimestamp | The input parameter “Timestamp” that is mandatory for processing this request is not supplied. | 400 |
UnsupportedHTTPMethod | This http method not supported. | 403 |
Forbidden.UbsmsInvalidUserid | Userid Invalid For Ubsms | 403 |
Forbidden.UbsmsInvalidBid | Your account partner does not have KMS Service | 403 |
Forbidden.KmsServiceNotEnabled | Kms service not Enabled for current user, please get access permission firstly | 403 |
Forbidden.ProhibitedByRiskControl | Current user is Prohibited By Risk Control | 403 |
Forbidden.InDebtOverdue | Current user is indebted Overdue | 403 |
Forbidden.InDebt | Current user is indebted | 403 |
Rejected.LimitExceeded | User Key Limit Exceeded | 400 |
Rejected.Disabled | The specified Key is not Enable | 409 |
Rejected.StateModifiedFailed | keystate modified failed | 409 |
調用接口出錯後,將不會返回結果數據。調用方可根據附表 錯誤代碼表 來定位錯誤原因。當調用出錯時,HTTP請求返回一個4xx或5xx的HTTP狀態碼。返回的消息體中是具體的錯誤代碼及錯誤信息。另外還包含一個全局唯一的請求ID:RequestId。在調用方找不到錯誤原因,可以聯係阿裏雲客服,並提供RequestId以及您訪問的kms服務的域名,以便我們盡快幫您解決問題。
Xml示例(請求過期):
<KMS>
<HttpStatus>400</HttpStatus>
<Code>IllegalTimestamp</Code>
<Message>The input parameter "Timestamp" that is mandatory for processing this request is not supplied.</Message>
<RequestId>3b237773-bc2c-4bea-95fc-319a1a5baa68</RequestId>
</KMS>
Json示例(請求過期):
{
"HttpStatus": 400
"Code": "IllegalTimestamp"
"Message": "The input parameter "Timestamp" that is mandatory for processing this request is not supplied."
"RequestId": "e85db688-a2d3-44ca-9790-4259f59e90d8"
}
最後更新:2016-11-29 15:53:00
上一篇:
刪除堆棧失敗__常見問題_資源編排-阿裏雲
下一篇:
CreateKey__API 參考_密鑰管理服務-阿裏雲
排查DRDS慢SQL__開發手冊_分布式關係型數據庫 DRDS-阿裏雲
物理專線接入__最佳實踐_用戶指南_專有網絡 VPC-阿裏雲
備案服務號怎麼獲得?__產品驗證_備案流程_備案-阿裏雲
設置生命周期__管理存儲空間_控製台用戶指南_對象存儲 OSS-阿裏雲
發布訂閱管理__控製台使用指南_消息隊列 MQ-阿裏雲
伸縮活動中失敗實例的回滾__使用須知_用戶指南_彈性伸縮-阿裏雲
導入MySQL數據__快速入門_雲數據庫 HybridDB-阿裏雲
解讀物聯網圈重磅成人禮!阿裏雲Link物聯網平台出擊“智聯網”!
查詢執行計劃實例__執行計劃_API參考_E-MapReduce-阿裏雲
獲取域名信息__域名管理接口_API文檔_雲解析-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲