通过 Java 中的多个条目在密钥库中通过别名获取证书

Get certificate by alias in keystore with multiple entries in Java

好的!我们正在尝试实现客户端服务器应用程序(聊天室)。服务器当然是多线程的。我们希望通信安全,因此我们使用了 ssl 套接字和证书。我读过您可以在一个密钥库中存储多个证书和密钥。当客户进入聊天时,他需要填写他的用户名。

  1. 我们是否必须将用户名连接到 certificate/key 的别名?

  2. 如果是,我们如何使用别名的密钥库中的特定 certificate/key?或者还有其他方法吗?我的意思是我们如何 "pick" 特定证书取决于名称

  3. 有没有办法让客户在进入时创建他们的证书? (我们希望证书由我们已经实施的 CA 签名)

谢谢!

基本上您想要的是双向或双向 SSL。阅读这些以获取更多信息 - here and here

简而言之 - SSL 通信有效(在身份验证证书的上下文中)是服务器将证书发送给客户端,如果该证书存在于客户端的证书存储中或 Java 的密钥库,然后它对服务器进行身份验证。

通常服务器从不要求客户端发送证书,但在您的情况下您需要它,所以它使它成为相互或双向 SSL。因此,在握手过程中,服务器将要求客户端也发送其证书,如果该证书存在,它还将检查其密钥库,如果存在,那么它会很高兴,否则它将结束 SSL 握手。

您需要:

  • 你的每个客户端和你的服务器都应该有一个有效的证书。
  • 您的服务器应该在其“信任密钥库”中包含这些客户端证书,以便它可以对客户端进行身份验证。
  • 您的每个客户端都应该在其“信任密钥库”中拥有服务器的证书,以便它可以对服务器进行身份验证。
  • 您的服务器应配置为支持 2 路 SSL。阅读 here for Weblogic.


具体回答您的问题:

Do we have to connect the username to the alias of the certificate/key?

不,您唯一需要的是客户端证书应该出现在服务器的“信任密钥库”中。但是由于您的客户端应用程序和服务器在同一台机器上,所以 我建议 为 运行 客户端和服务器安装不同的 JVM,以便您支持不同的证书。

If yes, how can we use the specific certificate/key from the keystore from the alias? Or is there another way? I mean how can we "pick" the specific certificate depending on the name

不适用。

Is there a way for the clients to create their certificates at the time of they enter? (We want the certificates to be signed by a CA we have already implemented)

证书要事先准备好,证书的创建和签名是一个复杂的过程,需要生成CSR等

请阅读我的了解您在执行所有这些操作时可能需要的其他详细信息。