作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个 JAVA 客户端应用程序,它尝试通过 https 连接到服务器 (example.com)。客户端应用程序有一个信任库 JKS ,它有服务器的证书和一些其他证书。在服务器向此客户端应用程序发送证书时的握手过程中,如何从信任库 jks 中获取正确的证书。即基于什么参数 java 将服务器发送的证书与存储在 JKS 中的证书相匹配。
最佳答案
匹配由证书的主题
完成。
例如如果你浏览 https://www.google.com/ 并查看他们的证书,它会显示一个证书链:
主题: /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
颁发者:/C=US/O=Google Inc/CN=Google Internet Authority G2
颁发者:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
问题由:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
* 实际使用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
关于java - 如何在 SSL 握手中的 JKS 中获取正确的证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41703135/
我是一名优秀的程序员,十分优秀!