gpt4 book ai didi

ruby - 如何在 Ruby 的 SSLServer 中实现 SSL 证书的自定义验证?

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:29 25 4
gpt4 key购买 nike

我正在使用 SSL 在两个对等点之间形成可信连接。每个对等方都知道它期望在给定时间连接到谁(或接受来自谁的连接)。它应该只接受有效证书,而且它应该只接受具有特定属性的证书(可能通过检查规范名称)。

到目前为止,基于the example in this question, and its answer,我可以让双方进行对话.每一方都可以打印出对方出示的证书。

不过,我不确定验证这些证书的正确方法是什么。显而易见的方法是在建立连接后只查看证书,如果不符合我们的期望,则断开连接。

有没有更正确的方法来做到这一点?是否有一个回调,它给出了对等方出示的证书,并且可以给它一个赞或不赞成的评价?还是在 SSL 完成其工作后处理它才是正确的做法?

最佳答案

In this case, I am the CA, so trusting the CA isn't an issue. I'm signing these certificates on behalf of my users. The canonical names aren't even domain names. Users connect peer-to-peer. I want the client software I distribute to verify that the connecting user has a certificate I signed and is the right user.

听起来您正在运行私有(private) PKI。只需使用 SSL_CTX_load_verify_locationsSSL_load_verify_locations 将信任链的根加载到 OpenSSL。

请务必使用 SSL_PEER_VERIFY 以确保 OpenSSL 执行验证。该调用可能类似于 SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);。如果对等验证失败,则 connect 将失败。

有一些方法可以确保 connect 成功,然后稍后捕获错误。诀窍是设置验证回调,让验证回调始终返回 1,然后在建立连接后调用 SSL_get_verify_result。参见 SSL/TLS Client举个例子。

注意:在所有情况下,您仍然需要手动执行名称检查。 OpenSSL 目前不这样做(它在 OpenSSL 1.1.0 的 HEAD 中)。请参阅 libcurl 或 PostgreSQL 以获取一些您可以翻录的代码。

OpenSSL 在其 wiki 上提供了一个 SSL/TLS 客户端示例。参见 SSL/TLS Client .目前没有服务器代码或示例。

关于ruby - 如何在 Ruby 的 SSLServer 中实现 SSL 证书的自定义验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com