【问题标题】:Client program to verify certificate from private CA?客户端程序验证来自私有 CA 的证书?
【发布时间】:2016-10-15 16:58:57
【问题描述】:

我有一个使用 OpenSSL 库的 C 程序来使用 SSL/TLS 建立到 httpbin.org 的连接。客户端程序能够与服务器建立连接。

现在,我想连接到我自己的服务器,其证书由我们自己的私有或内部 CA 签名。在客户端,我想强制 OpenSSL 使用我们自己的 CA 进行证书验证。所以,我的问题是:

如何使用该库加载我自己的 CA 证书并强制它仅使用该 CA 来验证服务器证书?

【问题讨论】:

    标签: c ssl openssl x509 pki


    【解决方案1】:

    可以通过多种方式指定应使用哪个 CA 进行验证,具体取决于您拥有 CA 的方式(即 X509 结构列表、单个文件、带有证书的目录...)。由于问题中没有详细说明最后一点,因此我将答案限制为最简单的情况:单个 CA 或单个文件中 PEM 格式的 CA 列表。可以使用 SSL_CTX_verify_location 将此文件设置为唯一的 CA 存储以进行验证,如下所示:

     SSL_CTX_load_verify_locations(ctx, "ca.pem", NULL);
    

    有关更多信息(如错误处理),请参阅 the documentionexamples on how to use it

    【讨论】:

    • 告诉某人去搜索网络并没有什么帮助。出于好奇,为什么您大多提供没有代码的答案? Stack Overflow 是一个编程和开发站点,但您的答案往往属于 MCVE 缺陷类型。上面的答案可能应该是评论。这就是我很少支持你的答案的原因。
    • @jww:我不认为 stackoverflow 是一个代码编写服务,但我认为它应该提供 OP 缺少的基本信息。在这种情况下,我认为 OP 不知道如何指定 CA:“如何使用库加载我自己的 CA 证书...”。因此,我提供了所用函数的名称、函数的文档以及指向大量示例的链接,这些示例展示了如何使用该函数。如果您觉得应该做更多,请随意自己做。
    • Stack Overflow 是一个编程和开发问题的网站。几乎没有办法避免提供功能、代码、用法和解释。不幸的是,这意味着许多答案本质上是复制/粘贴。也许您应该查看How do I write a good answer to a question? 您似乎是唯一一个反对在答案中提供代码的人。我发现你的立场是避免回答,因为它是一个代码编写服务几乎是可笑的。
    • @jww:包含代码示例的更广泛的答案肯定会更有帮助,因此我添加了演示使用的基本代码行。但是鉴于 OP 做了一个 follow up question ,其中包括正确使用 SSL_CTX_verify_location ,看来我的原始答案至少对 OP 有足够的帮助。
    猜你喜欢
    • 2013-01-26
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多