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

时间:2018-01-30 14:26:36

标签: java ssl client-certificates

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

据我所知java https client certificate authentication,客户身份验证的使用必须由https请求的收件人发起,我找不到任何客户端来强制它,甚至报告它何时发生。

如果无法执行此操作,那么我可能会回退到将http有效负载分别加密到https连接。这意味着双重加密仍然会被用作https,而且感觉有点笨拙。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

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

多年前我写了一个简单的经过客户端认证的Java服务器/客户端,您可以查看here的某些潜在客户。