session - Netty https ( TLS ) session 持续时间 : why is renegotiation needed?

标签 session scala https ssl netty

我有一个进行 TLS 重新协商的 100% https 网络服务器。这非常有用,因此用户可以在单击登录按钮并被要求提供客户证书之前访问该站点并获得一些漂亮的页面。下面是重新协商的代码部分 line 213-236 of X509Cert class

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 客户端证书进行身份验证, session 将持续一段时间并记住证书链 - 比如说 10 分钟或更长时间,无论如何至少 1 分钟。事实上,这就是为什么我可以选择调用上述方法并将变量“fetch”设置为 false。我希望如果有人对连接进行了身份验证,则不需要重新协商。

但我注意到,在大多数浏览器中,如果我想获得 session 并返回 X509 证书,我似乎每次都需要调用 sslh.handshake()。如果“fetch”设置为 false,那么我通常会返回 None。

这是正常现象,还是我做错了什么?

附言。

最佳答案

事实证明我在使用 netty 时遇到了未过滤的问题。我在 Play 2.0 上实现相同时发现了这一点。

参见 bug report 215 on Play2.0 ,以及未过滤的 bug 111: secure netty creates new TLS contexts on each connection

关于session - Netty https ( TLS ) session 持续时间 : why is renegotiation needed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8731157/

相关文章:

ASP.net session 请求排队

Scala sbt 运行 - "Unsupported major.minor version 52.0"

ruby-on-rails - 如何禁用 HTTP 严格传输安全?

javascript - AJAX 请求中的 PHP session 变量

Django session 在 Internet Explorer 中不起作用

php - Laravel Flash 或 session 消息不会过期 [未维护更新]

scala - 为什么 scalac 不相信某个方法不符合所需的类型签名?

scala - Gradle 突然破裂

asp.net - 页面位于大约 :blank displayed insecure content

javascript - 如何使用 Work Light 使用服务器端 javascript 发出 HTTPS 请求?