我一直在使用QuickFIX开发客户端API,我计划使用SSL和基于证书的身份验证。我通过以下方式为接受者和发起者生成自签名证书:
1)生成并导出服务器/接受者证书:
keytool -genkeypair -keyalg RSA -keysize 2048 -alias server -keystore server.jks
keytool -export -alias server -file server.cer -keystore server.jks
2)生成并导出客户端/启动器证书:
keytool -genkeypair -keyalg RSA -keysize 2048 -alias client -keystore client.jks
keytool -export -alias client -file client.cer -keystore client.jks
3)将服务器/接受者证书导入客户端密钥库:
keytool -import -v -trustcacerts -alias server -file server.cer -keystore client.jks
4)将客户端/启动器证书导入服务器/接受者密钥库:
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:找不到密钥库,使用空密钥库”。奇怪的是,发起者仍然能够连接并建立有效的FIX会话。因为没有提供有效的证书,我希望立即删除连接。我错过了什么吗?
答案 0 :(得分:1)
默认情况下不需要客户端证书,您必须设置: NeedClientAuth = Y