【问题标题】:Provide CA chain for my API: should I include all certs in chain?为我的 API 提供 CA 链:我应该在链中包含所有证书吗?
【发布时间】:2012-03-31 03:53:12
【问题描述】:

美好的一天!

我正在开发可通过 HTTPS 访问的类似 REST 的 API。我的证书由 CA 颁发并具有中间证书(我的证书有 3 个级别:AddTrust -> Comodo -> EssentialSSL -> 我的证书)。

我想为我的 API 用户提供我的 .NET 和 PHP SDK 的证书链,就像 Facebook 一样: https://github.com/facebook/php-sdk/blob/master/src/fb_ca_chain_bundle.crt

我通过一一订购我的证书创建了类似的文本文件,它适用于命令行 curl 和 PHP curl 库。

但当我只有 一个 根证书(在我的情况下为 AddTrust)时,它可以工作。

我应该将所有证书与我的 SDK 捆绑在一起,还是只捆绑一个根证书?

【问题讨论】:

    标签: php asp.net-mvc rest ssl https


    【解决方案1】:

    需要捆绑您不希望用户拥有的任何证书。如果您在链中缺少中间证书,则该链下的所有证书都将无效。

    您的证书是由 EssentialSSL 颁发的;如果没有 EssentialSSL 的中间证书,系统就无法知道您的证书是否有效,或者最终追溯到 AddTrust。例如,我已经为 AddTrust 和 Comodo 安装了证书,但没有安装 EssentialSSL,因此我的系统不会认为您的证书受信任。

    当您说“当我只有一个根证书时它可以工作”时,您究竟是什么意思?根据定义,您总是在链中只有一个根证书;其余的是由更高层颁发的中级证书。您能否更具体地说明您实际遇到的问题?

    【讨论】:

    • 首先我真的认为我需要全链,所以这里有一个问题。当我说“当我只有一个根证书时它可以工作”时,这意味着当我为 curl 提供完整链并要求 SSL 检查时,它的工作方式与我只提供一个顶级根证书时的工作方式相同。
    • 你是在你的开发机器之外的机器上测试这个吗?如果中间证书安装到您的本地证书存储中,那么您根本不需要该链。您需要找到一台没有安装“EssentialSSL”证书的机器来验证您的证书链是否被正确加载。
    • Windows 上的命令行 curl 和 php 中的 curl 库默认没有任何证书(甚至像浏览器这样的 CA 证书)。
    • 检查了 wget 的 win32 版本——它没有任何 CA 证书,需要指定 --ca-certificate 选项。我可以使用完整链或仅顶级证书访问我的 HTTPS 安全页面。
    猜你喜欢
    • 2021-09-12
    • 2019-12-19
    • 2020-04-06
    • 1970-01-01
    • 2022-11-04
    • 2018-12-28
    • 2012-06-03
    • 2016-04-28
    • 2012-01-01
    相关资源
    最近更新 更多