

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

# AWS Certificate Manager 可导出的公共证书
<a name="acm-exportable-certificates"></a>

AWS Certificate Manager 可导出的公有证书允许您在任何地方预置、管理和部署 [SSL/TLS 证书，包括 Amazon EC2 实例、容器和本地主机](acm-concepts.md#concept-sslcert)。此功能将 ACM 颁发的公共证书扩展到集成的范围之外 AWS 服务，使您可以集中控制整个基础架构中的证书。

## 优势
<a name="acm-exportable-certificates-benefits"></a>

以下内容概述了 ACM 可导出公有证书的优势：
+ *简化证书管理*：使用 ACM 集中管理所有资源的证书。
+ *更快地颁发证书*：在更短的时间内访问和使用证书。
+ *自动续订*：ACM 会自动处理证书续订，并在新证书准备好部署时通知您。有关更多信息，请参阅 [亚马逊对 ACM 的 EventBridge 支持](supported-events.md)。
+ *成本效益*：只需为您创建的可导出公有证书付费。
+ *灵活部署*：在任何支持标准 [SSL/TLS 证书](acm-concepts.md#concept-sslcert)的服务器或应用程序上使用证书。

## ACM 可导出公有证书的工作原理
<a name="acm-exportable-certificates-how-it-works"></a>

以下内容概述了 ACM 可导出公有证书的工作原理：

1. 通过 ACM 为您的域申请可导出证书。

1. 通过 DNS 或电子邮件验证来验证域所有权。

1. 导出证书、私有密钥和证书链。

1. 将证书部署到您的服务器或应用程序。

1. ACM 管理续订，并在有新证书可用时发送通知。

## 安全注意事项
<a name="acm-exportable-certificates-security"></a>

以下是使用 ACM 可导出公有证书时的安全注意事项。有关更多信息，请参阅 [中的数据保护 AWS Certificate Manager](data-protection.md)。
+ 使用安全的存储和访问控制来保护导出的私有密钥。
+ 如果您怀疑密钥泄露，请使用 ACM 的撤销功能。
+ 部署续订的证书时，请实施适当的密钥轮换过程。

## 限制
<a name="acm-exportable-certificates-limitations"></a>

以下是一些 ACM 证书限制：
+ 证书的有效期为 198 天。
+ ACM 会续订在到期日期前 45 天到期的证书。
+ 您必须管理导出证书的部署过程。

## 定价
<a name="acm-exportable-certificates-pricing"></a>

使用您创建的可导出公共 SSL/TLS 证书需要支付额外费用。 AWS Certificate Manager有关最新的 ACM 定价信息，请参阅 AWS 网站上的[AWS Certificate Manager 服务定价](https://aws.amazon.com//certificate-manager/pricing/)页面。

## 最佳实践
<a name="acm-exportable-certificates-best-practices"></a>

以下是使用 ACM 证书时的一些最佳实践：
+ 续订证书之后，您应该立即开始使用。
+ 测试并实施续订证书的自动部署流程。
+ 使用 [Amazon EventBridge 指标和警报](supported-events.md)监控证书部署。

# 导出 AWS Certificate Manager 公共证书
<a name="export-public-certificate"></a>

以下过程将引导您了解如何在 ACM 控制台中导出 ACM 公有证书。或者，您可以使用[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/export-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/export-certificate.html) AWS CLI 或 [ExportCertificate](https://docs.aws.amazon.com//acm/latest/APIReference/API_ExportCertificate.html)API 操作。

**注意**  
无法导出在 2025 年 6 月 17 日之前创建的 ACM 公有证书。

## 导出公有证书（控制台）
<a name="console-procedures"></a>

1. 登录 AWS 管理控制台 并打开 ACM 控制台，网址为。[https://console.aws.amazon.com/acm/](https://console.aws.amazon.com/acm/)

1. 选择**列出证书**，然后选中要导出的证书的复选框。

   1. 或者，您可以选择证书。在证书详细信息页面中，选择**导出**。

1. 选择**更多操作**，然后选择**导出**。

1. 输入并确认私有密钥的密码。

1. 您可以下载或复制证书文件。
**注意**  
在 ACM 控制台中，您能够导出 .pem 证书文件。您可以将 .pem 文件转换为另一种文件格式，例如 .ppk。有关更多信息，请参阅此 [re:Post 文章](https://repost.aws/knowledge-center/ec2-ppk-pem-conversion)。

## 导出公有证书 (AWS CLI)
<a name="cli-procedures"></a>

使用[https://docs.aws.amazon.com/cli/latest/reference/acm/export-certificate.html](https://docs.aws.amazon.com/cli/latest/reference/acm/export-certificate.html) AWS CLI 命令或 [ExportCertificate](https://docs.aws.amazon.com//acm/latest/APIReference/API_ExportCertificate.html)API 操作导出公有证书和私钥。运行命令时，您必须指定密码。为了提高安全性，请使用文件编辑器将密码短语存储在文件中，然后通过提供文件来提供密码短语。这样可以防止密码存储在命令历史记录中，并防止在您键入密码时其他人看到密码。

**注意**  
包含该密码的文件不得以行终止符结尾。您可以如下所示检查密码文件：

```
$ file -k passphrase.txt
passphrase.txt: ASCII text, with no line terminators
```

以下示例将命令输出发送到 `jq` 以便应用 PEM 格式。

```
[Windows/Linux]$ aws acm export-certificate \
    --certificate-arn arn:aws:acm:us-east-1:111122223333:certificate/certificate_ID \
    --passphrase fileb://path-to-passphrase-file  \
    | jq -r '"\(.Certificate)\(.CertificateChain)\(.PrivateKey)"'
```

这会输出 base64 编码的 PEM 格式证书，还包含证书链和加密的私有密钥，如下面的简短示例所示。

```
-----BEGIN CERTIFICATE-----
MIIDTDCCAjSgAwIBAgIRANWuFpqA16g3IwStE3vVpTwwDQYJKoZIhvcNAQELBQAw
EzERMA8GA1UECgwIdHJvbG9sb2wwHhcNMTkwNzE5MTYxNTU1WhcNMjAwODE5MTcx
NTU1WjAXMRUwEwYDVQQDDAx3d3cuc3B1ZHMuaW8wggEiMA0GCSqGSIb3DQEBAQUA
...
8UNFQvNoo1VtICL4cwWOdLOkxpwkkKWtcEkQuHE1v5Vn6HpbfFmxkdPEasoDhthH
FFWIf4/+VOlbDLgjU4HgtmV4IJDtqM9rGOZ42eFYmmc3eQO0GmigBBwwXp3j6hoi
74YM+igvtILnbYkPYhY9qz8h7lHUmannS8j6YxmtpPY=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIC8zCCAdugAwIBAgIRAM/jQ/6h2/MI1NYWX3dDaZswDQYJKoZIhvcNAQELBQAw
EzERMA8GA1UECgwIdHJvbG9sb2wwHhcNMTkwNjE5MTk0NTE2WhcNMjkwNjE5MjA0
NTE2WjATMREwDwYDVQQKDAh0cm9sb2xvbDCCASIwDQYJKoZIhvcNAQEBBQADggEP
...
j2PAOviqIXjwr08Zo/rTy/8m6LAsmm3LVVYKLyPdl+KB6M/+H93Z1/Bs8ERqqga/
6lfM6iw2JHtkW+q4WexvQSoqRXFhCZWbWPZTUpBS0d4/Y5q92S3iJLRa/JQ0d4U1
tWZyqJ2rj2RL+h7CE71XIAM//oHGcDDPaQBFD2DTisB/+ppGeDuB
-----END CERTIFICATE-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFKzBVBgkqhkiG9w0BBQ0wSDAnBgkqhkiG9w0BBQwwGgQUMrZb7kZJ8nTZg7aB
1zmaQh4vwloCAggAMB0GCWCGSAFlAwQBKgQQDViroIHStQgNOjR6nTUnuwSCBNAN
JM4SG202YPUiddWeWmX/RKGg3lIdE+A0WLTPskNCdCAHqdhOSqBwt65qUTZe3gBt
...
ZGipF/DobHDMkpwiaRR5sz6nG4wcki0ryYjAQrdGsR6EVvUUXADkrnrrxuHTWjFl
wEuqyd8X/ApkQsYFX/nhepOEIGWf8Xu0nrjQo77/evhG0sHXborGzgCJwKuimPVy
Fs5kw5mvEoe5DAe3rSKsSUJ1tM4RagJj2WH+BC04SZWNH8kxfOC1E/GSLBCixv3v
+Lwq38CEJRQJLdpta8NcLKnFBwmmVs9OV/VXzNuHYg==
-----END ENCRYPTED PRIVATE KEY-----
```

要将所有内容输出到文件，请将 `>` 重定向附加到上面的示例中，从而生成如下命令：

```
$ aws acm export-certificate \
     --certificate-arn arn:aws:acm:us-east-1:111122223333:certificate/certificate_ID \
     --passphrase fileb://path-to-passphrase-file \
     | jq -r '"\(.Certificate)\(.CertificateChain)\(.PrivateKey)"' \
     > /tmp/export.txt
```

# 使用 ACM 证书保护 Kubernetes 工作负载
<a name="exportable-certificates-kubernetes"></a>

您可以将可导 AWS Certificate Manager 出的公共证书与 Kubernetes AWS 控制器 (ACK) 一起使用，将 ACM 中的公共 TLS 证书颁发并导出到您的 Kubernetes 工作负载。这种集成使您能够保护亚马逊 Elastic Kubernetes Service (Amazon EKS) Pod 的安全，并在您的 Kubernetes 入口处终止 TLS。要开始使用，请参阅适用于 [Kubernetes 的 ACM 控制器](https://github.com/aws-controllers-k8s/acm-controller)。 GitHub

AWS 适用于 Kubernetes 的控制器 (ACK) 扩展了 Kubernetes API，使其能够使用原生 Kubernetes 清单来管理资源 AWS 。ACM 的 ACK 服务控制器在您的 Kubernetes 工作流程中提供自动化的证书生命周期管理。当你在 Kubernetes 中创建 ACM 证书资源时，ACK 控制器会执行以下操作：

1. 向 ACM 请求证书，ACM 会生成证书签名请求 (CSR)。

1. 等待域验证完成以及 ACM 颁发证书。

1. 如果指定了该`exportTo`字段，则导出已颁发的证书和私钥并将其存储在您指定的 Kubernetes 密钥中。

1. 如果指定了该`exportTo`字段并且证书符合续订条件，则会在到期前使用续订的证书更新 Kubernetes 密钥。

公开发行的证书需要经过[域验证后](https://docs.aws.amazon.com//acm/latest/userguide/dns-validation.html)，ACM 才能颁发证书。您可以使用[适用于 Amazon Route 53 的 ACK 服务控制器](https://github.com/aws-controllers-k8s/route53-controller)在您的托管区域中自动创建所需的 DNS 验证别名记录。

## 证书使用选项
<a name="kubernetes-ack-certificate-usage"></a>

您可以通过以下几种方式将 ACM 证书与 Kubernetes 配合使用：

![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/acm/latest/userguide/images/kubernetes-acm.png)


1. *负载均衡器终止（不导出）*：通过 ACK 颁发证书，并使用它们在 AWS 负载均衡器上终止 TLS。证书保留在 ACM 中，并由 Loa [AWS d Balancer 控制器](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.1/guide/ingress/cert_discovery/)自动发现。这种方法不需要导出证书。

1. *入口终止（使用导出）*：从 ACM 导出证书并将其存储在 Kubernetes 密钥中，以便在入口级别终止 TLS。这使您可以直接在 Kubernetes 工作负载中使用证书。

**注意**  
有关需要私有证书的用例，请参阅证书管理器插件 [Kubernetes AWS 专用 CA 连接器](https://docs.aws.amazon.com//privateca/latest/userguide/PcaKubernetes-concepts.html)。

## 先决条件
<a name="kubernetes-ack-prerequisites"></a>

在安装 ACM 的 ACK 服务控制器之前，请确保具备以下条件：
+ 一个 Kubernetes 集群。
+ Helm 已安装。
+ `kubectl` 配置为与集群通信。
+ `eksctl`安装用于在 EKS 上配置 pod 身份关联。

## 为 ACM 安装 ACK 服务控制器
<a name="kubernetes-ack-installation"></a>

使用 Helm 在你的 Amazon EKS 集群中安装 ACM 的 ACK 服务控制器。

1. 为 ACK 控制器创建命名空间。

   ```
   $ kubectl create namespace ack-system --dry-run=client -o yaml | kubectl apply -f -
   ```

1. 为 ACK 控制器创建 pod 身份关联。*CLUSTER\$1NAME*替换为您的集群*REGION*名称和您的 AWS 区域。

   ```
   $ eksctl create podidentityassociation --cluster CLUSTER_NAME --region REGION \
       --namespace ack-system \
       --create-service-account \
       --service-account-name ack-acm-controller \
       --permission-policy-arns arn:aws:iam::aws:policy/AWSCertificateManagerFullAccess
   ```

1. 登录 Amazon ECR 公共注册表。

   ```
   $ aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws
   ```

1. 为 ACM 安装 ACK 服务控制器。替换*REGION*为你所在 AWS 的地区。

   ```
   $ helm install -n ack-system ack-acm-controller oci://public.ecr.aws/aws-controllers-k8s/acm-chart --set serviceAccount.create=false --set serviceAccount.name=ack-acm-controller --set aws.region=REGION
   ```

1. 验证控制器是否正在运行。

   ```
   $ kubectl get pods -n ack-system
   ```

有关容器身份关联的更多信息，请参阅 *Amazon EKS 用户指南中的 E* [KS 容器身份](https://docs.aws.amazon.com//eks/latest/userguide/pod-identities.html)。

## 示例：在入口处终止 TLS
<a name="kubernetes-ack-example"></a>

以下示例演示如何导出 ACM 证书并使用它在 Kubernetes 入口级别终止 TLS。此配置创建 ACM 证书，将其导出到 Kubernetes 密钥，并配置一个 Ingress 资源以使用该证书终止 TLS。

在本示例中：
+ 创建密钥是为了存储导出的证书 (`exported-cert-secret`)
+ ACK 证书资源向 ACM 请求您的域名的证书，然后将其导出到`exported-cert-secret`密钥。
+ Ingress 资源引用，`exported-cert-secret`以终止传入流量的 TLS。

将 `${HOSTNAME}` 替换为您的域名。

```
apiVersion: v1
kind: Secret
type: kubernetes.io/tls
metadata:
  name: exported-cert-secret
  namespace: demo-app
data:
  tls.crt: ""
  tls.key: ""
---
apiVersion: acm.services.k8s.aws/v1alpha1
kind: Certificate
metadata:
  name: exportable-public-cert
  namespace: demo-app
spec:
  domainName: ${HOSTNAME}
  options:
    certificateTransparencyLoggingPreference: ENABLED
  exportTo: 
    namespace: demo-app
    name: exported-cert-secret
    key: tls.crt
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-traefik
  namespace: demo-app
spec:
  tls:
  - hosts:
    - ${HOSTNAME}
    secretName: exported-cert-secret
  ingressClassName: traefik
  rules:
  - host: ${HOSTNAME}
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: whoami
            port:
              number: 80
```

部署后，ACM 的 ACK 服务控制器会自动管理证书生命周期，包括续订。当 ACM 续订证书时，控制器会使用新证书更新 S `exported-cert-secret` ecret，从而确保您的 Ingress 无需手动干预即可继续使用有效证书。

# 吊销 AWS Certificate Manager 公共证书
<a name="revoke-certificate"></a>

您可以使用 ACM 控制台或 API 操作吊销可 AWS Certificate Manager 导出的公共证书。 AWS CLI

**警告**  
证书被吊销后，您将无法重复使用该证书。吊销证书是永久性的。

您可能需要吊销证书，以遵守贵组织的政策或减少密钥泄露风险。吊销证书时需要说明理由。可以使用以下原因：
+ 未指定
+ 从属关系已更改
+ Superseded
+ 停止操作

要了解更多信息，请参阅[《亚马逊信托服务证书订阅用户协议》](https://www.amazontrust.com/repository/sa-1.3.pdf)和[《亚马逊信任服务》](https://www.amazontrust.com/repository/)。

AWS 提供两种检查证书吊销的服务：在线证书状态协议 (OCSP) 和证书吊销列表。使用 OCSP，客户端可以查询实时返回状态的权威吊销数据库。OCSP 依赖于证书中嵌入的验证信息。

## 注意事项
<a name="revoke-considerations"></a>

以下是吊销证书之前的注意事项：
+ 您只能吊销之前导出的证书。
+ 您不能吊销[不可导出的公有证书](acm-exportable-certificates.md)。如果您不再需要这些证书，则应[将其删除](gs-acm-delete.md)。
+ 如果您不再需要该证书，则应[删除证书](gs-acm-delete.md)，而不是吊销证书。
+ 证书吊销过程是全局性的。您选择吊销的所有有效证书及其关联证书都将被吊销。 ARNs
+ 证书吊销是永久性的。您无法检索已吊销的证书供重复使用。
+ 吊销证书最长可能需要 24 小时才会生效。

## 吊销证书（控制台）
<a name="revoke-certificate-console"></a>

以下过程将引导您了解如何吊销 ACM 公有证书或私有证书。

1. 登录 AWS 管理控制台 并打开 ACM 控制台，网址为。[https://console.aws.amazon.com/acm/](https://console.aws.amazon.com/acm/)

1. 选择**列出证书**，然后选中要吊销的证书的复选框。

   1. 或者，您可以选择证书。在证书详细信息页面中，选择**吊销**。

1. 选择**更多操作**，然后选择**吊销**。

1. 将出现一个对话框，您必须在其中提供吊销原因，输入 **revoke**，然后选择**吊销**。

## 吊销证书 (AWS CLI)
<a name="revoke-certificate-cli"></a>

使用[https://docs.aws.amazon.com//cli/latest/reference/acm-pca/revoke-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/acm-pca/revoke-certificate.html) AWS CLI 命令或 [https://docs.aws.amazon.com/acm/latest/APIReference/API_RevokeCertificate.html](https://docs.aws.amazon.com/acm/latest/APIReference/API_RevokeCertificate.html)API 操作吊销 ACM 公有或私有证书。您可以通过调用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/list-certificates.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/list-certificates.html) 命令来检索证书的 ARN。

```
$ aws acm revoke-certificate \
    --certificate-arn arn:aws:acm:us-east-1:111122223333:certificate/12345678-1234-1234-1234 \
    --revocation-reason "UNSPECIFIED"
```

**警告**  
证书被吊销后，您将无法重复使用该证书。吊销证书是永久性的。

下面是 `revoke-certificate` 命令的输出。

```
arn:aws:acm:us-east-1:111122223333:certificate/12345678-1234-1234-1234
```

# 配置自动续订事件
<a name="configure-auto-renewals-events"></a>

 AWS Certificate Manager 借助可导出的公共证书和 Amazon EventBridge，您可以配置自动证书续订事件。

1. 设置 Amazon EventBridge 活动以监控证书续订情况。有关更多信息，请参阅 [Amazon EventBridge 对 ACM 的支持](https://docs.aws.amazon.com//acm/latest/userguide/cloudwatch-events.html)。

1. 创建自动化，以便在续订时处理证书部署。有关更多信息，请参阅 [EventBridge 在 ACM 中向亚马逊发起行动](example-actions.md)。

1. 配置 EventBridge 事件以提醒您任何续订或部署失败。

# 强制续订证书
<a name="force-certificate-renewal"></a>

您可以通过 ACM 控制台、续订证书或 API 操作[续订 ACM 公有和私有证书](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/renew-certificate.html) AWS CLI。[https://docs.aws.amazon.com/acm/latest/APIReference/API_RenewCertificate.html](https://docs.aws.amazon.com/acm/latest/APIReference/API_RenewCertificate.html)您只能续订之前导出的证书。

**重要**  
续订 ACM 可导出公有证书时，您需要支付额外费用。有关最新的 ACM 定价信息，请参阅 AWS 网站上的[AWS Certificate Manager 服务定价](https://aws.amazon.com//certificate-manager/pricing/)页面。

## 续订证书（控制台）
<a name="renew-certificate-console"></a>

以下过程将引导您了解如何强制续订 ACM 公有证书或私有证书。

1. 登录 AWS 管理控制台 并打开 ACM 控制台，网址为。[https://console.aws.amazon.com/acm/](https://console.aws.amazon.com/acm/)

1. 选择**列出证书**，然后选中要续订的证书的复选框。

   1. 或者，您可以选择证书。在证书详细信息页面中，选择**续订**。

1. 选择**更多操作**，然后选择**续订**。

1. 将出现一个对话框，您必须在其中输入 **renew**，然后选择**续订**。

## 续订证书 (AWS CLI)
<a name="renew-certificate-cli"></a>

使用[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/renew-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/renew-certificate.html) AWS CLI 命令或 [https://docs.aws.amazon.com/acm/latest/APIReference/API_RenewCertificate.html](https://docs.aws.amazon.com/acm/latest/APIReference/API_RenewCertificate.html)API 操作续订 ACM 公有或私有证书。您可以通过调用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/list-certificates.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm/list-certificates.html) 命令来检索证书的 ARN。`renew-certificate` 命令不返回响应。

```
$ aws acm renew-certificate \
    --certificate-arn arn:aws:acm:us-east-1:111122223333:certificate/12345678-1234-1234-1234-123456789012
```