客户端的证书?

时间:2015-10-27 16:35:39

标签: java ssl https certificate keystore

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

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

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

我在讨论这个话题时遇到了一些麻烦,所以请理解。

1 个答案:

答案 0 :(得分:2)

密钥库

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

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

Keystore有两种版本:

<强> 1。信任
信任存储包含由您信任的人颁发的证书,例如来自CA的根证书。

<强> 2。身份:

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

<小时/>

  

我想知道客户端是否应该使用.cert证书。

如果您要连接到HTTPS服务,那么您应该导出服务器的SSL证书并导入服务器的密钥库,可能您可以导入jre/lib/security/cacerts

如果客户端是双向SSL,则只需要拥有SSL证书,这意味着客户端也需要向服务器发送SSL证书,因为服务器已请求相同的。

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

  

我认为客户端证书应该与服务器证书匹配,   但似乎我错了。

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

需要SSL证书的每一方都将在其末端生成公钥 - 私钥对,并向证书颁发机构(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

进一步阅读出口和进口: