导入密钥材料
当用户希望使用自己的密钥材料,而不是KMS生成的密钥材料时,可通过密钥管理界面将自己的密钥材料导入到KMS,由KMS统一管理。
该任务指导用户通过密钥管理界面导入密钥材料。
操作步骤
- 登录管理控制台。
- 单击“导入密钥”,弹出“导入密钥”对话框。
- 在弹出的对话框中填写密钥参数。
- 别名:待创建密钥的别名。
- 输入字符支持数字、字母、“_”、“-”、“:”和“/”。
- 支持长度为1 ~ 255个字符。
- 密钥算法:选择密钥算法。KMS支持的密钥算法说明如表1所示。
- 密钥用途:可选择“SIGN_VERIFY”、“ENCRYPT_DECRYPT”、“GENERATE_VERIFY_MAC”。
- 对于AES_256对称密钥,默认值“ENCRYPT_DECRYPT”。
- 对于RSA非对称密钥,可选择“ENCRYPT_DECRYPT”或“SIGN_VERIFY”,省略参数为默认值“SIGN_VERIFY”。
- 对于ECC非对称密钥,默认值“SIGN_VERIFY”。
创建密钥时请选择“密钥用途”,密钥创建后不可修改。
- (可选)描述:可根据自己的需要为自定义密钥添加描述。
支持长度为1 ~ 255个字符。
- 别名:待创建密钥的别名。
- (可选)用户可根据自己的需要为自定义密钥添加标签,输入“标签键”和“标签值”。
- 当用户在创建密钥时,没有为该自定义密钥添加标签。如果用户需要为该自定义密钥添加标签,可单击该自定义密钥的别名,进入密钥详情页面,单击“标签”,为该自定义密钥添加标签。
- 同一个自定义密钥下,一个标签键只能对应一个标签值;不同的自定义密钥下可以使用相同的标签键。
- 用户最多可以给单个自定义密钥添加20个标签。
- 当同时添加多个标签,需要删除其中一个待添加的标签时,可单击该标签所在行的“删除”,删除标签。
- 勾选“我已经了解导入密钥的安全性和持久性”,创建密钥材料为空的自定义密钥。
- 单击“下一步”,进入“获取包装密钥和导入令牌”页面。根据选择密钥包装算法。
表2 密钥包装算法说明 密钥包装算法
说明
设置
RSAES_OAEP_SHA_256
具有“SHA-256”哈希函数的OAEP的RSA加密算法。
请您根据自己的HSM功能选择加密算法。
如果您的HSM支持“RSAES_OAEP_SHA_256”加密算法,推荐使用“RSAES_OAEP_SHA_256”加密密钥材料。
当用户执行“导入密钥”操作,但未成功导入密钥材料便退出操作过程时,可在待导入密钥材料的自定义密钥所在行单击“导入密钥材料”,页面会弹出“导入密钥材料”对话框,用户可继续执行导入密钥材料的操作。
- 获取“包装密钥”和“导入令牌”,并加密密钥材料,如果您已有密钥材料,可跳过本步骤。
- 获取“包装密钥”和“导入令牌”。
- 方法一:单击“下载并继续”,下载的文件为包装密钥,如图 下载文件所示。
- wrappingKey_密钥ID:即包装密钥,编码为二进制格式,用于加密密钥材料的包装密钥。
- 导入令牌:引导程序自动传递导入令牌,无需下载,如果中途退出引导程序,导入令牌将自动失效。
包装密钥将在24小时后失效,失效后将不能使用。如果包装密钥失效,请重新下载包装密钥。
引导程序将自动传递导入令牌,如果创建密钥过程中,关闭或者退出设置则导入令牌失效。重新发起导入密钥材料操作时,导入令牌引导程序自动启动。
- 方法二:通过调用API接口的方式获取包装密钥和导入令牌。
- 调用“get-parameters-for-import”接口,获取包装密钥和导入令牌。
- public_key:调用API接口返回的base64编码的包装密钥内容。
- import_token:调用API接口返回的base64编码的导入令牌内容。
以获取密钥ID为“43f1ffd7-18fb-4568-9575-602e009b7ee8”,加密算法为“RSAES_OAEP_SHA_256”的包装密钥和导入令牌为例。- 请求样例
{ "key_id": "43f1ffd7-18fb-4568-9575-602e009b7ee8", "wrapping_algorithm":"RSAES_OAEP_SHA_256" }
- 响应样例
{ "key_id": "43f1ffd7-18fb-4568-9575-602e009b7ee8", "public_key":"public key base64 encoded data", "import_token":"import token base64 encoded data", "expiration_time":1501578672 }
- 保存包装密钥,包装密钥需要按照以下步骤转换格式。使用转换格式后的包装密钥加密的密钥材料才能成功导入管理控制台。
- 复制包装密钥“public_key”的内容,粘贴到“.txt”文件中,并保存为“PublicKey.b64”。
- 使用OpenSSL,执行以下命令,对“PublicKey.b64”文件内容进行base64转码,生成二进制数据,并将转码后的文件保存为“PublicKey.bin”。
openssl enc -d -base64 -A -in PublicKey.b64 -out PublicKey.bin
- 保存导入令牌,复制导入令牌“import_token”的内容,粘贴到“.txt”文件中,并保存为“ImportToken.b64”。
- 调用“get-parameters-for-import”接口,获取包装密钥和导入令牌。
- 方法一:单击“下载并继续”,下载的文件为包装密钥,如图 下载文件所示。
- 使用“包装密钥”加密密钥材料。
执行完此步骤后可获得以下文件:
对称密钥场景:EncryptedKeyMaterial.bin密钥材料
非对称密钥场景:EncryptedKeyMaterial.bin临时密钥材料和out_rsa_private_key.der私钥密文
方法一:使用下载的包装密钥在自己的HSM中加密密钥材料,详细信息请参考您的HSM操作指南。
方法二:使用OpenSSL生成密钥材料,并用下载的“包装密钥”对密钥材料进行加密。如果用户需要使用openssl pkeyutl命令,OpenSSL需要是1.0.2及以上版本。
- 生成密钥材料(256位对称密钥),并将生成的密钥材料以“PlaintextKeyMaterial.bin”命名保存。
- 使用下载的“包装密钥”加密密钥材料,并将加密后的密钥材料按“EncryptedKeyMaterial.bin”命名保存。
如果“包装密钥”由控制台下载,以下命令中的PublicKey.bin参数请以下载的包装密钥名称wrappingKey_密钥ID进行替换。
表3 使用下载的包装密钥加密生成的密钥材料 包装密钥算法
加密生成的密钥材料
RSAES_OAEP_SHA_256
openssl pkeyutl
-in PlaintextKeyMaterial.bin
-inkey PublicKey.bin
-out EncryptedKeyMaterial.bin
-keyform der
-pubin -encrypt
-pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
- (可选)对于导入非对称密钥的场景,需要生成非对称私钥,并使用临时密钥材料(“ EncryptedKeyMaterial.bin”)对私钥进行加密,加密后的文件作为“私钥密文”导入。
- 执行以下命令(以配套算法为“RSA4096算法”为例):
- 生成私钥
- 格式转换成pkcs8格式
openssl pkcs8 -topk8 -inform PEM -in pkcs1_rsa_private_key.pem -outform pem -nocrypt -out rsa_private_key.pem
- pkcs8格式转换成der格式
openssl pkcs8 -topk8 -inform PEM -outform DER -in rsa_private_key.pem -out rsa_private_key.der -nocrypt
- 使用临时密钥材料对私钥进行加密
openssl enc -id-aes256-wrap-pad -K $(cat 0xPlaintextKeyMaterial.bin) -iv A65959A6 -in rsa_private_key.der -out out_rsa_private_key.der
默认情况下,OpenSSL命令行工具中未启用包装密码算法-id-aes256-wrap-pad。您可以下载并安装最新版本的OpenSSL,然后对其进行修补,以完成导入非对称密钥所需的信封包装。修补方式可以参考常见问题。
- 执行以下命令(以配套算法为“RSA4096算法”为例):
- 获取“包装密钥”和“导入令牌”。
- 已有密钥材料时,单击“已有密钥材料”,进入“导入密钥材料”页面。
表4 导入密钥材料参数说明(对称密钥场景) 参数
说明
密钥ID
创建密钥时,随机生成的密钥ID。
密钥材料
导入密钥材料。
例如:使用7.b.ii中“EncryptedKeyMaterial.bin”文件。
- 单击“下一步”,进入“密钥导入令牌”页面。根据表6设置参数。
- 单击“确定”,页面右上角弹出“密钥导入成功”,则说明导入密钥成功。
密钥ID、导入的密钥材料和导入的令牌需要全部匹配,密钥材料才能导入成功,否则会导入失败。
用户可在密钥列表中查看到导入的密钥信息,导入密钥的默认状态为“启用”。