客户端的证书?
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
关于导出和导入的进一步阅读:
- Java keytool easy way to add server cert from url/port
- http://www.grim.se/guide/jre-cert
- https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html
- Using openssl to get the certificate from a server
我有一个服务器应用程序和一个客户端应用程序。
服务器使用 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
关于导出和导入的进一步阅读:
- Java keytool easy way to add server cert from url/port
- http://www.grim.se/guide/jre-cert
- https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html
- Using openssl to get the certificate from a server