Zeroc ICE ( Internet Communications Engine )中間件號稱標准統一,開源,跨平台,跨語言,分布式,安全,服務透明,負載均衡,面向對象,性能優越,防火牆穿透,通訊屏蔽。https://zeroc.com/
該中間件在跨語言集成時比較方便,如下就是在JAVA C++之間交互時,啟用ssl通訊的設置
1. 證書生成
ICE提供申請證書的腳步,通過ICE腳本,可生成所需的證書。進入Ice-3.5.1/cpp/src/ca目錄。
1.1. 生成根證書,輸入證書相關信息
python iceca init --no-password –overwrite
根證書在/root/.iceca/目錄下生成,root為當前登陸用戶
1.2. 申請用於ICE服務器的證書:
python iceca request --no-password server server
1.3. 申請用於ICE客戶端的證書
python iceca request --no-password client client
1.4. 證書簽名
python iceca sign --in server_req.pem --out server_cert.pem
python iceca sign --in client_req.pem --out client_cert.pem
1.5. 導出證書
將ICE客戶端用到的證書導出為java可用的格式。根證書的證書文件需要從/root/.iceca/ca/db下復制出來.
python iceca import --java client_cert.pem client_key.pem client_cert.jks
python iceca import --java ca_cert.pem ca_key.pem ca_cert.jks
導出時需要兩個密碼,第一個是私鑰的密碼,由於在申請證書的時候不設置密碼,不輸入,直接回車,需要輸入第二個密碼##
2. 程序配置
2.1. 將生成的ca_cert.jks、ca_key.pem、client_cert.jks 、server_cert.pem文件復制到/home/certs目錄下。
將編譯icessl生成的so文件(libIceSSL.so、libIceSSL.so.3.5.1、libIceSSL.so.35)復制到/usr/lib下,執行 ldconfig命令。
2.2. ICE服務端ssl設置config.ice文件,添加以下行:
Ice.Plugin.IceSSL=IceSSL:createIceSSL
IceSSL.DefaultDir=/home/certs
IceSSL.CertFile=server_cert.pem
IceSSL.KeyFile=server_key.pem
IceSSL.CertAuthFile=ca_cert.pem
服務端綁定的Endpoint,如下是普通的和ssl同時啟用
default -p 8881 -h localhost:ssl -p 8882
2.3. ICE客戶端啟用SSL
在/home/web下新建配置文件config.ice,保存以下內容:
Ice.Plugin.IceSSL=IceSSL.PluginFactory
IceSSL.DefaultDir=/home/certs
IceSSL.Keystore=ca_cert.jks
IceSSL.Truststore=client_cert.jks
IceSSL.TruststorePassword=admin12345
客戶端程序連接的服務信息和配置如下
"--Ice.Config=/home/web/config.ice"
"#:ssl -p 8882 -h ##"