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