我目前正在向libcurl添加SSPI Schannel API支持,以便在Windows上使用启用SSL的协议,而不需要任何外部依赖,例如OpenSSL。
我已经有了一个有效的SSL / TLS实现,但是我对函数AcquireCredentialsHandle返回的凭据句柄的重用有一个非常具体的问题。
重新使用SSL / TLS会话,而不是创建新句柄,重新使用现有句柄并多次将其传递给InitializeSecurityContext,是否正确且可能?
我可以找到我在libcurl的Schannel模块上的工作here,并且可以找到尝试重复使用的实验版here。
我会很感激对此的任何暗示或反馈。那么,凭证句柄能以这种方式重复使用吗?它是否正确?
提前致谢!
答案 0 :(得分:2)
我找到了问题的答案并在此处记录给其他人:
您的应用程序通过调用AcquireCredentialsHandle函数获取凭据,该函数返回所请求凭据的句柄。由于凭据句柄用于存储配置信息,因此同一句柄不能用于客户端和服务器端操作。这意味着支持客户端和服务器连接的应用程序必须至少获得两个凭据句柄。
因此,可以假设为多个连接重复使用相同的凭证句柄是安全的。我确认它确实使Schannel重新使用SSL / TLS会话。这已经在Windows 7 Professional SP1上进行了测试。