SoapUI中使用仅含公钥的SSL服务器证书及相关证书配置问题
我来帮你梳理下这两个问题的解决办法,都是SoapUI证书配置里常见的小坑:
一、仅含公钥的SSL服务器证书(.cer)的正确配置方式
你遇到的导入报错很正常——SoapUI的「Keystores」模块是专门用来存放带私钥的证书文件(比如你的.pfx签名证书)的,而仅含公钥的.cer证书根本没有私钥,自然没法导入到这里。这类公钥证书应该放到SoapUI的「Truststore(信任库)」里,因为信任库就是用来存储我们需要信任的公钥证书(比如用于加密数据、验证对方身份的证书)。
具体操作步骤:
用keytool创建自定义信任库(也可以用JDK默认的cacerts,但自定义的更干净):
打开命令行,执行以下命令(替换路径和别名):keytool -importcert -file 你的服务器证书路径/server.cer -keystore my-truststore.jks -alias server-public-cert执行时会提示你设置信任库密码(随便设一个,比如
changeit),然后输入yes确认信任该证书即可。在SoapUI中配置信任库:
打开SoapUI,点击顶部菜单栏的「File > Preferences」,切换到「SSL」标签页;在「Truststore」区域,点击「Browse」选择刚才生成的my-truststore.jks,输入你设置的密码,保存设置。在请求中使用该公钥加密:
当你需要对SOAP请求的部分内容加密时,在请求的「WS-Security」配置里,选择「Encryption」选项,然后从信任库中选中这个服务器公钥证书即可——加密只需要对方的公钥,不需要私钥,这样就完成了加密配置。
二、自签名CA证书的SoapUI配置
你在C#程序里安装了自签名CA才能让签名证书生效,SoapUI这边也需要做同样的操作:把这个CA证书导入到信任库(就是刚才的my-truststore.jks或者JDK默认的cacerts),这样SoapUI才会信任你用来签名的.pfx证书(因为它是这个自签名CA签发的)。
操作和导入服务器证书类似:
keytool -importcert -file 你的CA证书路径/ca.cer -keystore my-truststore.jks -alias ca-root-cert
输入信任库密码后,输入yes确认信任即可。如果用JDK默认的cacerts,路径一般是{你的JDK安装目录}/jre/lib/security/cacerts,默认密码也是changeit。
最后补充个小提示:如果你的请求需要同时做签名和加密,记得在WS-Security配置里,签名部分选Keystores里的.pfx证书,加密部分选Truststore里的服务器公钥证书,两者是分开配置的哦。
备注:内容来源于stack exchange,提问作者francosy

