【问题标题】:How to sign the CSR to enable a private Certificate Authority (CA) in AWS ACM? (How to generate version 3 cert?)如何签署 CSR 以在 AWS ACM 中启用私有证书颁发机构 (CA)? (如何生成版本 3 证书?)
【发布时间】:2019-10-10 13:59:09
【问题描述】:

我正在尝试在 AWS ACM 中设置私有证书颁发机构 (CA),以便在没有 Internet 访问权限的情况下(故意)设置与 VPC 的直接 VPN 连接。 https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-getting-started.html

所以在 VPN 客户端配置中,我需要获取服务器证书 ARN。这就是我尝试设置私有 CA 以设置 Client VPN Endpoint 的地方。

目前,我已经在 ACM 中创建了 Private CA,但需要:

导入 CA 证书以激活您的 CA。

我有点不清楚这里发生了什么。目前只有我一个人,所以我做了以下事情:

(点击此链接:https://gist.github.com/fntlnz/cf14feb5a46b2eda428e000157447309

在本地电脑上:

  1. 创建根 CA 私钥:

    openssl genrsa -des3 -out rootCA.key 4096
    
  2. 在本地电脑上创建并自签名“Root Certificate”:

    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
    
    1. 为 AWS 服务“AWS Service Certificate”生成证书,使用 CA 根密钥(私钥)/根证书和 AWS 颁发的 CSR:
    openssl x509 -req -in AWS-PRIVATE-CSR.pem -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out service.aws.crt -days 500 -sha256
    

然后从 AWS ACM 控制台:

  1. 来自Import CA Certificate 对话框:

    • 添加“AWS Service Certificate”作为证书正文
    • 添加“Root Certificate”作为证书链

此时我点击“确认并导入”时出现错误:

证书不匹配异常 证书版本必须大于等于3。

我使用以下命令检查了生成的“AWS Service Certificate”的版本,它显示为Version 1

openssl x509 -in service.aws.crt -text -noout
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
    ...

显然我在这里做错了什么,但我似乎无法找到它是什么。要解决当前的 AWS 错误,我的问题是:

  • 如何使用根密钥/证书和 AWS CSR 生成 Version: 3 证书?

或者,在没有互联网访问的情况下连接到 VPC 的最佳方式是什么?如果设置 VPCVPC 连接更容易,我可以通过 SSH 访问另一个 VPC,这可以工作。

【问题讨论】:

  • 你必须要么有一个非常旧的 openssl 版本,要么有一些奇怪的 openssl 配置设置。它应该生成 v3 证书,并且已经完成了很长时间......
  • 好的,我会检查的。有趣的是生成的root certificate 生成为版本3。我注意到一个使用req 命令生成版本3,而使用CSR 证书命令x509,生成版本1....
  • OpenSSL 1.1.0g 2017 年 11 月 2 日
  • 升级版本,这里有程序askubuntu.com/questions/1102803/…

标签: amazon-web-services openssl vpn aws-acm


【解决方案1】:

我的评论不正确,它可能是您的 openssl 版本。从 CSR 生成证书的说明有点偏离。问题是您没有正确设置 openssl 来执行此操作。

最简单的解决方法是创建一个包含以下内容的文本文件(例如 v3.ext):

authorityKeyIdentifier=keyid,issuer
basicConstraints=critical,CA:TRUE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

将以下内容添加到您的 openssl 命令行“-extfile 文件名”,例如"-extfile v3.ext"

所以你的 openssl 命令将是:

openssl x509 -req -in AWS-PRIVATE-CSR.pem -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out service.aws.crt -days 500 -sha256 -extfile v3.ext

然后您可以使用

进行验证

openssl x509 -in service.aws.crt -text -noout

这应该会为您生成一个 v3 证书。

【讨论】:

  • 漂亮!是的,我已经确认这会给我一个 v3 证书!
  • 这让我遇到了下一个错误:The basic constraints extension must specify that the certificate is for a CA.
  • 更新了 v3.ext 创建的文件中您提到证书导入成功的以下行:basicConstraints=critical,CA:TRUE
猜你喜欢
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 2014-02-13
相关资源
最近更新 更多