【发布时间】:2018-04-23 13:17:49
【问题描述】:
我有一个 SSL 套接字服务器运行,需要 2 方握手(为此我使用自签名证书)。握手成功后,想在服务器端查看客户端证书的cn。不幸的是,该字段设置为Unknown。
这是我用来确定cn字段值的代码:
((SSLSocket) socket).addHandshakeCompletedListener(new HandshakeCompletedListener() {
@Override
public void handshakeCompleted(HandshakeCompletedEvent hce) {
X509Certificate cert = (X509Certificate)hce.getLocalCertificates()[0];
String certName = cert.getSubjectX500Principal().getName().substring(3,cert.getSubjectX500Principal().getName().indexOf(","));
System.out.println(certName);
}
});
打印Unknown
此外,我使用以下命令检查了客户端的 keyStore:
keytool -list -v -keystore clientStore.jks
打印出来的
Keystore-type: JKS
Keystore-provider: SUN
Keystore contains 1 entry
Aliasname: test
creation date: 23.04.2018
entry type: PrivateKeyEntry
certificate length: 1
certificate[1]:
owner: CN=test, OU="Org Unit", O=Org, L=City, ST=State, C=DE
...
如您所见,客户端存储的证书的 cn 已设置。但是我无法解释为什么它似乎没有被传输到服务器。
我会很高兴得到各种帮助。
最好的问候,
加尔维斯顿01
【问题讨论】:
-
如果你这样做
System.out.println(cert);会发生什么? -
[ [ 版本:V3 主题:CN=Unknown,OU="Org Unit",O=Org,L=City,ST=State,C=DE 签名算法:SHA256withRSA,OID = 1.2。 840.113549.1.1.11 ...
标签: java ssl ssl-certificate jsse mutual-authentication