如何在来自 LetsEncrypt 的基于 ECDSA 的证书中保留 KeyUsage 和 BasicConstraints 的值?

How can I persist values of KeyUsage and BasicConstraints in the ECDSA based certificates from LetsEncrypt?

我正在尝试设置一个 CA,我需要这个 CA 的根证书。此根证书必须由 public CA 签名,并且签名算法必须是 ECDSA 和 prime256v1 曲线。

我在 LetsEncryp 论坛上关注 this issue。但是,我使用单独的实用程序来生成密钥和 CSR。该实用程序帮助我成功生成 ECDSA 密钥和 CSR。以下是生成的 CSR:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: O=MyOrg, L=Bengaluru, ST=Karnataka, C=IN, CN=mydomain.in
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub: 
                    <value>
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        Attributes:
        Requested Extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication, TLS Web Server Authentication
            X509v3 Key Usage: 
                Digital Signature, Key Encipherment, Certificate Sign, CRL Sign
    Signature Algorithm: ecdsa-with-SHA256
        <value>

所以,基本上我在扩展中获得了正确的 KeyUsage 和 BasicConstraints 值。

现在,对于下一步,我在我的 ec2 实例中使用以下命令:

certbot certonly -d <mydomain> --server https://acme-v02.api.letsencrypt.org/directory --csr <csr_generated_above> --cert-name <mydomain>

使用此命令,我可以获得由 LetsEncrypt 签名的证书以及证书链。但是,在生成的证书中,我得到了不同的 KeyUsage 和 BasicConstraints 值:

Owner: CN=<my_domain>
Issuer: CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US
Serial number: <value>
Valid from: Fri Jan 03 14:46:29 UTC 2020 until: Thu Apr 02 14:46:29 UTC 2020
Certificate fingerprints:
    SHA1: <value>
    SHA256: <value>
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 256-bit EC key
Version: 3

Extensions: 

#1: <value>
#2: <value>
#3: <value>

#4: ObjectId: <value> Criticality=true
BasicConstraints:[
    CA:false
    PathLen: undefined
]

#5: <value>
#6: ObjectId: <value> Criticality=false
ExtendedKeyUsages [
    serverAuth
    clientAuth
]

#7: ObjectId: <value> Criticality=true
KeyUsage [
    DigitalSignature
]

#8: <value>
#9: <value>

如上所示,KeyUsage、BasicConstraints 和 Signature 算法没有持久化。问题是我的 CA 需要 KeyUsage 的值之一应该是 'Certificate Sign'。因此我的 CA 无法启动。

所以我的问题是:

  1. 从 LetsEncrypt 为我的 CA 获取根证书是否可行?
  2. 如果是,我们是否需要使用 cert bot 命令传递一些额外的标志?
  3. 或者我哪里弄错了?

我对使用 public ca 生成证书还很陌生。

LetsEncrypt 除了域验证证书外不颁发任何东西。没有代码签名证书,没有根 CA 证书,没有别的。

https://letsencrypt.org/docs/faq/