颁发私有终端实体证书 - AWS Private Certificate Authority

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

颁发私有终端实体证书

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

能力

ACM

AWS 私有 CA

颁发终端实体证书

✓(使用 RequestCertificate 或控制台)

✓(使用 IssueCertificate

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

不支持

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

控制台支持

不支持

API 支持

CLI 支持

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

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

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

注意

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

颁发标准证书(AWS CLI)

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

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

创建证书时的注意事项

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

  • 如果您使用的是 1.6.3 或更高AWS CLI版本,请在指定 base64 编码的输入文件(例如 CSR)fileb://时使用前缀。这样可以确保 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 收到 issue-certificate 命令后,会立即返回带有序列号的 ARN。但是,证书处理是异步进行的,仍然可能失败。如果发生这种情况,使用新 ARN 的 get-certificate 命令也会失败。

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

在此示例中,颁发的证书包含自定义使用者名称元素。除了提供像 颁发标准证书(AWS 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 配置文件以及如 颁发标准证书(AWS 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