Netty https (TLS) Продолжительность сеанса: зачем нужно повторное согласование?

У меня есть 100% веб-сервер https, который выполняет повторное согласование TLS. Это очень полезно, так как пользователи могут зайти на сайт и получить несколько хороших страниц, прежде чем нажимать кнопку входа и запрашивать сертификат клиента. Ниже приведена часть кода, выполняющая повторное согласование строка 213-236 класса X509Cert

import org.jboss.netty.handler.ssl.SslHandler

val sslh = r.underlying.context.getPipeline.get(classOf[SslHandler])

trySome(sslh.getEngine.getSession.getPeerCertificates.toIndexedSeq) orElse {
  if (!fetch) None
  else {
    sslh.setEnableRenegotiation(true) // todo: does this have to be done on every request?
    r match {
      case UserAgent(agent) if needAuth(agent) => sslh.getEngine.setNeedClientAuth(true)
      case _ => sslh.getEngine.setWantClientAuth(true)
    }
    val future = sslh.handshake()
    future.await(30000) //that's certainly way too long.
    if (future.isDone && future.isSuccess)
      trySome(sslh.getEngine.getSession.getPeerCertificates.toIndexedSeq)
    else
      None
  }
}

Теперь я ожидал, что после того, как кто-то аутентифицируется с сертификатом клиента X509, сеанс продлится некоторое время и запомнит эту цепочку сертификатов - скажем, 10 минут или более, и в любом случае как минимум 1 минуту. Действительно, именно поэтому у меня есть возможность вызвать вышеуказанный метод с переменной «fetch», установленной в false. Я надеюсь, что если кто-то аутентифицировал соединение, его не нужно было пересматривать.

Но я заметил, что в большинстве браузеров мне нужно вызывать sslh.handshake() каждый раз, если я хочу получить сеанс и вернуть сертификаты X509. Если для «выборки» установлено значение false, то в основном я получаю None.

Это нормально, или я что-то не так делаю?

PS.


person Henry Story    schedule 04.01.2012    source источник


Ответы (1)


Оказывается, у меня была проблема с нефильтрованным использованием netty. Я обнаружил это при реализации того же в Play 2.0.

См. отчет об ошибке 215 в Play2.0 и неотфильтрованный ошибка 111: защищенная сеть создает новые контексты TLS для каждого соединения

person Henry Story    schedule 11.03.2012