若要配置 Virtualize 以使用 服务,该服务使用 HTTPS(通过 SSL 的 HTTP)部署,则需要从服务器识别和注册用于 HTTPS 连接的证书:

  1. 关闭 Virtualize (如果为开启状态)。

  2. 标识用于 HTTPS 连接的服务器证书位置。
  3. 确保该证书的 COMMON NAME 参数包含服务器的机器名称和子域名(例如,machine.company.com)。
  4. 复制证书到以下位置:

    <virtualize_install_dir>/plugins/com.parasoft.ptest.libs.web_<virtualize_version_number>/root/lib

     
    该目录应该包含存储受信任证书的 cacerts 文件。

  5. 执行以下格式的命令:

    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 文件中。

    密钥工具路径必须设置

    执行 keytool 命令之前,首先必须设置包含 Java 可执行的 keytool 的路径。可以使用附带以下产品的 Java 二进制版本Virtualize。若要添加已包含的 Java 二进制到路径中,则打开命令行提示符并在引用 keytool 前输入以下内容:

    PATH =%PATH%; <INSTALL>\plugins\com.parasoft.ptest.jdk.eclipse.core.web.<OS>.<ARCH>_<VERSION>\jdk\bin

  6. 提示输入密钥库密码时,请输入 changeit
  7. 询问是否信任该证书时,请输入 yes。然后将看到一条消息,指明该证书已添加到密钥库中。
  8. (可选项)验证证书是否通过输入以下命令,然后检查打开的文件,从而添加到密钥库中:
    keytool -list -keystore cacerts
  9. 启动 Virtualize 并尝试再次访问服务。

如果在使用 HTTPS 部署的服务时遇到问题,请验证以下内容:

  1. 服务器正在运行。
  2. 尝试与此 HTTPS 进行通信时,使用的是机器的全名。
  3. 服务器证书使用全名进行创建。
  4. 证书上的名称与客户端试图使用其访问的名称相同。

如果没有满足以上要求(例如,如果没有必要的权限):

  1. 选择 Parasoft> 首选项以打开首选项对话框。
  2. 从首选项对话框左窗格中选择 Parasoft> 安全性,然后在右窗格中选择信任所有证书选项。
  3. 点击 OK应用,应用此更改。

Virtualize 将尝试访问指定的所有 WSDL,而不管证书存在什么问题。然而,Virtualize 仍将在尝试发送 SOAP 消息的时候使用证书,因为这是必需的。

注意

必须将证书添加到负载测试从机和主机上的 cacerts 文件。否则,在使用从机运行负载测试时,SSL 连接将无法工作。

如果这些方法均无法解决您的问题,请根据联系 Parasoft 技术支持中提供的方式之一联系 Parasoft。

调试 SSL 问题

Virtualize 在标准 JVM 上运行。若要呈现 SSL/TLS 握手的详细信息并帮助识别 SSL 连接问题的原因,请启用 JVM 网络和 SSL 调试:

  1. 打开命令行控制台并导航到 SOAtest 安装目录。
  2. 用参数启动可执行文件:
    -J-Dssl.debug=true -J-Djavax.net.debug=all -consolelog

Virtualize 将按往常一样启动,但是每当建立 SSL 连接时,调试输出都将打印到控制台。如果希望将堆栈输出保存到文件(例如,output.txt),则可以在命令行尾部添加以下内容:

    > output.txt

关于使用 Java keytool 管理键和证书的更多信息,请查看 Oracle Java 文档。请参考:

排除客户端身份验证的疑难解答

如果使用客户端 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

  • No labels