Мое приложение допускает аутентифицированные и неаутентифицированные TLS-соединения, и в коде мне нужно различать их (так же, как в аутентифицированных и неаутентифицированных сеансах HTTPS). Есть ли способ узнать, было ли установлено соединение Java SSLSocket (на сервере) от клиента с сертификатом клиента? И если да, могу ли я увидеть CN= сертификата клиента?
@user207421 user207421 Отлично — именно то, о чем я просил. Мое приложение допускает аутентифицированные и неаутентифицированные TLS-соединения, и в коде мне нужно было различать их (аналогично аутентифицированным и неаутентифицированным сеансам HTTPS).
@Abra Это не «похоже на сеансы HTTPS с аутентификацией и без аутентификации». Это то же самое. Ты уже нанес достаточно урона. Пожалуйста, оставьте это в покое.
Как отмечено в комментариях ,
try {
Certificate cert = socket.getSession().getPeerCertificate();
// we get here if the client *was* authenticated
return cert;
} catch (SSLPeerUnverifiedException e) {
// we get here if the client *was not* authenticated
return null;
}
кажется, это то, что вам нужно.
Да, используйте
SSLSocket.getSession().getPeerCertificate()
.