Java SSL套接字服务器在握手后获取证书cn
我有一个SSL套接字服务器,运行时需要进行两方握手(我使用的是自签名证书)。握手成功后,我想在服务器端检查客户端证书的cn。不幸的是,此字段设置为Java SSL套接字服务器在握手后获取证书cn,java,ssl,ssl-certificate,jsse,mutual-authentication,Java,Ssl,Ssl Certificate,Jsse,Mutual Authentication,我有一个SSL套接字服务器,运行时需要进行两方握手(我使用的是自签名证书)。握手成功后,我想在服务器端检查客户端证书的cn。不幸的是,此字段设置为未知 以下是我用来确定cn字段值的代码: ((SSLSocket) socket).addHandshakeCompletedListener(new HandshakeCompletedListener() { @Override public void handshakeCompleted(HandshakeCompletedEve
未知
以下是我用来确定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);
}
});
其中打印的未知
另外,我使用以下命令检查客户端的密钥库:
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
握手成功后,我想检查一下客户端
证书的cn位于服务器端
要检查您收到的证书,您需要调用getLocalCertificates,而不是getLocalCertificates,它用于您发送的证书
你应该仔细阅读文件:
公共X500主体GetSubjectX500主体()
从中返回主题(主题可分辨名称)值
作为X500主体的证书。如果主题值为空,则
返回的X500Principal对象的getName()方法返回
空字符串(“”)
因此,不建议在不首先检查输入的情况下调用
indexOf()substring()
。如果执行System.out.println(cert)操作,会发生什么代码>?[[版本:V3主题:CN=Unknown,OU=“Org Unit”,O=Org,L=City,ST=State,C=design算法:SHA256withRSA,OID=1.2.840.113549.1.11。。。