如何在来自 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 无法启动。
所以我的问题是:
- 从 LetsEncrypt 为我的 CA 获取根证书是否可行?
- 如果是,我们是否需要使用 cert bot 命令传递一些额外的标志?
- 或者我哪里弄错了?
我对使用 public ca 生成证书还很陌生。
LetsEncrypt 除了域验证证书外不颁发任何东西。没有代码签名证书,没有根 CA 证书,没有别的。
我正在尝试设置一个 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 无法启动。
所以我的问题是:
- 从 LetsEncrypt 为我的 CA 获取根证书是否可行?
- 如果是,我们是否需要使用 cert bot 命令传递一些额外的标志?
- 或者我哪里弄错了?
我对使用 public ca 生成证书还很陌生。
LetsEncrypt 除了域验证证书外不颁发任何东西。没有代码签名证书,没有根 CA 证书,没有别的。