是否可以使用静态名称(如https://.../logonServlet)创建与java-servlet的HTTPS连接,以便只有已拥有公钥/证书的客户端才能访问servlet?我想阻止服务器提供公共证书并拒绝所有其他客户端?
据我所知: 我读到了java keytool和不同的商店(密钥库(证书和私钥)和信任库(客户端,公钥))。我目前正在阅读Masoud Kalali撰写的“Glassfish Security”一书,以了解用户群和不同的安全领域以及服务器配置的不同xml选项之类的东西,但我觉得我开始将所有内容混合在一起,所以我想问你是否可以帮助我从上面的愿望。 对我来说仍然存在的一个重要问题是“为什么我们需要证书?”。不应该是一个保密的私钥和客户的公钥吗?
@Edit
您可能想要检查的是具有客户端身份验证的SSL / TLS。在此设置中,客户端还需要证书和私钥。如果服务器不是来自具有可信证书的客户端,则拒绝连接。这意味着服务器和客户端都需要密钥库和信任库。
好像你是对的,这就是我要找的。 p>
答案 0 :(得分:2)
不对称加密法按设计使用两个元素:
在典型的HTTPS设置中,服务器具有证书(带有公钥)和私钥,但公共部分与任何连接的人共享(您可以在浏览器中看到任何HTTPS站点的证书)。 这是因为通常,客户端需要知道服务器是谁,但是服务器不需要知道用户是谁(如果是,那么其他方式如密码对于普通用户来说更便宜且更方便)。 共享服务器的公共证书是SSL / TLS工作所必需的,因此无法隐藏这些密钥并同时完成握手。
所以不,服务器的公钥不能用于验证客户端,因为设计假设每个人都可以获得它。
您可能想要检查的是具有客户端身份验证的SSL / TLS。在此设置中,客户端还需要证书和私钥。如果服务器不是来自具有可信证书的客户端,则拒绝连接。这意味着服务器和客户端都需要密钥库和信任库。
请注意,密钥库和信任库是概念性术语。单个文件(例如.jks)可以同时作为两个文件,因为它可以同时包含私钥和公共证书。也就是说,它们往往存在于不同的文件中。