您可以使用证书管家托管密钥和证书,并进行签名验签。本文为您介绍如何创建、下载、导入和使用证书。
步骤一:创建并下载证书
步骤二:获取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(); }