閱讀930 返回首頁    go 阿裏雲


公共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) 再把英文等號連接得到的字符串按參數名稱的字典順序依次使用 &符號連接,即得到規範化請求字符串。

  • 使用上一步構造的規範化字符串按照下麵的規則構造用於計算簽名的字符串:

    1. StringToSign=
    2. HTTPMethod + “&” +
    3. percentEncode(“/”) + ”&” +
    4. percentEncode(CanonicalizedQueryString)
    5. 其中 HTTPMethod 是提交請求用的 HTTP 方法,比如 GET。
    6. percentEncode(“/”) 是按照 1.b 中描述的 URL 編碼規則對字符 “/” 進行編碼得到 的值,即 “%2F”。
    7. percentEncode(CanonicalizedQueryString) 是對第 1 步中構造的規範化請求字 符串按 1.b 中描述的 URL 編碼規則編碼後得到的字符串。
  • 按照 RFC2104 的定義,使用上麵的用於簽名的字符串計算簽名 HMAC 值。注意:計算簽名時使用的 Key 就是用戶持有的 Access Key Secret 並加上一個 “&” 字符(ASCII:38),使用的哈希算法是 SHA1。

  • 按照 Base64 編碼規則把上麵的 HMAC 值編碼成字符串,即得到簽名值(Signature)。

  • 將得到的簽名值作為 Signature 參數添加到請求參數中,即完成對請求簽名的過程。

注意:得到的簽名值在作為最後的請求參數值提交給KMS服務器的時候,要和其他參數一樣,按照 RFC3986 的規則進行 URL 編碼。

以CreateKey為例,簽名前的請求URL為:

  1. https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
  2. &SignatureVersion=1.0
  3. &Format=json
  4. &Version=2016-01-20
  5. &AccessKeyId=testid
  6. &SignatureMethod=HMAC-SHA1
  7. &Timestamp=2016-03-28T03:13:08Z

那麼StringToSign就是:

  1. 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&”,則計算得到的簽名值是:

  1. 41wk2SSX1GJh7fwnc5eqOfiJPFg= //url編碼之後是41wk2SSX1GJh7fwnc5eqOfiJPFg%3D

簽名後的請求URL為(注意增加了Signature參數):

  1. https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
  2. &SignatureVersion=1.0
  3. &Format=json
  4. &Version=2016-01-20
  5. &AccessKeyId=F5856RW8kXMuAPMU
  6. &SignatureMethod=HMAC-SHA1
  7. &Timestamp=2016-03-28T03:13:08Z
  8. &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。

示例:

  1. https://kms.cn-hangzhou.aliyuncs.com/?
  2. Format=json
  3. &Action=CreateKey
  4. &Version=2016-01-20
  5. &AccessKeyId=testid
  6. &Signature=YlrFhyqDZQ1ThNYARrv3Ptaxqfc%3D
  7. &SignatureMethod=HMAC-SHA1
  8. &Timestamp=2016-03-25T09:36:58Z
  9. &SignatureVersion=1.0

公共返回參數

用戶發送的每次接口調用請求,無論成功與否,係統都會返回一個唯一識別碼RequestId給用戶。

Xml示例:

  1. <KMS>
  2. <RequestId>348d9445-e39a-4d80-907d-298cc6c94447</RequestId>
  3. <!—返回結果數據-->
  4. </KMS>

Json示例:

  1. {
  2. "RequestId": "284b2b80-9b17-4546-a093-adfbae512a54"
  3. }

公共錯誤

錯誤代碼 描述 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示例(請求過期):

  1. <KMS>
  2. <HttpStatus>400</HttpStatus>
  3. <Code>IllegalTimestamp</Code>
  4. <Message>The input parameter "Timestamp" that is mandatory for processing this request is not supplied.</Message>
  5. <RequestId>3b237773-bc2c-4bea-95fc-319a1a5baa68</RequestId>
  6. </KMS>

Json示例(請求過期):

  1. {
  2. "HttpStatus": 400
  3. "Code": "IllegalTimestamp"
  4. "Message": "The input parameter "Timestamp" that is mandatory for processing this request is not supplied."
  5. "RequestId": "e85db688-a2d3-44ca-9790-4259f59e90d8"
  6. }

最後更新:2016-11-29 15:53:00

  上一篇:go 刪除堆棧失敗__常見問題_資源編排-阿裏雲
  下一篇:go CreateKey__API 參考_密鑰管理服務-阿裏雲