与接受者建立 SSL 通信不需要 QuickFIX 发起者证书

QuickFIX initiator certificates are not required to establish SSL communication with the acceptor

我一直在使用 QuickFIX 在客户端 API 上工作,我打算使用 SSL 和基于证书的身份验证。我通过以下方式为接受者和发起者生成了自签名证书:

1) 生成并导出 server/acceptor 证书:

keytool -genkeypair -keyalg RSA -keysize 2048 -alias server -keystore server.jks
keytool -export -alias server -file server.cer -keystore server.jks

2) 生成并导出 client/initiator 证书:

keytool -genkeypair -keyalg RSA -keysize 2048 -alias client -keystore client.jks
keytool -export -alias client -file client.cer -keystore client.jks

3) 将 server/acceptor 证书导入客户端密钥库:

keytool -import -v -trustcacerts -alias server -file server.cer -keystore client.jks

4) 将 client/initiator 证书导入 server/acceptor 密钥库:

keytool -import -v -trustcacerts -alias client -file client.cer -keystore server.jks

接受器配置:

SocketUseSSL=Y
SocketKeyStore=server.jks
SocketKeyStorePassword=password

启动器配置:

SocketUseSSL=Y
SocketKeyStore=client.jks
SocketKeyStorePassword=password

似乎一切正常,数据正在加密。但是,如果我删除启动器的 client.jks 密钥库文件,我将得到一个 QuickFIX 日志条目,上面写着 "client.jks: keystore not found, using empty keystore"。奇怪的是,发起者仍然能够连接并建立有效的 FIX 会话。由于未提供有效证书,我希望连接会立即断开。我错过了什么吗?

默认情况下不需要客户端证书,您必须这样设置: NeedClientAuth=Y