客户端的证书?

Certificate on the client's side?

我有一个服务器应用程序和一个客户端应用程序。

服务器使用 https,并有一个 .jks 文件。除此之外,我使用登录名和密码进行身份验证。

我想知道客户端是否应该使用.cert 证书。我认为客户端的证书应该与服务器证书匹配,但我似乎错了。

题目理解有问题,还望谅解。

密钥库

A Java KeyStore (JKS) 是安全证书的存储库 - 授权证书或 public 密钥证书 - 例如用于 SSL 加密。

  • 在 IBM WebSphere Application Server 和 Oracle Weblogic Server 中,扩展名为 jks 的文件用作密钥库。
  • Java 开发工具包在文件夹 jre/lib/security/cacerts 中维护一个 CA 密钥库。

Keystore 有两种形式:

1.信任:
信任库包含由您信任的人颁发的证书,例如来自 CA 的根证书。

2。身份:

  • 身份存储包含您自己的证书,它们用于在您访问外部服务时对您进行身份验证。
  • 信任存储不包含敏感信息,而身份存储包含私钥等非常敏感的信息。
  • 包含服务器的演示私钥。此密钥库为服务器建立身份。


I wonder if the client side should use a .cert certificate.

如果你想连接到 HTTPS 服务,那么你应该导出服务器的 SSL 证书并导入你服务器的密钥库,也许你可以在 jre/lib/security/cacerts.

中导入

客户端只有在双向 SSL 时才需要 SSL 证书,这意味着客户端还需要向服务器发送 SSL 证书,因为服务器已请求相同的证书。

为什么需要它,因为 使用 SSL 握手服务器将发送其 SSL 证书,客户端将从其密钥库中存在的受信任证书列表中验证该证书。如果未通过验证,则无法完成 SSL 握手,因此无法建立通信。因此,您必须在受信任的证书存储区中拥有服务器的 SSL 证书。

I thought the client's certificate should match servers certificate, but it seems that I was wrong.

是的,你是对的,2 个不同方的 SSL 证书会不同。

需要 SSL 证书的每一方将在其端生成 public-私钥对,并将向证书颁发机构 (CA) 提出 CSR 请求,证书颁发机构将使用提供的证书生成 SSL 证书钥匙。


如何导出和导入 SSL 证书

要导出证书:

如果可以使用 Web 访问,则单击 HTTPS 图标,查看证书并执行导出命令。

如果无法使用网络访问,则使用openssl导出证书。 使用下面的命令

openssl s_client -connect host:port -key our_private_key.pem -showcerts -cert our_server-signed_cert.pem

要导入证书:

使用命令 - keytool -import -trustcacerts -file /path/to/ca/ca.pem -alias CA_ALIAS -keystore $JAVA_HOME/jre/lib/security/cacerts

关于导出和导入的进一步阅读: