Tomcat / JBoss Удалить SSL и заставить новое рукопожатие - PullRequest
0 голосов
/ 13 июля 2011

Кто-нибудь знает, как удалить сертификат SSL из сеанса пользователя и принудительно завершить рукопожатие SSL?

Я попытался удалить сертификат, позвонив по номеру

request.removeAttribute("javax.servlet.request.X509Certificate");

Но, похоже, это не помогает. На самом деле код, похоже, игнорирует это свойство.

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Это два разных вопроса.

  1. Атрибут доступен только для использования сервлетами и фильтрами.Tomcat не использует его, на самом деле он не заботится о сертификате, если сеанс SSL существует и аутентификация прошла успешно.Вы можете удалить атрибут, но вы действительно обманываете себя,

  2. Если вы можете сделать недействительным сеанс SSL и запросить новое рукопожатие, новый сертификат будет доставлен в любом случае, вероятно,то же самое, если что-то не случилось с браузером сертификаты в то же время.Это перезапишет атрибут запроса, поэтому вам не нужно было его очищать.Однако я не знаю, каким образом вы можете сделать недействительными сеансы SSL или переопределить их в Tomcat, если только вы не предоставите свой собственный коннектор SSL с API для этого, который доступен сервлетам или фильтрам, и я не знаю, как это сделатьлибо.

Вы всегда можете сообщить нам свое требование.

1 голос
/ 13 июля 2011

Код, который получает сертификат, в конечном итоге вызывает org.apache.tomcat.util.net.jsse.JSSESupport.getPeerCertificateChain(...).Однако повторное согласование инициируется только в том случае, если сертификат еще не был связан с сеансом:

if(jsseCerts.length <= 0 && force) {
    session.invalidate();
    handShake();
    session = ssl.getSession();
}

Следовательно, поскольку у вас уже есть сертификат с SSLSession (и после удаления атрибутаиз-за того, что запрос не повлияет на это), вы не сможете инициировать повторное согласование, которое заставит вас забыть этот сертификат.

Может возникнуть необходимость исправления реализации различных классов вTomcat (этот вызов getPeerCertificateChain) для достижения этой цели.Это то, что вам нужно сделать, если вы хотите выполнить «выход из SSL» (что аналогично).Вы можете попросить клиента закрыть соединение (и, таким образом, создать новое соединение, которое будет согласовано без сертификата клиента), используя HTTP-заголовок Connection: close.Тем не менее, поскольку обычно отправитель отправляет его завершающей стороне, не гарантируется, что получатель (клиент) закроет его (и опять же, насколько я знаю, в спецификации сервлета и в реализации Tomcat нет ничего,что позволяет использовать для принудительного закрытия соединения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...