如何从客户端强制使用客户端身份验证证书

How to enforce the use of client authentication certificates from the client side

我正在处理服务器到服务器的集成,我想从 https 请求的发起方了解是否使用了客户端认证身份验证。理想情况下,我希望能够强制使用它,但是我没有关于如何从 Java 实现这一点的线索。目前我正在使用 Apache Commons Http 客户端。

据我所知 ,客户端身份验证的使用必须由 https 请求的接收者发起,我没有发现任何客户端强制执行它甚至在它发生时报告。

如果这种行为是不可能的,那么我可能会回退到将 http 负载单独加密到 https 连接。这意味着仍然使用 https 的双重加密,感觉有点笨拙。

一般来说,服务器会强制执行身份验证(在您的情况下是客户端证书身份验证),但您需要确保双方都知道如何以这种方式进行通信。

我写了一个简单的客户端证书认证 Java server/client 很多年前你可以看看 here 一些线索。

没有。它不能从客户端强制执行,只能由服务器强制执行。

普通的 https(单向)基本上是检查服务器是否被客户端信任,如果客户端信任服务器,通信就会发生。但是客户端身份验证更进一步,在客户端信任服务器之上,服务器还尝试对用户进行身份验证。只有双方相互信任,才会发生通信。

所有这些信任链验证都发生在协议级别。你不必担心它会如何发生。您所要做的就是设置信任链权限(信任库中的证书链)。

您的双重加密概念不是可行的解决方案。客户端和服务器首先以纯文本相互交谈,看看他们是否可以在这里以安全方式 (https) 进行通信。一旦他们达成协议,所有流量都将从那里加密。包括您的有效负载。

当您在服务器上加密负载并使用您自己的密钥在客户端解密时,几乎没有安全挑战,例如,如何将密钥传输到客户端进行解密?