Java SSLSocket узнает, отправил ли клиент сертификат

Мое приложение допускает аутентифицированные и неаутентифицированные TLS-соединения, и в коде мне нужно различать их (так же, как в аутентифицированных и неаутентифицированных сеансах HTTPS). Есть ли способ узнать, было ли установлено соединение Java SSLSocket (на сервере) от клиента с сертификатом клиента? И если да, могу ли я увидеть CN= сертификата клиента?

Да, используйте SSLSocket.getSession().getPeerCertificate().

user207421 27.04.2024 09:15

@user207421 user207421 Отлично — именно то, о чем я просил. Мое приложение допускает аутентифицированные и неаутентифицированные TLS-соединения, и в коде мне нужно было различать их (аналогично аутентифицированным и неаутентифицированным сеансам HTTPS).

Andy Brunner 27.04.2024 10:38

@Abra Это не «похоже на сеансы HTTPS с аутентификацией и без аутентификации». Это то же самое. Ты уже нанес достаточно урона. Пожалуйста, оставьте это в покое.

user207421 28.04.2024 06:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как отмечено в комментариях ,

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;
}

кажется, это то, что вам нужно.

Другие вопросы по теме