您可以使用证书管家托管密钥和证书,并进行签名验签。本文为您介绍如何创建、下载、导入和使用证书。
步骤一:创建并下载证书
登录密钥管理服务控制台。
在页面左上角的地域下拉列表,选择证书所在的地域。
在左侧导航栏,单击证书。
单击创建证书。
在创建证书对话框,设置以下参数。
参数
说明
名称
证书使用主体名称。
国家/地区
使用ISO 3166-1的二位国家代码。例如:CN代表中国。
省/市
省、直辖市、自治区或特别行政区名称。
城市
城市名称。
公司名称
企业、单位、组织或机构的法定名称。
单击右侧加号,可以添加多个公司名称。
部门名称
部门名称。
单击右侧加号,可以添加多个部门名称。
邮箱
证书持有者或管理者邮箱。
主体别名
当证书为DV证书时,可使用主体别名生成多域名证书请求。
单击右侧加号,输入主体别名,然后单击。
密钥类型
取值:
RSA_2048
EC_SM2
EC_P256
说明 请根据证书应用系统密钥算法支持情况选择。EC_P256安全性较高,RSA_2048兼容性较好,但部分应用系统将在2030年12月31日停止支持RSA_2048密钥。
私钥可否导出
证书私钥是否需要导出使用。取值:
是:证书私钥需要导出使用。
否:证书私钥不需要导出使用。建议选择否,以便使用更高安全级别的密钥保护。
单击创建证书。
在创建证书成功对话框,单击下载证书请求。
单击确定。
步骤二:获取CA颁发的证书
将步骤一下载的.csr格式的证书请求文件提交给CA机构,获取正式的证书和证书链。
步骤三:导入证书
在证书列表页面,找到目标证书,在操作列选择更多 > 导入证书。
在导入证书对话框,输入或上传步骤二获取的证书和证书链。
单击确定。导入证书成功后,证书状态为启用中,您可以使用证书进行密钥管理、签名验签等操作。
步骤四:证书签名
方法一:调用CertificatePrivateKeySign接口使用指定证书生成数字签名。
方法二:通过KMS SDK使用指定证书生成数字签名。关于KMS SDK的更多信息,请参见SDK概览。Java代码示例如下:import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.kms.model.v20160120.CertificatePrivateKeySignRequest;
import com.aliyuncs.kms.model.v20160120.CertificatePrivateKeySignResponse;
import org.apache.commons.codec.binary.Base64;
/**
* @param client 表示Alibaba Cloud SDK Client,详见Alibaba Cloud SDK for Java文档。
* @param certId 表示证书ID,指定要使用的证书。
* @param sigAlg 表示数字签名算法,详见KMS CertificatePrivateKeySign接口文档。
* @param message 表示待签名内容,需要小于等于4KB。
*/
public byte[] doSignByCertificate(DefaultAcsClient client, String certId, String sigAlg, byte[] message) throws ClientException {
String msgB64 = Base64.encodeBase64String(message); // 对待签名内容进行Base64编码。
CertificatePrivateKeySignRequest request = new CertificatePrivateKeySignRequest();
request.setCertificateId(certId);
request.setAlgorithm(sigAlg);
request.setMessage(msgB64);
CertificatePrivateKeySignResponse response = client.getAcsResponse(request);
String sigB64 = response.getSignatureValue();
return Base64.decodeBase64(sigB64); // 对返回数据进行Base64解码获取签名值数据。
}
步骤五:证书验签
方法一:调用CertificatePublicKeyVerify接口使用指定证书验证数字签名。
方法二:通过KMS SDK使用指定证书验证数字签名。关于KMS SDK的更多信息,请参见SDK概览。Java代码示例如下:import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.kms.model.v20160120.CertificatePublicKeyVerifyRequest;
import com.aliyuncs.kms.model.v20160120.CertificatePublicKeyVerifyResponse;
import org.apache.commons.codec.binary.Base64;
/**
* @param client 表示Alibaba Cloud SDK Client,详见Alibaba Cloud SDK for Java文档。
* @param certId 表示证书ID,指定要使用的数字证书。
* @param sigAlg 表示数字签名算法,详见KMS CertificatePrivateKeySign接口参考。
* @param message 表示待验证内容,需要小于等于4KB。
* @param signature 表示待验证内容的数字签名。
*/
public Boolean doVerifyByCertificate(DefaultAcsClient client, String certId, String sigAlg, byte[] message, byte[] signature) throws ClientException {
String msgB64 = Base64.encodeBase64String(message); // 对待验证内容进行Base64编码。
String sigB64 = Base64.encodeBase64String(signature); // 对签名值进行Base64编码。
CertificatePublicKeyVerifyRequest request = new CertificatePublicKeyVerifyRequest();
request.setCertificateId(certId);
request.setAlgorithm(sigAlg);
request.setMessage(msgB64);
request.setSignatureValue(sigB64);
CertificatePublicKeyVerifyResponse response = client.getAcsResponse(request);
return response.getSignatureValid();
}