QuickFIX/J CA 证书验证
QuickFIX/J CA Certificate Validation
我有一个使用 QuickFIX/J 编写的应用程序来连接彭博服务器。最近 Bloomberg 在他们的服务器中添加了 CA 证书验证,并且他们为握手提供了额外的 CA 证书文件。
我的应用程序使用 SSL 连接,当从 Bloomberg 端禁用 CA 证书验证时,应用程序成功连接到服务器并获取消息。启用 CA 验证时握手失败。
以下是我尝试过的步骤。
- 以前我使用
ImportKey
Java class 添加证书和密钥。
我将其更改为添加多个证书。如果需要我可以post
Java class.
- 当我使用 openssl s_client 连接到服务器时,它成功连接到服务器。
在应用程序级别是否需要更改任何内容?配置?或者在 Java 密钥库级别有什么可做的吗?
下面添加连接时出现错误信息:
20160823-06:04:15, FIX.4.4:XXXX->XXXX, error> (Disconnecting: Socket
exception (/XXXX.XXXX.XXX.XX:20237):
javax.net.ssl.SSLHandshakeException: SSL handshake failed.)
Successfully logged out for sessionId : FIX.4.4:XXXX->XXXX
感谢任何帮助!
配置:
[default]
# Settings which apply to all the Sessions.
ConnectionType=initiator
LogonTimeout=86400
ResetOnLogon=Y
UseDataDictionary=Y
MaxLatency=240
#StartTime=00:00:00
#EndTime=00:00:00
#StartTime=02:30:00
#EndTime=12:30:00
StartTime=02:21:00
EndTime=12:21:00
HeartBtInt=30
ReconnectInterval=5
[session]
# Settings specifically for one session
BeginString=FIX.4.4
SocketConnectHost=xxx.xxx.xxx.xxx
SocketUseSSL=Y
SocketKeyStorePassword=importkey
CheckLatency=N
#SendResetSeqNumFlag=Y
# new setups
FileLogHeartbeats=Y
##----- CAPS Configuration ---------##
FileStorePath=/etc/bloomburg-live/msgs
FileLogPath=/etc/bloomburg-live/logs
DataDictionary=/etc/bloomburg-live/conf/FIX44.xml
SocketKeyStore=/root/.keystore
TargetCompID=BLPSTP
SocketConnectPort=xxxxx
SenderCompID=CAPSTP
# log configuration
FileIncludeMilliseconds=Y
FileIncludeTimeStampForMessages=Y
ScreenLogShowHeartBeats=Y
#Filter heartbeats from output (both incoming and outgoing)
PS - 应用程序在没有 CA 证书验证的情况下工作。启用 CA 证书验证时出错。
是,如果应用程序以前使用 ssl。您无需在应用程序端进行任何更改。通常 Quickfix/j 就像 java 一样处理 ssl 验证。这意味着 openssl 和 java keytool 将为您解决问题。所以下面列出了步骤。
- 使用信任证书、私钥和 ca 创建 pkcs12 密钥库
证书.
$ openssl pkcs12 -export -chain -in certificate.pem -inkey encodedKey.pem -out keystore.p12 -name importkey -CAfile CAcertificate.pem
Enter Export Password: importkey
Verifying - Enter Export Password: importkey
- 使用 keytool,将 PKCS12 密钥库导入 quickfix/j 使用的生成的密钥库,称为 /root/.keystore。同样,您可以 select 不同的密码。
keytool -importkeystore -destkeystore /root/.keystore -srckeystore keystore.p12 -alias importkey
Enter destination keystore password: importkey
Re-enter new password: importkey
Enter source keystore password: importkey
- 更改配置文件并将密钥库复制到class路径。
SocketKeyStore=keystore.ImportKey
cp /root/.keystore keystore.ImportKey /your/classpath
就是这样。
请注意,将 ssl 密钥和证书添加到 java 密钥库不适用于 quickfix/j,因为 quickfix/j 正在维护自己的密钥库。因此,请确保在添加密钥过程后将密钥库添加到 class 路径。
参考 - https://blogs.oracle.com/jtc/entry/installing_trusted_certificates_into_a
我有一个使用 QuickFIX/J 编写的应用程序来连接彭博服务器。最近 Bloomberg 在他们的服务器中添加了 CA 证书验证,并且他们为握手提供了额外的 CA 证书文件。
我的应用程序使用 SSL 连接,当从 Bloomberg 端禁用 CA 证书验证时,应用程序成功连接到服务器并获取消息。启用 CA 验证时握手失败。
以下是我尝试过的步骤。
- 以前我使用
ImportKey
Java class 添加证书和密钥。 我将其更改为添加多个证书。如果需要我可以post Java class. - 当我使用 openssl s_client 连接到服务器时,它成功连接到服务器。
在应用程序级别是否需要更改任何内容?配置?或者在 Java 密钥库级别有什么可做的吗?
下面添加连接时出现错误信息:
20160823-06:04:15, FIX.4.4:XXXX->XXXX, error> (Disconnecting: Socket exception (/XXXX.XXXX.XXX.XX:20237): javax.net.ssl.SSLHandshakeException: SSL handshake failed.) Successfully logged out for sessionId : FIX.4.4:XXXX->XXXX
感谢任何帮助!
配置:
[default]
# Settings which apply to all the Sessions.
ConnectionType=initiator
LogonTimeout=86400
ResetOnLogon=Y
UseDataDictionary=Y
MaxLatency=240
#StartTime=00:00:00
#EndTime=00:00:00
#StartTime=02:30:00
#EndTime=12:30:00
StartTime=02:21:00
EndTime=12:21:00
HeartBtInt=30
ReconnectInterval=5
[session]
# Settings specifically for one session
BeginString=FIX.4.4
SocketConnectHost=xxx.xxx.xxx.xxx
SocketUseSSL=Y
SocketKeyStorePassword=importkey
CheckLatency=N
#SendResetSeqNumFlag=Y
# new setups
FileLogHeartbeats=Y
##----- CAPS Configuration ---------##
FileStorePath=/etc/bloomburg-live/msgs
FileLogPath=/etc/bloomburg-live/logs
DataDictionary=/etc/bloomburg-live/conf/FIX44.xml
SocketKeyStore=/root/.keystore
TargetCompID=BLPSTP
SocketConnectPort=xxxxx
SenderCompID=CAPSTP
# log configuration
FileIncludeMilliseconds=Y
FileIncludeTimeStampForMessages=Y
ScreenLogShowHeartBeats=Y
#Filter heartbeats from output (both incoming and outgoing)
PS - 应用程序在没有 CA 证书验证的情况下工作。启用 CA 证书验证时出错。
是,如果应用程序以前使用 ssl。您无需在应用程序端进行任何更改。通常 Quickfix/j 就像 java 一样处理 ssl 验证。这意味着 openssl 和 java keytool 将为您解决问题。所以下面列出了步骤。
- 使用信任证书、私钥和 ca 创建 pkcs12 密钥库 证书.
$ openssl pkcs12 -export -chain -in certificate.pem -inkey encodedKey.pem -out keystore.p12 -name importkey -CAfile CAcertificate.pem
Enter Export Password: importkey Verifying - Enter Export Password: importkey
- 使用 keytool,将 PKCS12 密钥库导入 quickfix/j 使用的生成的密钥库,称为 /root/.keystore。同样,您可以 select 不同的密码。
keytool -importkeystore -destkeystore /root/.keystore -srckeystore keystore.p12 -alias importkey Enter destination keystore password: importkey Re-enter new password: importkey Enter source keystore password: importkey
- 更改配置文件并将密钥库复制到class路径。
SocketKeyStore=keystore.ImportKey cp /root/.keystore keystore.ImportKey /your/classpath
就是这样。 请注意,将 ssl 密钥和证书添加到 java 密钥库不适用于 quickfix/j,因为 quickfix/j 正在维护自己的密钥库。因此,请确保在添加密钥过程后将密钥库添加到 class 路径。
参考 - https://blogs.oracle.com/jtc/entry/installing_trusted_certificates_into_a