本文介紹應用程序通過SDK接入時可能遇到的問題。
問題列表
訪問KMS實例時出現no such host或not known報錯
問題描述
應用程序通過KMS實例SDK(Go)訪問KMS實例時:返回
kst-xxx.cryptoservice.kms.aliyuncs.com: no such host
。應用程序通過KMS實例SDK(Java)訪問KMS實例時:返回
kst-xxx.cryptoservice.kms.aliyuncs.com: nodename nor servname provided, or not known
。
問題原因
購買KMS實例后,該實例是您獨享的密鑰管理和憑據管理服務,僅可從您已配置關聯的VPC中訪問。
解決方案
如果應用程序所在VPC和KMS實例在同一個地域,請將該VPC和KMS實例關聯。具體操作,請參見同地域多VPC訪問KMS實例。
關于KMS實例關聯了哪些VPC,請參見查看KMS實例詳情。
如果應用程序所在VPC和KMS實例在不同地域,請將該VPC和KMS實例所在VPC之間的網絡打通。具體操作,請參見應用跨地域訪問KMS實例。
通過應用接入點訪問KMS實例時,出現Forbidden.NoPermission報錯
問題描述
訪問KMS實例時,返回的錯誤描述或SDK異常消息中包含:Forbidden.NoPermission : This operation is forbidden by permission system.
解決方案
應用接入點的權限策略中,RBAC權限和允許訪問資源中未配置要使用的密鑰或憑據的權限。具體操作,請參見創建應用接入點。
獲取憑據值時出現This operation for key-xxxxxx is forbidden by permission system報錯
問題描述
獲取憑據值時,KMS返回的錯誤描述或SDK異常消息中包含:This operation for key-xxxxxx is forbidden by permission system
。
以下是KMS實例SDK(Java)異常信息示例:
問題原因
應用程序缺少使用該密鑰進行解密的權限。
創建憑據時需要選擇同一個KMS實例下的密鑰加密憑據值。應用程序向KMS請求獲取憑據時,需要使用對應的密鑰解密憑據值,因此應用程序不僅要具有使用憑據的權限,還需要具有使用對應密鑰進行解密的權限。
解決方案
場景一:通過應用接入點AAP(ClientKey) 訪問KMS
編輯應用接入點的權限策略,為應用程序增加使用密鑰解密的權限。
登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊 。
單擊目標應用接入點名稱,進入應用接入點詳情頁面。
單擊權限策略操作列的編輯,完成如下配置項的設置后,單擊更新。
RBAC權限:增加勾選CryptoServiceKeyUser。
允許訪問的資源:在可選資源區域選擇密鑰,單擊圖標。或單擊已選資源后的圖標添加密鑰,格式為key/key id(例如key/key-hzz6xxxxxx)。
場景二:通過RAM用戶的AccessKey或RAM角色訪問KMS
編輯RAM權限策略,為應用程序增加使用密鑰解密的權限。
登錄RAM控制臺。
在左側導航欄,選擇
。找到您的RAM用戶或RAM角色綁定的權限策略,單擊權限策略名稱。
在策略內容頁簽,單擊修改策略內容,在
Statement
中增加如下腳本后單擊繼續編輯基本信息,然后單擊確定。{ "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "acs:kms:${region}:${account}:key/keyId-example" }
關于權限策略的更多信息,請參見密鑰管理服務自定義權限策略參考。
訪問或使用密鑰時出現Forbidden.KeyNotFound報錯
出現上述錯誤提示,通常是因為您訪問了錯誤的地域、密鑰ID或別名。
請您確保解密時訪問的地域、密鑰ID、別名與加密時一致。
調用KMS接口時出現UnsupportedOperation報錯
可能原因 | 解決方案 |
應用程序調用KMS實例中創建的密鑰進行密碼運算時,使用了阿里云SDK。 | 請使用KMS實例SDK,調用您在KMS實例中創建的密鑰進行密碼運算。更多信息,請參見KMS實例SDK。 |
應用程序通過SDK調用密碼運算接口(Encrypt、Decrypt或GenerateDataKey)時,使用了服務密鑰。 | 服務密鑰由云產品代您創建和管理,請您使用用戶主密鑰(CMK)。 |
調用生成數據密鑰GenerateDataKey接口時,用戶主密鑰(CMK)的密鑰算法為RSA、ECC或SM2非對稱算法。 | 請確保用戶主密鑰(CMK)的密鑰算法是AES或SM4對稱算法,且密鑰用途為ENCRYPT/DECRYPT。 |
請確保用戶主密鑰(CMK)的密鑰算法是RSA、ECC或SM2非對稱算法,且密鑰用途為SIGN/VERIFY。 |
訪問KMS實例時出現unable to find valid certification path to requested target報錯
可能原因一:下載CA證書時,未選擇正確的KMS實例
登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊 。
在實例管理頁面,單擊獲取實例CA證書下的下載。
在獲取實例CA證書對話框中選擇實例ID,單擊下載并妥善保管。
CA證書下載后文件名默認為PrivateKmsCA_kst-******.pem,后續會集成到SDK中用于驗證KMS實例服務的SSL證書是否真實有效。
可能原因二:SDK安裝包的版本不正確
建議您安裝最新版本的SDK,各SDK的開源代碼倉庫地址:
KMS實例的域名無法解析
問題描述
在KMS實例所屬的VPC或已關聯的VPC中,應用無法訪問KMS實例的域名。例如ping kst-hzz62****.cryptoservice.kms.aliyuncs.com
,無法解析域名,提示消息中包含 "cannot resolve"。
解決方案
請您檢查服務器的DNS配置是否為默認的100.100.2.136/100.100.2.138。詳細信息,請參見使用PrivateZone需要修改服務器的DNS配置么。
應用訪問KMS實例時提示ClientKey口令不正確
問題描述
通過KMS實例SDK(Java)訪問KMS實例時:返回
java.io.IOException: keystore password was incorrect
。通過KMS實例SDK(PHP)訪問KMS實例時:返回
Could not decrypt the privateKey of clientKey, the password is incorrect,or it is not a valid pkcs12
。通過KMS實例SDK(Go)訪問KMS實例時:返回
panic: pkcs12: decryption password incorrect
。通過KMS實例SDK(Python)訪問KMS實例時:返回
OpenSSL.crypto.Error: [('PKCS12 routines', '', 'mac verify failure')]
。
問題原因
ClientKey口令(password)不正確。
解決方案
ClientKey口令格式是否滿足要求,不滿足時您需要重新創建ClientKey。具體操作,請參見創建ClientKey。
ClientKey口令格式:8~64位,[0-9] [a-z] [A-Z] [~!@#$%^&*?_-] ,需要滿足兩種類型。
如果通過文件讀取ClientKey口令,口令文件應該只是文本文件,只包含一行密碼內容。文件內容不要包括換行符,制表符等不滿足密碼格式的特殊符號。
應用訪問KMS實例時返回HTTP 413狀態碼
所有請求參數使用Protocol Buffers編碼后(即Request Body),內容長度不能超過3 MB,超過后服務端會拒絕處理并返回HTTP 413狀態碼。
加解密操作:建議單次使用對稱密鑰加解密的數據不超過6 KB,單次使用非對稱密鑰加解密的數據不超過1 KB,超過后請使用信封加密。
簽名驗簽操作:簽名消息較大時,建議您的應用在本地對消息生成摘要后,再調用Sign/Verify接口進行簽名或驗簽。
應用訪問KMS實例時提示UnknownHostException
問題描述
應用程序通過KMS實例SDK(Java)訪問KMS實例時:返回Caused by: java.net.UnknownHostException: kst-hzz664da459rvtjtd****.cryptoservice.kms.aliyuncs.com
。
解決方案
請確認您應用的環境是否和KMS實例VPC網絡打通。
如果應用程序的VPC和KMS實例在同一地域,請將該VPC綁定到KMS實例。具體操作,請參見同地域多VPC訪問KMS實例。其他場景您可以參考如下方案。
跨VPC互聯的解決方案
您可以通過使用云企業網CEN(Cloud Enterprise Network)、VPN網關、VPC對等連接或者私網連接(PrivateLink)這幾種方案實現VPC之間的私網互通。關于這幾種跨VPC互聯解決方案的特點、介紹以及配置方法,請參見跨VPC互聯概述。
VPC如何連接公網
您可以通過ECS實例固定公網IP、彈性公網IP、NAT網關或者負載均衡使專有網絡VPC中的云資源可以訪問公網或被公網訪問。具體操作,請參見連接公網概述。
VPC如何連接IDC
您可以通過VPN網關、高速通道物理專線或智能接入網關將本地數據中心和云上專有網絡打通,構建混合云。具體操作,請參見連接本地IDC。
請確認是否正確配置了KMS VPC域名解析設置。域名解析設置,請參見內網DNS解析簡介。
安卓端是否支持使用KMS的憑據管理功能
目前不支持安卓端使用憑據管理功能。
KMS的端點(Endpoint)無法訪問
通常是因為在使用SDK訪問KMS時,未啟用HTTPS協議。
為了確保您的數據安全,KMS的端點(Endpoint)僅支持HTTPS協議。因此在使用SDK訪問KMS的端點(Endpoint)時,請執行如下代碼確保KMS已啟用HTTPS協議。
req.setProtocol(ProtocolType.HTTPS);
本地IDC無法通過域名訪問KMS實例
問題描述
本地IDC與阿里云VPC進行網絡打通,在不做任何配置情況下,本地IDC無法通過PrivateZone配置的域名kms.aliyuncs.com訪問KMS實例。
解決方案
在專線路由器上,把100.100.2.136/100.100.2.138這兩段路由放行,確保本地IDC可以ping通100.100.2.136/100.100.2.138。專線路由器配置問題可咨詢您的網絡PDSA,也可參考相關文檔:使用云企業網實現同地域云上云下網絡互通(企業版)、通過物理專線實現本地IDC與云上VPC互通、添加和管理路由條目、本地IDC通過專線使用消息隊列RocketMQ版處理消息。
重要如果您的IDC不是阿里云企業網或專線網絡,路由器配置需要咨詢您的供應商。
修改本地DNS主配置文件named.conf,將KMS域名(kms.aliyuncs.com)轉發給云DNS來進行查詢。配置文件可參考如下:
zone "kms.aliyuncs.com" { type forward; forwarders { 100.100.2.136;100.100.2.138;}; };
說明不同的DNS軟件在配置路由轉發上略有差異,您可根據軟件操作指南完成配置。
ACK通過ack-secret-manager同步KMS憑據時提示QPS Limit Exceeded
問題原因
同步KMS憑據的調用規模較大時 ,會觸發KMS的限流策略,從而發生同步憑據失敗問題。
解決方案
ack-secret-manager
的0.5.2版本已修復該問題,請升級至0.5.2及以上版本,建議您升級到最新版本。