SSL套接字服务器在握手后获得证书CN



我的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

ADICHITION,我使用此命令检查了客户端的密钥库:

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已设置。但是,这对我来说是遥不可及的,为什么它似乎不会传输到服务器。

我会为各种帮助而高兴。

最好的问候

galveston01

握手成功后,我想检查客户 服务器端的证书CN。

要检查您已收到的证书,您需要调用GetPeerCertificates而不是GetLocalCertificates,这是您发送的证书。

您应该仔细阅读文档:

public x500 principal getsubjectx500principal((

从 证书作为X500原理。如果主题价值为空,则 返回的x500 principal对象的getName((方法返回 空字符串("(。

因此,不建议在不先检查输入的情况下致电indexOf() substring()

最新更新