若要配置 Virtualize 以使用 服务,该服务使用 HTTPS(通过 SSL 的 HTTP)部署,则需要从服务器识别和注册用于 HTTPS 连接的证书:
关闭 Virtualize (如果为开启状态)。
- 标识用于 HTTPS 连接的服务器证书位置。
- 确保该证书的 COMMON NAME 参数包含服务器的机器名称和子域名(例如,
machine.company.com
)。 复制证书到以下位置:
<virtualize_install_dir>/plugins/com.parasoft.xtest.libs.web_<virtualize_version_number>/root/lib
该目录应该包含存储受信任证书的cacerts
文件。执行以下格式命令:
keytool -import -alias <certificate_alias> -file <certificate_file> -keystore cacerts
例如,如果证书文件命名为test.cert
,则执行以下命令,该命令来自<virtualize_install_dir>/plugins/com.parasoft.xtest.libs.web_<virtualize_version_number>/root/lib
prompt:keytool -import -alias serverTrustCert -file test.cert -keystore cacerts
这将把证书导入别名为 “serverTrustCert
”的 cacerts 文件中。- 提示输入密匙库密码时,请输入
changeit
。 - 询问是否信任该证书时,请输入
yes
。然后将看到一条消息,指明该证书已添加到密匙库中。 - (可选项)验证证书是否通过输入以下命令,然后检查打开的文件,从而添加到密匙库中:
keytool -list -keystore cacerts
启动 Virtualize 并尝试再次访问服务。
如果在使用 HTTPS 部署的服务时遇到问题,请验证以下内容:
- 服务器正在运行。
- 尝试与此 HTTPS 进行通信时,使用的是机器的全名。
- 服务器证书使用全名进行创建。
- 证书上的名称与客户端试图使用其访问的名称相同。
如果没有满足以上要求(例如,如果没有必要的权限):
- 选择 Parasoft> Preferences 以打开首选项对话框。
- 从首选项对话框左窗格中选择 Parasoft> Security ,然后在右窗格中选择 Trust all certificates 选项。
- 单击 OK 或 Apply 以应用此更改。
Virtualize 将尝试访问指定的所有 WSDL,而不管证书存在什么问题。然而,Virtualize 仍将在尝试发送 SOAP 消息的时候使用证书,因为这是必需的。
注意
必须将证书添加到负载测试奴隶机和主机上的 cacerts 文件。否则,在使用奴隶机运行负载测试时,SSL 连接将无法工作。
如果这些过程都不能处理您的问题,请以 联系 Parasoft 技术支持中所描述的其中一种方式联系 Parasoft。
调试 SSL 问题
Virtualize、 在标准 JVM 上运行。若要呈现 SSL/TLS 握手的详细信息并帮助识别 SSL 连接问题的原因,请启用 JVM 网络和 SSL 调试:
- 打开命令行控制台并导航到 SOAtest 安装目录。
- 用参数启动可执行文件:
-J-Dssl.debug=true -J-Djavax.net.debug=all -consolelog
Virtualize 将按往常一样启动,但是每当建立 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> Preferences> Security> Client side 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