公司需要使用阿里提供的kms密钥管理服务,为验证服务能够正常使用。使用公司申请的测试秘钥资源进行测试。
1、使用阿里提供的demo代码,验证能够正常读取、加密、解密功能。
(ps:主要是注意配置的权限问题,基本正常)
2、本地服务验证。
由于规则要求是使用秘钥别名获取信息。所以测试时候也一直用别名带入逻辑运行。
代码操作简略如下:
public static byte[] encrypt(String keyId,String msgBuf) {
try {
EncryptResponse kmsEncryptResp = encryptByKms(keyId,msgBuf);//通过KMS加密
String encryptedStr = kmsEncryptResp.getCiphertextBlob();//得到密文
byte[] encrypted = encryptedStr.getBytes(CharsetUtil.UTF8);
return encrypted;
} catch (ClientException eResponse) {
logger.error("加密失败,处理失败:{},错误码:{},错误描述:{}",eResponse.getMessage(),eResponse.getErrCode(),eResponse.getErrMsg());
}catch (Exception e) {
logger.error("加密失败,未知异常:{}", e.getMessage());
}
}
private static EncryptResponse encryptByKms(String keyId, String plainText) throws ClientException {
String regionId = "cn-hongkong";
String accessKeyId = "LTAI4FiHpR4VzCRrdYN5E8nK";
String accessKeySecret = "TEcSKvYlGR8iHSbB5wiJmvTPRHmx22";
DefaultAcsClient kmsClient = kmsClient(regionId, accessKeyId, accessKeySecret);
EncryptRequest encReq = new EncryptRequest();
encReq.setProtocol(ProtocolType.HTTPS);
encReq.setAcceptFormat(FormatType.JSON);
encReq.setMethod(MethodType.POST);
encReq.setKeyId(keyId);
encReq.setPlaintext(plainText);
final EncryptResponse encResponse = kmsClient.getAcsResponse(encReq);
return encResponse;
}
private static DefaultAcsClient kmsClient(String regionId, String accessKeyId, String accessKeySecret) {
IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
结果一直报catch住的异常:加密失败,处理失败
1、首先以为那配置异常,导致获取不到阿里kms信息,使用debug一步步跟踪发现没问题,阿里kms返回的是
2、回到阿里的demo代码检查,不对呀。正常的呀!于是在代码里增加逻辑:
keyId = "别名";
final DescribeKeyResponse decKeyRes = DescribeKey(keyId);
/**
* Parse response and do more further
*/
DescribeKeyResponse.KeyMetadata meta = decKeyRes.getKeyMetadata();
发现读出来的keyId与我预期不一致。查找清单,发现有两个keyId的别名是一样的,其中一个状态正常,一个是被挂起删除。
3、和公司系统组申请资源的同事沟通,原来是他们提供资源时,第一次维护时一些配置填错,于是删掉后重建。两个keyId又维护成了同一个别名!!!
总结
使用阿里KMS服务时,尽量不要不同keyId维护同一个别名,用别名取时,真不知道取出的是哪个!!!
来源:CSDN
作者:Jone_ZhangH
链接:https://blog.csdn.net/tcctcszhanghao/article/details/104510970