Servlet 上的 Glassfish Https 没有服务器提供 public 密钥?
Glassfish Https on Servlet without server delivering public keys?
是否可以使用静态名称(如 https://.../logonServlet)创建到 java-servlet 的 HTTPS 连接,以便只有已经拥有 public [=23] 的客户端=] 可以访问servlet吗?我想阻止服务器提供 public 证书并拒绝所有其他客户端?
据我所知:
我阅读了 java 密钥工具和不同的存储(密钥库(证书和私钥)和信任库(客户端,public 密钥))。我目前正在阅读 Masoud Kalali 的书 "Glassfish Security" 以了解用户组和不同的安全领域以及服务器配置的不同 xml 选项之类的东西,但我觉得我开始在脑海中混合所有内容,所以我会想问问你是否可以从上面帮助我实现我的愿望。
我仍然悬而未决的一个大问题是 "Why do we need certificates?"。不应该是一个足够保密的私钥和一个供客户使用的 public 密钥吗?
@编辑
What you may want to check is SSL/TLS with client authentication. In this setup, the clients need a certificate and a private key as well. The server will refuse connections if they are not from a client with a trusted certificate. This means that server and client need both a keystore and a truststore.
看来你是对的,这就是我要找的。
非对称加密在设计上使用两个元素:
- Public key: 分享给大家,让大家知道是你发的消息。也用于加密只能使用私钥读取的消息。
- 私钥:只有你自己知道,所以你可以保证你是发送消息的人。还可以阅读使用 public 密钥加密发送给您的消息。
在典型的 HTTPS 设置中,服务器拥有证书(带有 public 密钥)和私钥,但 public 部分与连接的任何人共享(您可以看到浏览器中任何 HTTPS 站点的证书)。
这是因为通常,客户端需要知道服务器是谁,但服务器不需要知道用户是谁(如果知道,密码等其他方式对普通用户来说更便宜、更方便)。
共享服务器的 public 证书是 SSL/TLS 工作所必需的,因此无法隐藏这些密钥并同时完成握手。
所以不,服务器的 public 密钥不能用于验证客户端,因为设计假定每个人都可以获得它。
您可能想要检查的是 SSL/TLS 客户端身份验证。在此设置中,客户端还需要证书和私钥。如果连接不是来自具有可信证书的客户端,服务器将拒绝连接。这意味着服务器和客户端都需要密钥库和信任库。
请注意,密钥库和信任库是概念性术语。单个文件(例如 .jks)可以兼作两者,因为它可以同时包含私钥和 public 证书。也就是说,它们往往位于不同的文件中。
是否可以使用静态名称(如 https://.../logonServlet)创建到 java-servlet 的 HTTPS 连接,以便只有已经拥有 public [=23] 的客户端=] 可以访问servlet吗?我想阻止服务器提供 public 证书并拒绝所有其他客户端?
据我所知: 我阅读了 java 密钥工具和不同的存储(密钥库(证书和私钥)和信任库(客户端,public 密钥))。我目前正在阅读 Masoud Kalali 的书 "Glassfish Security" 以了解用户组和不同的安全领域以及服务器配置的不同 xml 选项之类的东西,但我觉得我开始在脑海中混合所有内容,所以我会想问问你是否可以从上面帮助我实现我的愿望。 我仍然悬而未决的一个大问题是 "Why do we need certificates?"。不应该是一个足够保密的私钥和一个供客户使用的 public 密钥吗?
@编辑
What you may want to check is SSL/TLS with client authentication. In this setup, the clients need a certificate and a private key as well. The server will refuse connections if they are not from a client with a trusted certificate. This means that server and client need both a keystore and a truststore.
看来你是对的,这就是我要找的。
非对称加密在设计上使用两个元素:
- Public key: 分享给大家,让大家知道是你发的消息。也用于加密只能使用私钥读取的消息。
- 私钥:只有你自己知道,所以你可以保证你是发送消息的人。还可以阅读使用 public 密钥加密发送给您的消息。
在典型的 HTTPS 设置中,服务器拥有证书(带有 public 密钥)和私钥,但 public 部分与连接的任何人共享(您可以看到浏览器中任何 HTTPS 站点的证书)。 这是因为通常,客户端需要知道服务器是谁,但服务器不需要知道用户是谁(如果知道,密码等其他方式对普通用户来说更便宜、更方便)。 共享服务器的 public 证书是 SSL/TLS 工作所必需的,因此无法隐藏这些密钥并同时完成握手。
所以不,服务器的 public 密钥不能用于验证客户端,因为设计假定每个人都可以获得它。
您可能想要检查的是 SSL/TLS 客户端身份验证。在此设置中,客户端还需要证书和私钥。如果连接不是来自具有可信证书的客户端,服务器将拒绝连接。这意味着服务器和客户端都需要密钥库和信任库。
请注意,密钥库和信任库是概念性术语。单个文件(例如 .jks)可以兼作两者,因为它可以同时包含私钥和 public 证书。也就是说,它们往往位于不同的文件中。