QuickFix的SSL问题
QuickFix是FIX协议的一个开源引擎,有多中语言的实现:
- Java: QuickFIX/J
- C#: QuickFIX/N
- C++: Python和Ruby的接口基于C++的版本
最近在学习FIX和QuickFIX,碰到一个问题,broker提供的Demo是基于QuickFIX/J的,可以正常工作。我使用同样的逻辑,用C#和Python代码重新实现,却每次发送登录请求LOGON之后,链接就会被对端断开:Socket Error: Connection reset by peer.
我花了十几个小时去调试,对比Python、C#、Java版本程序发出的消息的异同,还使用MiniFIX作为客户端发送Logon,发现多个版本发送的都是相同的Message,但惟有Java版的在工作。最后迫于无奈,使用WireShark抓包,发现Java版发送的TCP包内容是加密的,而其他版本发送的都是明文。终于找到问题:
[SESSION] BeginString=FIX.4.4 #...SocketUseSSL=Y
目前QuickFIX的多个版本中,Java实现了SSL的支持,而C#和C++版本均未实现。定位到了问题,解决方法也容易:使用stunnel。可以参考:https://waiseekweng.wordpress.com/2014/09/08/configure-for-fixn/