为什么匿名服务器不能请求客户端证书?

信息安全 tls 证书
2021-08-18 05:57:44

在 TLS 中,非匿名服务器可以请求符合某些条件的客户端证书。但是,匿名服务器请求客户端证书是一个致命错误。这有充分的理由吗?

如果适用于选定的密码套件,非匿名服务器可以选择从客户端请求证书。如果发送此消息,将立即跟随 ServerKeyExchange 消息(如果已发送;否则,此消息将跟随服务器的证书消息)。

[再向下...]

注意:匿名服务器请求客户端身份验证是致命的握手失败警报。

TLS RFC 的相关部分

4个回答

为了回答这个问题,我认为根据规范查看关于什么是客户端的定义很重要。词汇表中,客户被定义为

启动与服务器的 TLS 连接的应用程序实体。这可能暗示也可能不暗示客户端启动了底层传输连接。服务器和客户端之间的主要操作区别在于服务器通常是经过身份验证的,而客户端只是可选的身份验证。

这意味着服务器应该始终经过身份验证,因此未经身份验证的服务器(或匿名服务器)不能要求客户端身份验证。换句话说,由于客户端正在启动 TLS 连接,因此服务器应该在对客户端进行身份验证之前向客户端进行身份验证。我认为语言可以更清晰,因此没有歧义。

在您的评论中,您提到了颠倒角色,因此 TCP 服务器成为 TLS 客户端,而 TCP 客户端成为 TLS 服务器。这可以使用一些巧妙的套接字级编程来实现。看看STARTTLS,它可用于以标准方式将普通连接升级为 TLS 连接。Netty是一个提供StartTLS实现的 Java 库。

原因很简单。让我以tor为例,详细解释一下。

让我们假设消息从源到目的地的第二跳是匿名服务器。因此它只能请求其以前的服务器(不是客户端)的客户端证书。

TOR中数据包的路径,Source => A => B => C => Destination

这里假设 B 是我们的匿名服务器,它正在向源/客户端请求其证书,但如果它发出请求,它将获得服务器/系统 A 的证书,而不是客户端的证书。

如果匿名服务器向客户端询问其证书,这就是致命错误的原因。

我想我可以在没有任何技术细节的情况下为你回答这个问题。你会信任并把你前门的钥匙交给你从未见过的人吗?你的车呢?你的手机密码呢?如果您的答案是否定的,那么您现在了解该错误背后的逻辑。

我假设你对细节感兴趣。请查看此 MSDN 文章的“SSL/TLS 握手中的客户端证书身份验证”部分它有一些很好的视觉效果来说明这种逻辑。

好,

为了通过网络提供安全通信,服务器需要通过 TLS 提供 LDAPS 通信协议以形成 SSL 和目录服务器。

Directory Server 支持 TLS/SSL 以保护 LDAP 客户端和 Directory Server 之间以及受复制协议约束的 Directory Server 之间的通信。

在将 Directory Server 设置为在 TLS/SSL 中运行之前,必须在 Directory Server 中正确配置服务器和 CA 证书。如果已为 Directory Server 实例生成服务器证书,并且颁发证书颁发机构 (CA) 已受到 Directory Server 的信任,请开始设置 TLS/SSL。

换句话说。

您将需要创建目录服务器证书。