我有一个服务器应用程序和一个客户端应用程序。
服务器使用https,并且有一个.jks文件。除此之外,我使用登录名和密码进行身份验证。
我想知道客户端是否应该使用.cert证书。我认为客户端的证书应该与服务器证书相匹配,但似乎我错了。
我在讨论这个话题时遇到了一些麻烦,所以请理解。
答案 0 :(得分:2)
Java KeyStore(JKS)是安全证书的存储库 - 授权证书或公钥证书 - 用于SSL加密。
Keystore有两种版本:
<强> 1。信任强>:
信任存储包含由您信任的人颁发的证书,例如来自CA的根证书。
<强> 2。身份:
<小时/>
我想知道客户端是否应该使用.cert证书。
如果您要连接到HTTPS服务,那么您应该导出服务器的SSL证书并导入服务器的密钥库,可能您可以导入jre/lib/security/cacerts
。
如果客户端是双向SSL,则只需要拥有SSL证书,这意味着客户端也需要向服务器发送SSL证书,因为服务器已请求相同的。
为什么需要它,因为使用SSL握手服务器将发送其SSL证书,客户端将从其密钥库中存在的可信证书列表中验证此证书。如果未验证,则无法完成SSL握手,因此无法建立通信。因此,您必须在受信任的证书存储区中拥有服务器的SSL证书。
我认为客户端证书应该与服务器证书匹配, 但似乎我错了。
是的,你是对的,2个不同方的SSL证书会有所不同。
需要SSL证书的每一方都将在其末端生成公钥 - 私钥对,并向证书颁发机构(CA)提出CSR请求,证书颁发机构将使用提供的密钥生成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
进一步阅读出口和进口: