java - javax.net.ssl.SSLSession 创建时间是多少?

标签 java

在我们的应用程序中,我们当前正在测量SSLSession.getCreationTime()之间的时间。 (A点)和我们从vertx框架获取请求的时间(B点)作为框架的预请求处理时间。

有时,两点之间的时间大于 10 秒(甚至 20-30 秒)。

至于javax.net.ssl.SSLSession我想了解 getCreationTime 返回的时间戳代表什么?来自 SSLEngine's docs ,上面写着SSLSession握手完成后可用。然而,它没有说何时SSLSession表示已创建。

是否代表

  1. Client Hello 中的时间戳?
  2. Server Hello 中的时间戳?
  3. 握手完成的时间戳?
  4. 或者其他时间。

不确定在哪里进一步查找以获取更多信息。任何帮助表示赞赏。谢谢。

最佳答案

注意:这个答案纯粹针对服务器端,在客户端,这会有所不同。

查看 SSLEngine 和 ServerHandshaker 的源代码后,看起来 SSLSession 是在服务器收到 Client Hello 时创建的。

来自SSLSessionImpl ,

private final long creationTime = System.currentTimeMillis();

创建时间是在创建SSLSessionImpl时设置的。

当 session 不是恢复 session 时,会在客户端问候期间创建 SSLSessionImpl

来自ServerHandshaker :

private void clientHello(ClientHello mesg) throws IOException {
    ...
    //
    // If client hasn't specified a session we can resume, start a
    // new one and choose its cipher suite and compression options.
    // Unless new session creation is disabled for this connection!
    //
    if (session == null) {
        ...
        session = new SSLSessionImpl(protocolVersion, CipherSuite.C_NULL,
            getLocalSupportedSignAlgs(),
            sslContext.getSecureRandom(),
            getHostAddressSE(), getPortSE());
        ...
    }
}

SSL 握手完成后,SSLEngine 从握手器(本例中为 ServerHandshaker)获取 SSLSession

来自SSLEngineImpl :

} else if (handshaker.isDone()) {
    ...
    sess = handshaker.getSession();
    ...
}

TL;DR

当服务器开始处理客户端问候时,在服务器端创建一个SSLSession。并且创建时间设置为对象创建的时间。

附注

感谢您在没有解释原因的情况下否决了该问题。真正鼓励用户在 SO 中提问。

关于java - javax.net.ssl.SSLSession 创建时间是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60532780/

相关文章:

java - 如何使用MVC注解?

java - JUnit/Mockito : throwing an exception in a new thread

java - 如何在java中将BufferedImage转换为gif

Java 通配符上的通用混淆

java - 如何在第一次请求时检测浏览器功能,如 History API、localStorage 等?

java - 使用 jna 获取 IShellFolder

java - elasticsearch:将 StreamOutput 转换为 String

java - 如何将 Joda DateTime 对象与可接受的偏移量(公差)进行比较?

Java Hibernate sqlGroupProjection mysql 语法错误

Java 字体兼容性