即将到来的OpenSSL 1.1.1版本将支持TLSv1.3。这个新版本将兼容OpenSSL 1.1.0版本的二进制文件和API。理论上,如果你的应用程序支持OpenSSL 1.1.0,那么当更新可用时,TLSv1.3版本也将自动得到支持,你不需要专门进行安装。但有一些问题仍需要应用程序开发人员和部署人员了解。在这篇博客中,我将谈谈其中的一些问题。
这里
)配置组列表。如果应用程序使用SSL_CONF风格配置文件,则可以使用Groups或Curves命令(看
这里
)来进行配置。
这里
。
在TLS 1.3中,直到主握手完成后,会话才会建立。服务器发送一个独立的握手后消息(包含会话细节)到客户端。通常,这会发生在握手结束后不久,也可能会稍晚一些(甚至根本不发生)。
按照规范,建议应用程序每次只使用一个会话(即使不是强制性的)。由于这个原因,一些服务器会向一个客户端发送多个会话消息。为执行“每次使用一个”的建议,应用程序可以使用SSL_CTX_remove_session()把一个使用过的会话标记为不可恢复(从缓存中将其删除)。旧的SSL_get1_session()和相似API可能像TLS 1.2及以前版本中一样运行。具体来说,如果一个客户端应用程序在收到包含会话细节的服务器消息之前就调用SSL_get1_session(),那么仍将返回一个SSL_SESSION对象,任何试图恢复的企图都不会成功,而是会产生一个完整的握手。在服务器发送多个会话的情况下,只有最后一个会话被SSL_get1_session()返回。
客户端应用程序开发者应该考虑使用SSL_CTX_sess_set_new_cb() API(看
这里
)。这提供一个回调机制,每次新的会话建立时该机制都会被调用。如果服务器发送多个会话消息,就可以为一个连接调用多次。
注意,SSL_CTX_sess_set_new_cb()在OpenSSL 1.1.0中仍然可用。已使用的那个API应用程序仍可以工作,但它们可能会发现,回调机制被调用的时机变了,变成了在握手之后发生。
在主握手完成后,一个OpenSSL服务器将立即尝试发生会话细节到客户端。对服务器应用程序来说,这一握手后的阶段看起来像是主握手的一部分,所以对SSL_get1_session()的调用应该像以前一样继续工作。
这里
)。
“服务器信息”数据格式也已被更新,以包含额外的关于扩展所关联的消息的信息。使用“服务器信息”文件的应用程序可能需要更新到“版本2”的文件格式,才能在TLS 1.3中运行(更多细节看
这里
和
这里
)。
这里
)。
here
for further details).
If the remote peer is not using middlebox compatibility mode and there are problematic middleboxes on the network path then this could cause spurious connection failures.
https://www.openssl.org/blog/blog/2018/02/08/tlsv1.3/