0

0

使用 Python QuickFIX 通过 Stunnel 建立安全连接

心靈之曲

心靈之曲

发布时间:2025-09-30 19:50:16

|

329人浏览过

|

来源于php中文网

原创

使用 python quickfix 通过 stunnel 建立安全连接

本文档旨在指导开发者如何使用 Python QuickFIX 库通过 Stunnel 建立安全的 FIX 消息连接。我们将详细介绍 Stunnel 的配置,QuickFIX 应用程序的设置,以及如何调试可能出现的问题,确保 FIX 消息能够安全可靠地传输。本文档适用于需要在非安全网络中传输 FIX 消息,并希望通过加密通道保护数据安全的开发者。

Stunnel 配置

Stunnel 是一个通用的 TLS/SSL 加密隧道程序,可以用于为不支持 SSL 的应用程序提供安全连接。以下是如何配置 Stunnel 以配合 QuickFIX 使用的步骤。

1. 安装 Stunnel:

首先,确保你的系统上已经安装了 Stunnel。你可以从 Stunnel 官网下载适合你操作系统的版本,或者使用包管理器进行安装。例如,在 Debian/Ubuntu 系统上,可以使用以下命令安装:

立即学习Python免费学习笔记(深入)”;

sudo apt-get update
sudo apt-get install stunnel4

2. Stunnel 配置文件:

Stunnel 的配置文件通常位于 /etc/stunnel/stunnel.conf。你需要根据你的具体需求修改此文件。以下是一个示例配置,用于创建一个 Stunnel 客户端,将本地端口 8080 上的连接转发到远程 FIX 服务器:

CAfile=./Roots.crt
cert=./cert.pfx
client=yes
verify=1
sslVersion = TLSv1.2
options = NO_SSLv2
options = NO_SSLv3
debug=7
foreground=yes
output=./stunnel.log
[SESSION]
accept=8080
connect=EXAMPLE_URL:EXAMPLE_IP
  • CAfile: 指定用于验证服务器证书的 CA 证书文件。
  • cert: 指定客户端证书和私钥文件。
  • client=yes: 配置 Stunnel 为客户端模式。
  • verify=1: 启用证书验证。
  • sslVersion: 指定允许的 SSL/TLS 协议版本。推荐使用 TLSv1.2 或更高版本。
  • options: 禁用不安全的 SSL 协议版本。
  • debug: 设置调试级别。数值越高,日志信息越详细。
  • foreground=yes: 使 Stunnel 在前台运行,方便查看日志。
  • output: 指定日志文件路径。
  • accept: 指定 Stunnel 监听的本地端口。
  • connect: 指定要连接的远程服务器地址和端口。

3. 启动 Stunnel:

使用以下命令启动 Stunnel:

stunnel /app/stunnel.conf

确保你已经进入包含stunnel.conf的目录。如果配置文件位于默认位置,则只需运行 stunnel 命令即可。

QuickFIX Python 应用程序配置

接下来,配置你的 QuickFIX Python 应用程序以通过 Stunnel 连接到 FIX 服务器。

1. 修改 QuickFIX 配置文件:

修改 QuickFIX 配置文件(例如 initiator.cfg),将 SocketConnectHost 设置为 127.0.0.1(本地主机),SocketConnectPort 设置为 Stunnel 监听的本地端口(例如 8080):

BibiGPT-哔哔终结者
BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

下载
[DEFAULT]
ConnectionType=initiator
LogonTimeout=10
ReconnectInterval=30
FileLogPath=./Logs/

[SESSION]
BeginString=FIXT.1.1
DefaultApplVerID=9
SenderCompID=EXAMPLE_COMP_SENDER
TargetCompID=EXAMPLE_COMP_TARGET
StartTime=00:00:00
EndTime=00:00:00
HeartBtInt=30
CheckLatency=N
MaxLatency=240
SocketConnectPort=8080
SocketConnectHost=127.0.0.1
UseDataDictionary=Y
TransportDataDictionary=./FIX50SP2.xml
FileStorePath=./Sessions/

2. 运行 QuickFIX 应用程序:

使用以下命令运行你的 QuickFIX Python 应用程序:

python test.py

确保你的应用程序代码正确处理了 FIX 消息的发送和接收。

3. 代码示例

以下是一个简单的 QuickFIX Python 应用程序示例:

import quickfix as fix

class Application(fix.Application):
    def onCreate(self, sessionID):
        print("onCreate : Session (%s)" % sessionID.toString())

    def onLogon(self, sessionID):
        self.sessionID = sessionID
        print("Successful Logon to session '%s'." % sessionID.toString())

    def onLogout(self, sessionID):
        print("onLogout")

    def toAdmin(self, sessionID, message):
        print("toAdmin")

    def fromAdmin(self, sessionID, message):
        print("fromAdmin")

    def toApp(self, sessionID, message):
        print("Recieved the following message: %s" % message.toString())

    def fromApp(self, message, sessionID):
        print("fromApp")


config_file = "./initiator.cfg"
settings = fix.SessionSettings(config_file)
application = Application()
storeFactory = fix.FileStoreFactory(settings)
logFactory = fix.FileLogFactory(settings)
initiator = fix.SocketInitiator(application, storeFactory, settings, logFactory)
initiator.start()

调试

如果遇到连接问题,可以按照以下步骤进行调试:

  1. 检查 Stunnel 日志: 查看 Stunnel 的日志文件(在 stunnel.conf 中使用 output 指定),以了解连接过程中发生的错误。
  2. 检查 QuickFIX 日志: 查看 QuickFIX 的日志文件(在 initiator.cfg 中使用 FileLogPath 指定),以了解 FIX 消息的发送和接收情况。
  3. 使用 Wireshark 抓包: 使用 Wireshark 等抓包工具捕获网络流量,分析 SSL/TLS 握手过程,查看是否存在证书验证问题或其他网络问题。
  4. 调整 Stunnel 调试级别: 在 stunnel.conf 中增加 debug 的值,可以输出更详细的日志信息,帮助定位问题。
  5. 证书问题: 确保 Stunnel 配置文件中的证书路径正确,并且证书文件具有正确的权限。
  6. 网络连接: 确保 Stunnel 客户端可以访问远程 FIX 服务器,并且防火墙没有阻止连接。

保持 Stunnel 连接

Stunnel 在成功建立连接后,应该保持运行状态,直到连接关闭。如果 Stunnel 在 initiator.start() 后立即断开连接,可能是以下原因:

  1. FIX 会话未建立: QuickFIX 应用程序可能无法成功登录到 FIX 服务器,导致连接被关闭。检查 QuickFIX 日志,查看是否存在登录错误。
  2. 心跳超时: 如果 QuickFIX 应用程序在指定的时间内没有发送或接收到心跳消息,FIX 服务器可能会断开连接。确保 HeartBtInt 参数设置合理,并且应用程序能够定期发送心跳消息。
  3. 网络问题: 网络连接不稳定可能导致连接中断。检查网络连接,确保 Stunnel 客户端和 FIX 服务器之间的网络畅通。

发送心跳请求

QuickFIX 会自动处理心跳消息的发送和接收。你只需要在配置文件中设置 HeartBtInt 参数,指定心跳间隔时间(以秒为单位)。QuickFIX 会根据此参数自动发送心跳消息。

如果需要手动发送心跳消息,可以使用 QuickFIX API。以下是一个示例:

import quickfix as fix
import time

# 假设已经建立了 FIX 会话,并且 sessionID 已经获取
# sessionID = ...

def send_heartbeat(sessionID):
    heartbeat = fix.Message()
    heartbeat.getHeader().setField(fix.MsgType(fix.MsgType_Heartbeat))
    heartbeat.getHeader().setField(fix.BeginString("FIXT.1.1")) # 根据你的配置修改
    heartbeat.getHeader().setField(fix.SenderCompID("YOUR_COMP_ID")) # 根据你的配置修改
    heartbeat.getHeader().setField(fix.TargetCompID("TARGET_COMP_ID")) # 根据你的配置修改
    fix.Session.sendToTarget(heartbeat, sessionID)
    print("Heartbeat sent.")

# 定期发送心跳消息
while True:
    send_heartbeat(sessionID)
    time.sleep(30) # 每 30 秒发送一次心跳

注意: 你需要根据你的 FIX 配置修改 BeginString、SenderCompID 和 TargetCompID 等参数。

总结

通过以上步骤,你应该能够成功配置 Stunnel 和 QuickFIX Python 应用程序,建立安全的 FIX 消息连接。记住,调试是解决问题的关键。仔细检查日志文件,分析网络流量,并逐步排除可能的原因,最终解决连接问题。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

745

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

634

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

758

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1260

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

577

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

705

2023.08.11

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

80

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号