You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSSL自签名CA证书验证报错及有效生成方案问询

自签名CA证书生成问题与解决方案

操作背景

我使用以下命令生成自签名CA证书:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -sha256 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt -subj "/C=DE/O=Debug cert/CN=localhost" -extensions v3_ca -config /home/me/openssl.config

对应的openssl.config内容:

[ extensions ]
keyUsage = cRLSign # encipherOnly, keyEncipherment, keyCertSign

[ v3_ca ]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = cRLSign, keyCertSign

通过证书验证工具检测时,得到以下错误:

cablint ERROR   CA certificates must include keyUsage extension
cablint ERROR   CA:TRUE without keyCertSign
cablint INFO    CA certificate identified
x509lint    ERROR   No key usage
x509lint    INFO    Checking as root CA certificate
zlint   ERROR   CAs MUST NOT issue certificates that have authority key IDs that include both the key ID and the issuer's issuer name and serial number
zlint   ERROR   Root and Subordinate CA certificate keyUsage extension MUST be present
zlint   ERROR   Root CA certificates MUST have Key Usage Extension Present

疑问

  1. 明明配置了keyUsage,为何仍出现相关错误?
  2. 明明配置了keyCertSign,为何出现“CA:TRUE without keyCertSign”错误?
  3. 如何生成用于调试的有效自签名SSL CA证书?

另外,Android开发者官网的HTTPS调试教程中提到的-config openssl_config.txt对应的配置文件缺失,默认/etc/ssl/openssl.cnf无法满足需求,该配置文件应包含什么内容?


错误原因分析

  1. keyUsage不生效:你的配置文件缺少[req]核心段,未指定x509_extensions = v3_ca关联扩展配置,导致-extensions v3_ca参数未正确加载[v3_ca]中的设置,最终生成的证书根本没有包含keyUsage扩展,因此各检测工具报错。
  2. CA:TRUE无keyCertSign:同上,由于keyUsage扩展未被添加到证书中,工具检测到证书标记为CA,但没有对应的签发证书权限,触发错误。
  3. authorityKeyIdentifier错误:根CA证书的authorityKeyIdentifier不应包含issuer——根CA的签发者就是自身,添加issuer违反X.509规范,仅保留keyid即可。

有效自签名CA证书生成方案

1. 正确的OpenSSL配置文件(示例命名为ca-debug.cnf)

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_ca

[dn]
C = DE
O = Debug cert
CN = Local Debug CA

[v3_ca]
basicConstraints = critical, CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
keyUsage = critical, cRLSign, keyCertSign

配置说明:

  • [req]段是必填核心,通过x509_extensions关联v3_ca扩展配置
  • basicConstraints添加critical标记(CA证书必须的关键扩展)
  • authorityKeyIdentifier使用keyid:always,强制根CA生成该扩展且仅包含密钥ID
  • keyUsage添加critical标记,明确CA所需的cRLSign(吊销列表签名)和keyCertSign(签发证书)权限

2. 生成命令

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -sha256 \
  -keyout /etc/ssl/private/debug-ca.key \
  -out /etc/ssl/certs/debug-ca.crt \
  -config ca-debug.cnf

如果需要自定义主体信息,可保留-subj参数覆盖配置文件中的[dn]段内容。


Android调试教程缺失配置补充

Android官网教程中需要的openssl_config.txt可使用以下简化配置(满足调试场景合规要求):

[req]
x509_extensions = v3_ca
prompt = no
distinguished_name = dn

[dn]
C = US
O = Android Debug
CN = localhost

[v3_ca]
basicConstraints = CA:TRUE
keyUsage = cRLSign, keyCertSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always

内容的提问来源于stack exchange,提问作者Torsten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:37:44