HTTPS笔记:使用 SSLEngine 为 aioserver 服务器提供 SSL 访问支持
现在 HTTPS 的普及率是越来越高,闲来无事,花了二三天时间,为五年前写的 aioserver 服务器提供了 SSL 访问支持。
查看网上资料,为了提高服务器的高并发,建议使用:SSLEngine
网上搜索了一些关于 SSLEngine 的使用资料,看了后就照葫芦画瓢,开工。
其间一个问题困扰了我好几个小时,在进行SSL握手的时候:
doUnwrap() 解包后, 有 2 种情况:
1. 多数情况下: new HandshakeStatus: NEED_WRAP -> wrap() -> 完成 SSL 握手。
2. 少数情况下: new HandshakeStatus: NOT_HANDSHAKING (已完成 SSL 握手)
其中, 当 new HandshakeStatus: NOT_HANDSHAKING, 又有 2 种可能情况:
1. netIn.remaining() > 0: 接收到的数据中包含了 HTTP Header 请求头
2. netIn.remaining() = 0: 不包含 HTTP Header 请求头
我们需要对关于SSL握手协议过程中出现的不同情况进行不同的处理。
另外,我到现在还不清楚的地方:所有的请求共享一个 SSLEngine,还是根据每一个请求创建一个 SSLEngine: sslContext.createSSLEngine() ???
目前我的代码中是根据每一个请求创建一个 SSLEngine: sslContext.createSSLEngine()