若要配置 SOAtest 以使用Web 服务,该服务使用 HTTPS(通过 SSL 的 HTTP)部署,则需要从服务器识别和注册用于 HTTPS 连接的证书:
关闭 SOAtest (如果为开启状态)。
- 标识用于 HTTPS 连接的服务器证书位置。
- 确保该证书的 COMMON NAME 参数包含服务器的机器名称和子域名(例如,
machine.company.com
)。 复制证书到以下位置:
<soatest_install_dir>/plugins/com.parasoft.ptest.libs.web_<soatest_version_number>/root/lib
该目录应该包含存储受信任证书的cacerts
文件。执行以下格式的命令:
keytool -import -alias <certificate_alias> -file <certificate_file> -keystore cacerts
例如,如果您的证书文件名为test.cert
,则可以在<INSTALL>/plugins/com.parasoft.ptest.libs.web_<VERSION>/root/lib
目录下执行以下命令:
keytool -import -alias serverTrustCert -file test.cert -keystore cacerts
该命令将使用别名“serverTrustCert
”把证书导入到 cacerts 文件中。- 提示输入密钥库密码时,请输入
changeit
。 - 询问是否信任该证书时,请输入
yes
。然后将看到一条消息,指明该证书已添加到密钥库中。 - (可选项)验证证书是否通过输入以下命令,然后检查打开的文件,从而添加到密钥库中:
keytool -list -keystore cacerts
启动 SOAtest 并尝试再次访问服务。
如果在使用 HTTPS 部署的服务时遇到问题,请验证以下内容:
- 服务器正在运行。
- 尝试与此 HTTPS 进行通信时,使用的是机器的全名。
- 服务器证书使用全名进行创建。
- 证书上的名称与客户端试图使用其访问的名称相同。
如果没有满足以上要求(例如,如果没有必要的权限):
- 选择 Parasoft> 首选项以打开首选项对话框。
- 从首选项对话框左窗格中选择 Parasoft> 安全性,然后在右窗格中选择信任所有证书选项。
- 点击 OK 或应用,应用此更改。
SOAtest 将尝试访问指定的所有 WSDL,而不管证书存在什么问题。然而,SOAtest 仍将在尝试发送 SOAP 消息的时候使用证书,因为这是必需的。
注意
必须将证书添加到负载测试从机和主机上的 cacerts 文件。否则,在使用从机运行负载测试时,SSL 连接将无法工作。
如果这些方法均无法解决您的问题,请根据联系 Parasoft 技术支持中提供的方式之一联系 Parasoft。
调试 SSL 问题
SOAtest 在标准 JVM 上运行。若要呈现 SSL/TLS 握手的详细信息并帮助识别 SSL 连接问题的原因,请启用 JVM 网络和 SSL 调试:
- 打开命令行控制台并导航到 SOAtest 安装目录。
- 用参数启动可执行文件:
-J-Dssl.debug=true -J-Djavax.net.debug=all -consolelog
SOAtest 将按往常一样启动,但是每当建立 SSL 连接时,调试输出都将打印到控制台。如果希望将堆栈输出保存到文件(例如,output.txt
),则可以在命令行尾部添加以下内容:
> output.txt
关于使用 Java keytool 管理键和证书的更多信息,请查看 Oracle Java 文档。请参考:
- 针对 Windows:http://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html
- 针对 Linux, Mac:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html
排除客户端身份验证的疑难解答
如果使用客户端 SSL(双向)发送请求,并且连接失败或服务器返回 401(未授权)或 403(禁止)HTTP 响应,则 SSL 调试日志可能包含以下内容:
*** ServerHelloDone [read] MD5 and SHA1 hashes: len = 4 0000: 0E 00 00 00 .... 警告:找不到合适的证书 - 在没有客户端身份验证的情况下继续
检查 CertificateRequest
消息,该消息应打印在输出的前面,以确定为什么客户端证书被认为不合适。此消息包含有关从服务器接收的请求的详细信息:
*** CertificateRequest 证书类型:RSA, ... 支持的签名算法:SHA512withRSA, SHA256withRSA, SHA384withRSA, SHA1withRSA, ... 证书颁发机构: <CN=GeoTrust ... <CN=VeriSign ... <CN=Go Daddy ... ...
CertificateRequest
消息声明根据在证书类型
、支持的签名算法
、证书颁发机构
字段中指定的值选择客户端证书的要求。如果在客户端的 HTTP 传输设置中配置的客户端证书(在 Parasoft> 首选项> 安全性> 客户端 SSL下)与 CertificateRequest
消息中的所有要求都不匹配,则客户端的证书将不会实际使用,连接将在没有客户端身份验证的情况下继续。
在某些情况下,客户端的证书与请求的证书类型
之一和支持的签名算法
匹配,但与证书颁发机构
不匹配。如果密钥库缺少客户端证书链,则可能发生这种情况。证书链用于将客户端证书连接到其颁发者的证书,然后连接到任何中间证书颁发机构,然后连接到服务器请求的其中一个证书颁发机构
。如果证书链丢失,则需要重新生成客户端的密钥库文件以包含丢失的证书链。
您可以使用 openssl 命令行工具重建客户端的密钥库。如果证书文件是“ssl-certificate-file.crt”,证书链是“ssl-certificate-chain.crt”,证书密钥是“ssl-certificate-key.key”,那么下面的 openssl 示例命令将重建客户端的密钥库:
# build PEM file containing client certificate and certificate chain cat ssl-certificate-file.crt ssl-certificate-chain.crt >ssl-certificate-all.pem # build pfx file openssl pkcs12 -export -in ssl-certificate-all.pem -inkey ssl-certificate-key.key -out keystore.pfx -name myname -CAfile ssl-certificate-chain.crt -caname mycaname
JMS SSL
请参阅JMS。