我的应用程序允许经过身份验证和未经身份验证的 TLS 连接,并且在代码中,我需要区分它们(就像在经过身份验证和未经身份验证的 HTTPS 会话中一样)。 有没有办法查明 Java SSLSocket 连接(在服务器上)是否是从具有客户端证书的客户端建立的?如果是这样,我可以看到客户端证书的 CN= 吗?
如评论中所述,
try {
Certificate[] certs = socket.getSession().getPeerCertificates();
// we get here if the client *was* authenticated
} catch (SSLPeerUnverifiedException e) {
// we get here if the client *was not* authenticated
}
似乎正是您所需要的。