关于这个过程如何运作似乎令人惊讶地缺乏信息或文档,这让我很难确定我是否看到了正确的行为。我找到了state_string()调用,它给了我这样的字符串:
之前/连接初始化 SSLv3读服务器你好A. SSLv3读取服务器证书A. SSLv3读取服务器密钥交换A. SSLv3读完了A
如果我不确定正确的顺序,那就没有特别的帮助。对我而言看起来是正确的,但问题是我用来推进这些状态的方法感觉不对。我在其他地方找到了这段代码:
while True:
try:
ssl_conn.do_handshake()
break()
except OpenSSL.SSL.WantReadError:
pass
这是设置OpenSSL的正确方法吗?只需强制do_handshake()直到它停止抛出WantReadError?
我还注意到在这个套接字上调用shutdown()和close()会发送RST而不是通常的FIN,即TCP的ACK。这是正确的行为吗?
谢谢。
答案 0 :(得分:0)
为了将来参考,这似乎是强制握手的适当方式。我需要这个原因是因为我使用的接口恰好比直接连接慢。在短暂的睡眠中除了我能够通过最少的呼叫获得握手并确认连接已启动,因为我可以发送数据。
至于我的第二个问题,答案是不是RST不是正确的行为。这是由于我的配置,以便我的中间人找不到要路由到的服务器并且正在抛出RST。适当的行为是TCP close()的典型FIN,ACK。