

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 颁发私有终端实体证书
<a name="PcaIssueCert"></a>

有了私有 CA 后，您可以向 AWS Certificate Manager (ACM) 或申请私有终端实体证书。 AWS 私有 CA下表对两项服务的功能进行了比较。


****  

|  能力  |  ACM  |  AWS 私有 CA  | 
| --- | --- | --- | 
|  颁发终端实体证书  |  ✓（使用 [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html) 或控制台）  |  ✓（使用 [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html)）  | 
|  与负载均衡器和面向互联网的服务 AWS 关联  |  ✓  |  不支持  | 
| 托管证书续订 | ✓ | 通过 ACM 间接[支持](https://docs.aws.amazon.com/acm/latest/userguide/managed-renewal.html) | 
|  控制台支持  |  ✓  |  不支持  | 
|  API 支持  |  ✓  |  ✓  | 
|  CLI 支持  |  ✓  |  ✓  | 

 AWS 私有 CA 创建证书时，它遵循指定证书类型和路径长度的模板。如果未向创建证书的 API 或 CLI 语句提供模板 ARN，则默认情况下会[EndEntityCertificate应用 /V1](template-definitions.md#EndEntityCertificate-V1) 模板。有关可用证书模板的更多信息，请参阅 [使用 AWS 私有 CA 证书模板](UsingTemplates.md)。

虽然 ACM 证书是围绕公共信任设计的，但 AWS 私有 CA 可以满足您的私有 PKI 的需求。因此，您可以使用 AWS 私有 CA API 和 CLI 以 ACM 不允许的方式配置证书。这些功能包括：
+ 创建具有任何使用者名称的证书。
+ 使用任何[支持的私有密钥算法和密钥长度](https://docs.aws.amazon.com/privateca/latest/userguide/supported-algorithms.html)。
+ 使用任何[支持的签名算法](https://docs.aws.amazon.com/privateca/latest/userguide/supported-algorithms.html)。
+ 指定私有 [CA](PcaCreateCa.html) 和私有[证书](PcaIssueCert.html)的任何有效期。

使用创建私有 TLS 证书后 AWS 私有 CA，您可以将其[导入](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-api-cli.html) ACM 并与支持的 AWS 服务一起使用。

**注意**  
使用以下步骤、使用**issue-certificate**命令或 [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html)API 操作创建的证书不能直接导出以供外部使用 AWS。但是，您可以使用私有 CA 签署通过 ACM 颁发的证书，并且这些证书可以与其密钥一起导出。有关请求 ACM 证书的更多信息，请参阅《ACM 用户指南》**中的[请求私有证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-private.html)和[导出私有证书](https://docs.aws.amazon.com/acm/latest/userguide/export-private.html)。

## 颁发标准证书 (AWS CLI)
<a name="IssueCertCli"></a>

您可以使用 AWS 私有 CA CLI 命令 [issue-certificate 或 API 操作[IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html)来请求最终实体证书](https://docs.aws.amazon.com/cli/latest/reference/acm-pca/issue-certificate.html)。此命令需要要用于颁发证书的私有 CA 的 Amazon 资源名称 (ARN)。您还必须使用 [OpenSSL](https://www.openssl.org/) 之类的程序生成证书签名请求（CSR）。

如果您使用 AWS 私有 CA API 或 AWS CLI 颁发私有证书，则证书处于非托管状态，这意味着您无法使用 ACM 控制台、ACM CLI 或 ACM API 来查看或导出证书，也不会自动续订证书。但是，您可以使用 PCA [get-certificate](https://docs.aws.amazon.com/cli/latest/reference/acm-pca/get-certificate.html) 命令来检索证书详细信息，如果您拥有 CA，则可以创建[审计报告](PcaAuditReport.md)。

**创建证书时的注意事项**
+ 为满足 [RFC 5280](https://datatracker.ietf.org/doc/html/rfc5280) 要求，您提供的域名（技术术语为公用名）长度不能超过 64 个八位字节（字符），包括句点。要添加更长的域名，请在“使用者备用名称”字段中指定该名称，该字段支持长度不超过 253 个八位字节的名称。
+ 如果您使用的是 1.6.3 或更高 AWS CLI 版本，请在指定 base64 编码的输入文件`fileb://`时使用前缀，例如。 CSRs这样可以确保正确 AWS 私有 CA 解析数据。

以下 OpenSSL 命令为证书生成 CSR 和私有密钥：

```
$ openssl req -out csr.pem -new -newkey rsa:2048 -nodes -keyout private-key.pem
```

您可以按如下方式检查 CSR 的内容：

```
$ openssl req -in csr.pem -text -noout
```

生成的输出应与以下简短示例类似：

```
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=US, O=Big Org, CN=example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ca:85:f4:3a:b7:5f:e2:66:be:fc:d8:97:65:3d:
                    a4:3d:30:c6:02:0a:9e:1c:ca:bb:15:63:ca:22:81:
                    00:e1:a9:c0:69:64:75:57:56:53:a1:99:ee:e1:cd:
                    ...
                    aa:38:73:ff:3d:b7:00:74:82:8e:4a:5d:da:5f:79:
                    5a:89:52:e7:de:68:95:e0:16:9b:47:2d:57:49:2d:
                    9b:41:53:e2:7f:e1:bd:95:bf:eb:b3:a3:72:d6:a4:
                    d3:63
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         74:18:26:72:33:be:ef:ae:1d:1e:ff:15:e5:28:db:c1:e0:80:
         42:2c:82:5a:34:aa:1a:70:df:fa:4f:19:e2:5a:0e:33:38:af:
         21:aa:14:b4:85:35:9c:dd:73:98:1c:b7:ce:f3:ff:43:aa:11:
         ....
         3c:b2:62:94:ad:94:11:55:c2:43:e0:5f:3b:39:d3:a6:4b:47:
         09:6b:9d:6b:9b:95:15:10:25:be:8b:5c:cc:f1:ff:7b:26:6b:
         fa:81:df:e4:92:e5:3c:e5:7f:0e:d8:d9:6f:c5:a6:67:fb:2b:
         0b:53:e5:22
```

以下命令创建证书。由于未指定模板，因此默认情况下会颁发基本终端实体证书。

```
$ aws acm-pca issue-certificate \
      --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/11223344-1234-1122-2233-112233445566 \
      --csr fileb://csr.pem \
      --signing-algorithm "SHA256WITHRSA" \
      --validity Value=365,Type="DAYS"
```

将返回已颁发证书的 ARN：

```
{
   "CertificateArn":"arn:aws:acm-pca:region:account:certificate-authority/CA_ID/certificate/certificate_ID"
}
```

**注意**  
AWS 私有 CA 收到命令后，会立即返回带有序列号的 ARN。**issue-certificate**但是，证书处理是异步进行的，仍然可能失败。如果发生这种情况，使用新 ARN 的 **get-certificate** 命令也会失败。

## 使用 APIPassthrough 模板颁发带有自定义主题名称的证书
<a name="custom-subject-1"></a>

在此示例中，颁发的证书包含自定义使用者名称元素。除了提供像中的那样的 CSR 之外[颁发标准证书 (AWS CLI)](#IssueCertCli)，您还可以向**issue-certificate**命令传递两个额外的参数： APIPassthrough 模板的 ARN 和指定自定义属性及其对象标识符的 JSON 配置文件（）OIDs。您不能与一起使用`CustomAttributes`。但是，您可以通过标准 OIDs 作为其`StandardAttributes`中的一部分`CustomAttributes`。下表 OIDs 列出了默认主题名称（来自 [RFC 4519](https://www.rfc-editor.org/rfc/rfc4519) 和[全局 OID 参考数据库](https://oidref.com)的信息）：


|  使用者名称  |  缩写  |  对象 ID  | 
| --- | --- | --- | 
|  countryName  |  c  | 2.5.4.6 | 
|  commonName  |  cn  | 2.5.4.3 | 
|  dnQualifier [可分辨名称限定符]  |    | 2.5.4.46 | 
|  generationQualifier  |    | 2.5.4.44 | 
|  givenName  |    | 2.5.4.42 | 
|  initials  |    | 2.5.4.43 | 
|  locality  |  l  | 2.5.4.7 | 
|  organizationName  |  o  | 2.5.4.10 | 
|  organizationalUnitName  |  ou  | 2.5.4.11 | 
|  pseudonym  |    | 2.5.4.65 | 
|  serialNumber  |    | 2.5.4.5 | 
|  st [状态]  |    | 2.5.4.8 | 
|  surname  |  sn  | 2.5.4.4 | 
|  删除实例快照  |    | 2.5.4.12 | 
|  domainComponent  |  dc  |  0.9.2342.19200300.100.1.25  | 
|  userid  |    |  0.9.2342.19200300.100.1.1  | 

示例配置文件 `api_passthrough_config.txt` 包含以下代码：

```
{
  "Subject": {
    "CustomAttributes": [
      {
        "ObjectIdentifier": "2.5.4.6",
        "Value": "US"
      },
      {
        "ObjectIdentifier": "1.3.6.1.4.1.37244.1.1",
        "Value": "BCDABCDA12341234"
      },
      {
        "ObjectIdentifier": "1.3.6.1.4.1.37244.1.5",
        "Value": "CDABCDAB12341234"
      }
    ]
  }
}
```

使用以下命令颁发证书：

```
$ aws acm-pca issue-certificate \
      --validity Type=DAYS,Value=10 
      --signing-algorithm "SHA256WITHRSA" \
      --csr fileb://csr.pem \
      --api-passthrough file://api_passthrough_config.txt \
      --template-arn arn:aws:acm-pca:::template/BlankEndEntityCertificate_APIPassthrough/V1 \
      --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/11223344-1234-1122-2233-112233445566
```

将返回已颁发证书的 ARN：

```
{
   "CertificateArn":"arn:aws:acm-pca:region:account:certificate-authority/CA_ID/certificate/certificate_ID"
}
```

按如下方式在本地检索证书：

```
$ aws acm-pca get-certificate \
      --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/11223344-1234-1122-2233-112233445566 \
      --certificate-arn arn:aws:acm-pca:region:account:certificate-authority/CA_ID/certificate/certificate_ID | \
      jq -r .'Certificate' > cert.pem
```

您可以使用 OpenSSL 检查证书的内容：

```
$ openssl x509 -in cert.pem -text -noout
```

**注意**  
也可以创建一个私有 CA，将自定义属性传递给它颁发的每个证书。

## 使用 APIPassthrough 模板颁发带有自定义扩展名的证书
<a name="custom-subject-2"></a>

在此示例中，颁发的证书包含自定义扩展。为此，您需要向**issue-certificate**命令传递三个参数： APIPassthrough 模板的 ARN、指定自定义扩展的 JSON 配置文件，以及如中所示的 CSR。[颁发标准证书 (AWS CLI)](#IssueCertCli)

示例配置文件 `api_passthrough_config.txt` 包含以下代码：

```
{
  "Extensions": {
    "CustomExtensions": [
      {
        "ObjectIdentifier": "2.5.29.30",
        "Value": "MBWgEzARgg8ucGVybWl0dGVkLnRlc3Q=",
        "Critical": true
      }
    ]
  }
}
```

自定义证书的颁发方式如下：

```
$ aws acm-pca issue-certificate \
      --validity Type=DAYS,Value=10 
      --signing-algorithm "SHA256WITHRSA" \
      --csr fileb://csr.pem \
      --api-passthrough file://api_passthrough_config.txt \
      --template-arn arn:aws:acm-pca:::template/EndEntityCertificate_APIPassthrough/V1 \
      --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/11223344-1234-1122-2233-112233445566
```

将返回已颁发证书的 ARN：

```
{
   "CertificateArn":"arn:aws:acm-pca:region:account:certificate-authority/CA_ID/certificate/certificate_ID"
}
```

按如下方式在本地检索证书：

```
$ aws acm-pca get-certificate \
      --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/11223344-1234-1122-2233-112233445566 \
      --certificate-arn arn:aws:acm-pca:region:account:certificate-authority/CA_ID/certificate/certificate_ID | \
      jq -r .'Certificate' > cert.pem
```

您可以使用 OpenSSL 检查证书的内容：

```
$ openssl x509 -in cert.pem -text -noout
```