当前位置: 首页 > 知识库问答 >
问题:

在ssl握手中如何正确地在JKS中拾取证书

罗鸿福
2023-03-14

假设我有一个JAVA客户端应用程序,它试图通过https连接到服务器(example.com)。客户端应用程序有一个信任存储JKS,它有服务器的证书和其他一些证书。在服务器将其证书发送到此客户端应用程序的握手过程中,如何从信任存储jks中提取正确的证书。i、 基于什么参数,java将服务器发送的证书与存储在JKS中的证书相匹配。

共有1个答案

阎作人
2023-03-14

匹配由证书的主题完成。

例如,如果您浏览https://www.google.com/并查看其证书,它会显示一个证书链,其中包含:

主题:

*实际使用openssl s_client-connect www.google获得。com:443-showcerts

如果您的信任库中有任何证书,则该证书将被信任。

您可以这样扫描信任库(假设您有grep):

keytool -list -keystore /path/to/cacerts -storepass changeit -v | grep "CN=GeoTrust Global CA" -B 4 -A 8

要获得这种输出:

Alias name: geotrustglobalca
Creation date: Jul 18, 2003
Entry type: trustedCertEntry

Owner: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US
Issuer: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US
Serial number: 23456
Valid from: Tue May 21 00:00:00 EDT 2002 until: Sat May 21 00:00:00 EDT 2022
Certificate fingerprints:
         MD5:  F7:75:AB:29:FB:51:4E:B7:77:5E:FF:05:3C:99:8E:F5
         SHA1: DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12
         SHA256: FF:85:6A:2D:25:1D:CD:88:D3:66:56:F4:50:12:67:98:CF:AB:AA:DE:40:79:9C:72:2D:E4:D2:B5:DB:36:A7:3A
         Signature algorithm name: SHA1withRSA
         Version: 3
 类似资料:
  • 我们正在Netty之上实现SSL。但是当前的设计有一个缺陷。如果失败,客户端将重试连接到服务器。这是网络或服务器负载过重问题所需要的。但是错误的客户端凭据会导致持续的失败。 有一些解决办法: 客户端-服务器连接可以故障转移到未加密模式(从管道中删除SslHandler)。 客户端可以死亡并在知道它是SSL异常时抛出异常。 不幸的是,我不知道如何使用Netty实现这一点。几个问题: < li >如何

  • 我编写了一个java JAX-WS web服务客户端。当我试图使用公共CA签名证书访问服务器时,我会收到SSL握手异常: 以下是SSL日志记录跟踪的一部分: 有没有人对是什么导致了这个问题有什么建议?

  • 线程“main”javax.net.ssl.SSLHandShakeException中的异常:没有共同的密码套件 列出的密码如下

  • 堆栈:React,NGINX 1.14.0,GUnicorn,Django 2.2.8,Python 3.6.9 错误: 在浏览器:当React调用Django API(当然在请求头中有)时,大约30秒后在浏览器控制台出现CORS错误。 在浏览器控制台:CORS策略阻止从源“https://mydomain”访问“https://mydomain:8000/somethy/”处的XMLHttpRe

  • 我想从Kafka中提取CN。如何用Java从X509Certificate中提取CN?帮助我解决了这个问题,但问题是从X509certificate中提取CN,我花了很多时间来为我自己的问题找到正确的解决方案。我想我的解决方案可以帮助某人更快地得到正确的答案。

  • 这是我的execute方法的代码