颁发私有终端实体证书 - Amazon Private Certificate Authority
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

颁发私有终端实体证书

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

能力

ACM

Amazon 私有 CA

颁发终端实体证书

✓(使用 RequestCertificate 或控制台)

✓(使用 IssueCertificate

与负载均衡器和面向互联网的 Amazon 服务关联

不支持

托管证书续订 通过 ACM 间接支持

控制台支持

不支持

API 支持

CLI 支持

Amazon 私有 CA 创建证书时,会遵循指定证书类型和路径长度的模板。如果未向创建证书的 API 或 CLI 语句提供模板 ARN,则默认情况下会EndEntityCertificate应用 /V1 模板。有关可用证书模板的更多信息,请参阅 了解证书模板

虽然 ACM 证书是围绕公共信任设计的,但 Amazon 私有 CA 可以满足私有 PKI 的需求。因此,您可以使用 Amazon 私有 CA API 和 CLI 以 ACM 不允许的方式配置证书。这些功能包括:

使用 Amazon 私有 CA 创建私有 TLS 证书后,您可以将其导入 ACM 并与支持的 Amazon 服务一起使用。

注意

使用以下步骤、使用issue-certificate命令或 IssueCertificateAPI 操作创建的证书不能直接导出以供外部使用Amazon。但是,您可以使用私有 CA 签署通过 ACM 颁发的证书,并且这些证书可以与其密钥一起导出。有关请求 ACM 证书的更多信息,请参阅《ACM 用户指南》中的请求私有证书导出私有证书

颁发标准证书(Amazon CLI)

您可以使用 Amazon 私有 CA CLI 命令 issue-certificate 或 API 操作IssueCertificate来请求最终实体证书。此命令需要要用于颁发证书的私有 CA 的 Amazon 资源名称 (ARN)。您还必须使用 OpenSSL 之类的程序生成证书签名请求(CSR)。

如果您使用 Amazon 私有 CA API 或 Amazon CLI 颁发私有证书,则证书处于非托管状态,这意味着您无法使用 ACM 控制台、ACM CLI 或 ACM API 来查看或导出证书,并且证书不会自动续订。但是,您可以使用 PCA get-certificate 命令来检索证书详细信息,如果您拥有 CA,则可以创建审计报告

创建证书时的注意事项

  • 为满足 RFC 5280 要求,您提供的域名(技术术语为公用名)长度不能超过 64 个八位字节(字符),包括句点。要添加更长的域名,请在“使用者备用名称”字段中指定该名称,该字段支持长度不超过 253 个八位字节的名称。

  • 如果您使用的是 1.6.3 或更高Amazon CLI版本,请在指定 base64 编码的输入文件(例如 CSR)fileb://时使用前缀。这样可以确保 Amazon 私有 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" }
注意

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

使用 APIPassthrough 模板颁发带有自定义使用者名称的证书

在此示例中,颁发的证书包含自定义使用者名称元素。除了提供像 颁发标准证书(Amazon CLI) 中那样的 CSR 之外,您还可以向 issue-certificate 命令传递两个额外的参数:APIPassthrough 模板的 ARN 和指定自定义属性及其对象标识符(OID)的 JSON 配置文件。您不能将 StandardAttributesCustomAttributes 结合使用。但是,您可以将标准 OID 作为 CustomAttributes 的一部分进行传递。下表列出了默认使用者名称 OID(信息来自 RFC 4519全局 OID 参考数据库):

使用者名称

缩写

对象 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

title

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 模板颁发带有自定义扩展的证书

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

示例配置文件 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