您可以使用证书管家托管密钥和证书,并进行签名验签。本文为您介绍如何创建、下载、导入和使用证书。

步骤一:创建并下载证书

  1. 登录密钥管理服务控制台
  2. 在页面左上角的地域下拉列表,选择证书所在的地域。
  3. 在左侧导航栏,单击证书
  4. 单击创建证书
  5. 创建证书对话框,设置以下参数。
    参数 说明
    名称 证书使用主体名称。
    国家/地区 使用ISO 3166-1的二位国家代码。例如:CN代表中国。
    省/市 省、直辖市、自治区或特别行政区名称。
    城市 城市名称。
    公司名称 企业、单位、组织或机构的法定名称。

    单击右侧加号,可以添加多个公司名称。

    部门名称 部门名称。

    单击右侧加号,可以添加多个部门名称。

    邮箱 证书持有者或管理者邮箱。
    主体别名 当证书为DV证书时,可使用主体别名生成多域名证书请求。

    单击右侧加号,输入主体别名,然后单击对勾

    密钥类型 取值:
    • RSA_2048
    • EC_SM2
    • EC_P256
    说明 请根据证书应用系统密钥算法支持情况选择。EC_P256安全性较高,RSA_2048兼容性较好,但部分应用系统将在2030年12月31日停止支持RSA_2048密钥。
    私钥可否导出 证书私钥是否需要导出使用。取值:
    • 是:证书私钥需要导出使用。
    • 否:证书私钥不需要导出使用。建议选择否,以便使用更高安全级别的密钥保护。
  6. 单击创建证书
  7. 创建证书成功对话框,单击下载证书请求
  8. 单击确认

步骤二:获取CA颁发的证书

步骤一下载的.csr格式的证书请求文件提交给CA机构,获取正式的证书和证书链。

步骤三:导入证书

  1. 在证书列表页面,找到目标证书,在操作列选择更多 > 导入证书
  2. 导入证书对话框,输入或上传步骤二获取的证书和证书链。
  3. 单击确定
    导入证书成功后,证书状态为 已启用,您可以使用证书进行密钥管理、签名验签等操作。

步骤四:证书签名

  • 方法一:调用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();
    }