Glassfish在没有服务器提供公钥的Servlet上Https?

时间:2018-03-20 09:06:02

标签: java ssl servlets glassfish keytool

是否可以使用静态名称(如https://.../logonServlet)创建与java-servlet的HTTPS连接,以便只有已拥有公钥/证书的客户端才能访问servlet?我想阻止服务器提供公共证书并拒绝所有其他客户端?

据我所知: 我读到了java keytool和不同的商店(密钥库(证书和私钥)和信任库(客户端,公钥))。我目前正在阅读Masoud Kalali撰写的“Glassfish Security”一书,以了解用户群和不同的安全领域以及服务器配置的不同xml选项之类的东西,但我觉得我开始将所有内容混合在一起,所以我想问你是否可以帮助我从上面的愿望。 对我来说仍然存在的一个重要问题是“为什么我们需要证书?”。不应该是一个保密的私钥和客户的公钥吗?

@Edit

  

您可能想要检查的是具有客户端身份验证的SSL / TLS。在此设置中,客户端还需要证书和私钥。如果服务器不是来自具有可信证书的客户端,则拒绝连接。这意味着服务器和客户端都需要密钥库和信任库。

好像你是对的,这就是我要找的。

1 个答案:

答案 0 :(得分:2)

不对称加密法按设计使用两个元素:

  • 公钥:与所有人共享,因此他们可以知道发送邮件的人。此外,还要加密只能使用私钥读取的邮件。
  • 私钥:只有您知道,因此您可以保证您是谁发送邮件。还要阅读使用您的公钥加密发送给您的邮件。

在典型的HTTPS设置中,服务器具有证书(带有公钥)和私钥,但公共部分与任何连接的人共享(您可以在浏览器中看到任何HTTPS站点的证书)。 这是因为通常,客户端需要知道服务器是谁,但是服务器不需要知道用户是谁(如果是,那么其他方式如密码对于普通用户来说更便宜且更方便)。 共享服务器的公共证书是SSL / TLS工作所必需的,因此无法隐藏这些密钥并同时完成握手。

所以不,服务器的公钥不能用于验证客户端,因为设计假设每个人都可以获得它。

您可能想要检查的是具有客户端身份验证的SSL / TLS。在此设置中,客户端还需要证书和私钥。如果服务器不是来自具有可信证书的客户端,则拒绝连接。这意味着服务器和客户端都需要密钥库和信任库。

请注意,密钥库和信任库是概念性术语。单个文件(例如.jks)可以同时作为两个文件,因为它可以同时包含私钥和公共证书。也就是说,它们往往存在于不同的文件中。