AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1178042
Accepted
Alexey Malev
Alexey Malev
Asked: 2025-04-02 03:00:00 +0800 CST2025-04-02 03:00:00 +0800 CST 2025-04-02 03:00:00 +0800 CST

从自签名证书开始的多级 CA:更深层次的验证失败

  • 772

我创建了CA如下:

  1. 带有私钥的自签名证书 root-ca.cer
  2. 其他证书,用root-ca.cer签名,其名称为admin-ca.cer
  3. 使用admin-ca.cer签名的客户端证书,其名称为client.cer

openssl verifyadmin-ca.cer 与 root-ca.cer 的对接通过,但 client.cer 与 admin-ca.cer 的对接在第 1 级失败。

我想如果我将 root-ca.cer 添加到我的操作系统中的受信任证书中,这将解决问题,但如果可能的话,我想避免这种情况。相反,我是否可以client.cer以这种方式构建一个,使其包含所有链,直到root-ca.cer?

如果这很重要,那么的目的client.cer是在通过 SSL 连接到我的服务器时用作客户端证书。一个虚拟主机用作root-ca.cerCA,另一个用作admin-ca.cerCA - 而那个不起作用。

ssl-certificate
  • 2 2 个回答
  • 119 Views

2 个回答

  • Voted
  1. Best Answer
    grawity
    2025-04-02T17:17:21+08:002025-04-02T17:17:21+08:00

    我想如果我将 root-ca.cer 添加到我的操作系统中的受信任证书中,那将解决问题,但如果可能的话,我想避免这种情况。相反,我是否可以构建一个 client.cer,使其包含所有链到 root-ca.cer?

    不可以。您可以包含 root-ca.cer,但当它由对等方提供时,它不具有信任。将根 CA 添加到受信任证书的操作才是使其受信任的原因(“信任锚”)。

    通常,证书 PEM 文件应包含所有以叶(用户或服务器)开头的证书,然后是其颁发者,再是颁发者,等等,理论上以根结尾。但实际上,如果根不为人所知且不可信,则在大多数情况下包含根不会产生任何效果,因此文件应该只包含“客户端 + admin-ca”。

    cat client.crt admin-ca.crt > client_full.crt
    

    至于您的 vhost 配置,将中间体直接视为信任锚:现代 OpenSSL 支持该功能(使用PARTIAL_CHAIN标志),我不太记得旧版 OpenSSL 1.x 是否支持,但我记得“最近”OpenSSL 根本没有很好地支持它 - 直到 LetsEncrypt 交叉签名根到期,他们才最终实现这一点。相关讨论。

    (LE 与服务器证书的情况类似,服务器通常配置为发送“服务器 + LE + ISRG(DST 交叉签名)”链,而旧版 OpenSSL 无法相信“ISRG”作为根 CA。)

    Apache 在验证客户端证书时似乎没有设置X509_V_FLAG_PARTIAL_CHAIN标志,这意味着它不支持 OpenSSL 使用中间体作为受信任的 CA,因此您可能需要为所有虚拟主机配置相同的根 CA,并使用不同的方法进行管理员授权。

    • 1
  2. hardillb
    2025-04-02T14:54:37+08:002025-04-02T14:54:37+08:00

    验证客户端证书时您需要提供完整的信任链。

    因此,您需要向 Web 服务器提供一个包含中间证书和根证书的文件(文件中中间证书在前面)

    • 0

相关问题

  • SSL证书的区别?

  • 如何修复邮件服务器 SSL?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve