【发布时间】:2021-01-30 15:16:42
【问题描述】:
目标:
在 QuickFix C++ 中使用sTunnel:通过SSL-internet 登录LMAX UAT 并通过TCP 连接发送FIX 4.2 消息。另一个类似的 SO 问题 can be found here,但似乎无法解决这个特定问题。
操作系统: Ubuntu 19.10 | sTunnel 版本: 5.55 | 引擎: quickfix-1.15.1 | 地点: LMAX [UAT-LD4]
问题:
无法登录 UAT。在启动sTunnel,然后运行首先发送LOGON 消息的客户端应用程序后,没有收到任何身份验证。 LMAX 已表示客户端服务器公共 IP 地址已被列入白名单。
*在下面找到更多配置。尝试登录时:
20210130-12:40:45.207811000 : Created session
20210130-12:40:45.208201000 : Connecting to 127.0.0.1 on port 143 (Source :0)
20210130-12:40:45.208384000 : Initiated logon request
20210130-12:40:55.217130000 : Socket Error: Connection reset by peer
20210130-12:40:55.217148000 : Disconnecting
出站LOGON 消息(取自日志)似乎符合 LMAX FIX 规范(请忽略不正确的校验和,因为凭据已更改)。这可能表明问题出在 TCP 连接上。出站LOGON消息:
8=FIX.4.2|9=104|35=A|34=1|49=SENDER_XYZ|52=20210130-12:40:45.208309000|56=TARGET_XYZ|95=12|96=PASSWORD_XYZ|98=0|108=15|10=094|
预期结果:从 LMAX 接收LOGON 身份验证。
结果:
在关注this tutorial on installing and using sTunnel on Ubuntu. 之后,sTunnel 以sudo systemctl start stunnel4.service 启动并检查服务状态,给出:
一旦sTunnel启动,在Wireshark中可以看到客户端应用程序包从客户端服务器到LMAX UAT,但似乎没有从LMAX UAT返回数据包。
系统日志
运行 journalctl -xe 会产生以下日志。
-
当 sTunnel 运行时:https://pastebin.com/YE6xyNcM
-
当 sTunnel 运行时,客户端应用程序已启动然后停止: https://pastebin.com/Vv55A35L
配置和设置
SSL 证书是使用以下命令生成的:
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem
*sTunnel 配置:
pid = /var/run/stunnel4/stunnel.pid
[LMAX-UAT]
client = yes
accept = 127.0.0.1:143
connect = fix-order.london-uat.lmax.com:443
sslVersion = TLSv1
verify = 2
CApath = /etc/ssl/certs/
cert = /etc/stunnel/stunnel.pem
checkhost = fix-order.london-uat.lmax.com
*QuickFix 配置:
[DEFAULT]
ConnectionType=initiator
HeartBtInt=15
ReconnectInterval=2
FileStorePath=store
FileLogPath=log
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=N
SocketConnectHost=127.0.0.1
SenderCompID=SENDER_XYZ
SocketUseSSL=N
TimestampPrecision=9
[SESSION]
BeginString=FIX.4.2
TargetCompID=TARGET_XYZ
SocketConnectPort=143
总结问题:
- 鉴于上述详细信息,谁能确定是什么阻止了 FIX 通过
SSL-internet与 LMAX 的 UAT 通信? - 根据 Wireshark 活动,这可能是
sTunnel问题,而不是初始LOGON消息的格式?
【问题讨论】:
-
消息“超时连接超出,没有更多地址可连接”和 Wireshark 屏幕截图在我看来好像 LMAX 不接受连接。我认为这是一个防火墙问题,即他们没有将连接列入白名单。
-
你能远程登录他们的地址吗?
-
我刚刚尝试telnet他们的IP,但这是不可能的/连接超时,所以我认为这一定是权限问题。我从 VPS 运行它,并且我相信配置提供者无权允许客户端通过 SSL 互联网建立 TCP 连接(仅限交叉连接)。我认为这已经缩小了范围。感谢您的帮助@ChristophJohn
-
不客气。也许您可以稍后添加最终解决方案。这也可以帮助其他人。
-
当然——我还不能完全确定解决方案(尽管已经缩小了范围),但是一旦解决了这个问题,我一定会用答案更新问题。再次感谢
标签: c++ ssl quickfix fix-protocol stunnel