Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SSL套接字服务器在握手后获取证书cn_Java_Ssl_Ssl Certificate_Jsse_Mutual Authentication - Fatal编程技术网

Java 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

我有一个SSL套接字服务器,运行时需要进行两方握手(我使用的是自签名证书)。握手成功后,我想在服务器端检查客户端证书的cn。不幸的是,此字段设置为
未知

以下是我用来确定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。。。