Warm tip: This article is reproduced from serverfault.com, please click

其他-QuickFix C++ 和 SSL:使用 sTunnel 连接到 LMAX 的问题

(其他 - QuickFix C++ and SSL: Issue connecting to LMAX using sTunnel)

发布于 2021-01-30 15:16:42

目标:

使用sTunnel具有QuickFix的C ++:登录到LMAX UAT在SSL-internet发送FIX 4.2的消息通过TCP连接。可以在此处找到另一个类似的 SO 问题,但似乎无法解决此特定问题。

操作系统: Ubuntu 19.10 | 隧道版本: 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|

预期结果:LOGON从 LMAX接收身份验证。

结果:

按照本教程在 Ubuntu 上安装和使用 sTunnel 之后。,sTunnel然后启动sudo systemctl start stunnel4.service并检查服务状态,给出: 在此处输入图片说明

一旦sTunnel启动,启动客户端应用程序后,可以在 Wireshark 中看到从客户端服务器到 LMAX UAT 的数据包,但似乎没有从 LMAX UAT 返回数据包

系统日志

运行journalctl -xe会产生以下日志。

  1. sTunnel 运行时:https ://pastebin.com/YE6xyNcM

  2. 当 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

总结问题:

  1. 鉴于上述细节,谁能确定是什么阻止了 FIXSSL-internet与 LMAX 的 UAT通信
  2. 基于 Wireshark 活动,这可能是一个sTunnel问题,而不是初始LOGON消息的格式吗?
Questioner
p.luck
Viewed
11
p.luck 2021-02-11 22:19:03

解决方案:

看来 IP 地址(正如@Christoph John 所帮助指出的)确实没有被服务器端正确地列入白名单。

然而,问题仍然存在。在 sTunnel 配置中,我不得不更改sslVersion = TLSv1.1sslVersion = TLSv1.2.

除此之外,UAT 似乎不会接受FIX 4.2消息。将协议版本更改为 后FIX 4.4,我终于LOGON可以使用 UAT。