本主题说明如何配置通过 HTTP(包括 HTTPS)发送和接收消息的消息代理。
在 Virtualize 或 SOAtest 9.10.X 和更高版本中记录的 HTTP 通讯报文文件不能与 9.9.x 和更低版本一起使用。 |
在本章节中:
您将需要服务的主机,端口和路径 测试或创建虚拟服务设置基本的 HTTP 连接选项。使用通常用于直接向服务发送消息的设置。
要指定基本的 HTTP 连接选项,请在 Proxy Settings Connection 选项卡中设置以下服务和侦听详细信息。
这些设置指定来自客户端的消息应连接到的位置,以便与被测应用程序进行通信。
Listener | 您可以从下拉菜单中选择在创建代理时定义的 HTTP 侦听器 (请参阅 创建代理)或使用默认侦听器。 你可以在这一部分添加 HTTP 侦听器:
|
---|---|
代理监听路径 | 启用代理应该监听传入连接的路径。 任何两个消息代理都不能具有具有相同代理路径或与现有虚拟资产的 HTTP 路径匹配的路径的 HTTP 连接。 更多相信信息请参考 Service Forward Path and Proxy Listen Path 。 |
代理 URL | 显示应提供给 AUT 的 URL。查阅 将 AUT 指向代理 以获得其他信息。 |
启用使用 Use keystore 选项来配置服务器端 SSL 设置。
配置以下设置:
Key store file | 指定密钥存储文件的路径。您可以手动输入路径或浏览文件系统或工作空间。 |
---|---|
Key store password | 指定用于访问密钥库的密码。 |
Key store type | 从下拉菜单中选择密钥库类型,然后单击 Load。 |
证书 | 从 这个 Certificate 下拉菜单中 选择要显示给服务器的证书别名。如果存在配置错误(例如,密码或密钥库类型不正确),菜单将为空。 |
启用使用 Perform client authentication 选项来配置服务器端 SSL 设置。
配置以下设置:
Key store file | 指定密钥存储文件的路径。您可以手动输入路径或浏览文件系统或工作空间。 |
---|---|
Key store password | 指定用于访问密钥库的密码。 |
Key store type | 从下拉菜单中选择密钥库类型,然后单击 Load。 |
Service URL | 包含目标应用程序的完整 URL(包括服务主机,服务端口和转发路径)。您可以在此处输入完整的 URL and/or 在以下字段中编辑特定组件。在一个区域中进行的更新将传播到另一区域(例如,如果您在 URL 中修改端口,则 Service port 字段中的值将自动更新)。 |
---|---|
服务主机 | 输入服务所在机器的主机名。这是代理将发送消息的机器。 如果要使代理转发到本地服务器上的虚拟资产而不消耗HTTP连接,请输入 |
服务端口 | 输入服务正在监听的端口。这是代理将发送消息的端口。 |
服务转发路径 | (可选项)输入代理应该其接收到的消息转发到的路径。如果为空,则默认为 Proxy listen path 字段中的值。 如果 HTTP 代理正在向 localhost 发送消息,则必须输入一个 Service forward path ,因为代理不允许转发其自身。 如果 Service forward path 发送重定向后,代理将跟随重定向并进行响应。它将不会把重定向传递回客户端。 更多相信信息请参考 Service Forward Path and Proxy Listen Path 。 |
请启用 Use secondary connection if primary fails 选项,如果您希望在主连接失败或响应器不可用时将流量重定向到辅助代理端点。如果响应状态代码为 400 级或更高,则连接将被视为“failed”。
例如,如果希望在活动端点不可用时使用虚拟资产,则可以指定辅助端点。如果虚拟资产无法处理给定的用例,则您也可以使用辅助端点将通讯报文重定向到实时端点,并记录实时通讯报文以创建新的虚拟资产来覆盖该用例。
如果未启用此选项,则主要连接将用于记录。
如果启用此选项,则可以从可用的录制选项中进行选择(如下所述)。
这些设置确定在指定辅助端点时如何记录流量。
需要去完成服务 SSL 部分 如果您使用的服务使用SSL时。
如果虚拟化服务和 / 或测试中的应用程序使用 SSL 和 / 或其他身份验证(basic / digest,Kerberos,NTLM),可能需要其他配置。
有关在这些字段正下方填写服务 SSL 字段的详细信息,请参阅。 Security Configuration.
您可以在此选项卡中为消息代理服务器指定服务器 这使您可以配置其他代理服务器来收发来自不同消息代理的通讯报文。此配置可控制代理服务器处理被测应用程序和特定消息代理之间的通讯报文。
要在此级别指定代理设置,请在代理的 Proxy Serve 标签中提供适当的详细信息。
不支持 SSL。
在最简单的情况下,您可以将 Proxy listen path 设置为服务的路径并将 Service forward path 保留为空。使用此配置,代理将把它在该路径上所接收的所有消息自动转发到 Service host 和 Service port上的相同路径。
如果需要代理监听与服务不同的路径,则将 Service forward path 设置为要发送接受消息的实际路径。代理将把路径和任何查询部分转发到目标服务中。
如果 Proxy listen path 和 Service forward path 不同,则请求中 Proxy listen path 之后的任何段都将附加到转发的请求中。Proxy listen path 本质上被 Service forward path 替换,以便将整个路径(由代理接收)发送到服务。
您可以使用通配符指定动态路径段。例如, 将路径配置为/path/*/service
将使以下路径可以转到同一代理:
/path/1/service
/path/2/service
通配符可用于替换整个路径段。例如:
/path/*/service
— 有效的/path/1*2/service
— 无效的通配符只能用于路径的一部分。配置为 ast /path/*/service
的路径不匹配 /path/1/2/service
。如果希望路径既匹配 /path/1/2/service
又匹配 /path/3/4/service
,请使用模式 /path/*/*/service
。
您可以将侦听路径中的动态段用作转发路径的一部分。有两种方法可以做到这一点:
如果转发路径不同,并且需要使用动态值,请使用环境变量语法对其进行配置。例如:listen path:
/path/*/service
forward path:
/asset/path/${1}/service
可以使用环境变量语法访问由通配符表示的动态侦听路径段。通配符的出现用作变量名;换句话说,第一个出现的通配符是 ${1},第二个是 ${2},第三个是 ${3},依此类推。在下面的示例中,${2} 表示第二个出现的通配符(在请求路径中为“bank”):
监听路径:
/path/*/service/*/account
forward path:
/asset/path/${2}/service/${1}/account
请求路径:
/path/1/service/bank/account
forward path:
/asset/path/bank/service/1/account
在大多数情况下,代理会将所有标头直接传递到目标服务或从目标服务传递。某些内容长度相关的标头可能会更改,以适合代理服务器的工作方式。例如,代理服务器不支持使用“分块”传输编码进行响应,并且将替换发送的“主机”标头以匹配其自己的主机名(但是,它确实支持从目标服务接收分块的请求和分块的响应)。
代理可以使用服务器上的虚拟或测试资产作为其目标服务。
localhost
或者 127.0.0.1
而不是实际的主机名。代理支持从目标服务接收分块的请求和分块的响应。如果服务响应使用 HTTP 分块,则代理将对响应进行分组,然后将其返回给原始 caller/AUT。
可以创建属性文件来配置其他 HTTP 监听器设置。通过属性文件,您可以微调 HTTP 监听器性能并指定其他 SSL 设置。
将文件保存到工作空间的VirtualAssets 或 TestAssets 目录中,并将其命名为 embeddedServer.properties
。
每次启用具有 HTTP 侦听器的代理时,都会读取该文件。
embedded.connector.maxHttpHeaderSize | 指定请求和响应 HTTP 标头的最大(字节)。如果没有指定,请将该属性设置为 8192 (8 KB)。 |
---|---|
embedded.connector.relaxedPathChars | 以未编码形式指定 URI 路径中应允许的字符。该值可以是以下字符的任意组合:
值中存在的任何其他字符将被忽略。如果不包括此属性,则 Tomcat 将在 URI 路径中拒绝上述未编码形式的字符。 有关更多详情,请参考 Tomcat 文档: https://tomcat.apache.org/tomcat-8.5-doc/config/http.html。 |
embedded.connector.relaxedQueryChars | 以未编码形式指定 URI 查询中应允许的字符。该值可以是以下字符的任意组合:
值中存在的任何其他字符将被忽略。如果不包括此属性,则 Tomcat 将在 URI 查询中拒绝上述未编码形式的字符。 有关更多详情,请参考 Tomcat 文档: https://tomcat.apache.org/tomcat-8.5-doc/config/http.html。 |
所有属性都是可选的,非整数值将被忽略。
embedded.connector.maxThreads | 指定连接器应创建的请求处理线程的最大数量。此属性确定可以处理的同步请求的最大数。默认为 |
---|---|
embedded.connector.minThreads | 指定应始终运行的最小线程数。默认为 |
embedded.connector.acceptors | 指定应用于接受连接的线程数。在具有多个 CPU 的计算机上或使用多个非保持活动的连接时,请增加此值。大多数情况下, |
embedded.connector.idleTimeout | 指定连接器在关闭连接之前应等待另一个 HTTP 请求的毫秒数。指定为 -1 表示允许连接器无限期地等待。默认为 use connectTimeout。 |
embedded.connector.soLingerTime | 指定关闭套接字时,连接器使用的套接字应延迟的毫秒数。默认情况下,禁用延迟。 |
embedded.connector.acceptorPriorityDelta | 指定用于接受新连接的接受线程的优先级。有关其他详细信息,请查阅 java.lang.Thread JavaDoc 。默认为 5 。 |
embedded.connector.acceptQueueSize | 当所有可能的请求处理线程都在使用时,为传入的连接请求指定最大队列长度。队列已满时收到的任何请求都将被拒绝。默认为 |
embedded.connector.connectTimeout | 指定连接器在接受连接后应等待多少毫秒 以等待请求 URI 行出现 。输入 -1 表示允许连接器无限期地等待。默认为 60000 。 |
embedded.ssl.includeProtocols | 支持 HTTPS 连接的以逗号分隔的 SSL 协议列表。如果指定,JVM 中的 SSL 实现将仅支持列表中的协议。如果没有设置该属性,则使用 JVM 支持的 协议 (默认情况下,如果 JVM 启用它们中的一个或两个,则排除 SSLv2 和 SSLv3)。 |
---|---|
embedded.ssl.includeCipherSuites | 支持 HTTPS 连接的以逗号分隔的加密密码列表。使用 JSSE 密码命名规范来指定密码。如果设置了该属性, 则 SSL 实现将仅支持列表中的密码。如果未设置该属性,则 JVM 默认的密码套件(除了不被认为安全的套件之外) 都将受到支持。因此, 默认情况下,老版本的 JVM 只能使用非常有限的一组密码。 |
embedded.ssl.useCipherSuitesOrder | 设置为 |
embedded.ssl.maxCertPathLength | 验证客户端证书时允许的中间证书的最大数量。默认为 5。 |
embedded.ssl.crlPath | 设置包含用于验证客户端证书的证书吊销列表的文件的路径。如果未定义,则不会根据证书吊销列表检查客户端证书。 |
embedded.ssl.keyManagerAlgorithm | 设置要使用的证书编码算法。默认情况下,使用 KeyManagerFactory.getDefaultAlgorithm() ,它将返回 Sun JVM 的 SunX509 。IBM JVMs 返回 IbmX509 。 |
embedded.ssl.truststoreAlgorithm | 设置用于信任库的算法。如果未定义,则使用 javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm() 返回的默认值。 |
embedded.ssl.useKeyManagerAlgorithmForTruststore | 如果设置为 true ,则密匙管理器算法用于信任库算法。这优先于 embedded.ssl.truststoreAlgorithm 属性。默认为 false 。 |
假设我们要为通常在 http://example.parasoft.com:9080/BookStore 访问的服务创建一条消息。则我们可以使用以下设置创建 HTTP 代理::
此配置将侦听 /BookStore,并将所有通讯报文转发到实际的书店服务。
如果我们想要侦听服务路径以外的路径,我们将如下所示配置代理:
这会将通讯报文从代理上的 /SomeOtherPath 路由到实际的书店服务。
在这两种情况下,发送到这些路径(包括子路径)的所有通讯报文都发送到服务。在第二个示例中,发送到 /SomeOtherPath/SubPath 的通讯报文将发送到 /BookStore/SubPath。由于查询被保留,所有 /SomeOtherPath?param=value 将发送到 /BookStore?param=value。
如果使用桌面服务器,则消息代理标头将小写,并且在请求转发到区分大小写的 HTTP 标头名称的服务时可能无法正常运行。
您可以在 /VirtualAssets/ 目录下创建一个 _global.headers 文件,并添加使用要传递的特定大写的标头。右键单击 UI 中的服务器,然后重新部署所有虚拟资产,以开始在环境中使用此文件。
您还可以解决特定消息代理的 HTTP 标头大写问题。您可以在 /VirtualAssets/ 目录下创建一个 <proxy-name>.headers 文件,并添加使用要为特定代理传递的特定大写的标头。此文件将应用于特定代理并覆盖全局文件。右键单击 UI 中的服务器,然后重新部署所有虚拟资产,以开始在环境中使用此文件。
X-AUTHORIZATION ANOTHER-HEADER HEADER3 |
代理还可以向虚拟资产发送通讯报文。在这种情况下,请输入 Virtualize 服务器的主机和端口信息,就像它只是另一个服务一样。
例如,向远程服务器上的虚拟资产发送通讯报文,您可以使用:
向本地服务器上的虚拟资产发送通讯报文,您可以使用:
HTTP 代理不区分虚拟资产和实际服务。两者都以相同的方式配置。然而,如果 HTTP 代理发送给本地主机,则必须指定 Service forward path ,因为代理不允许转发其自身。
如果使用 Virtualize 桌面服务器,则消息代理标头将小写,并且在请求转发到区分大小写的 HTTP 标头名称的服务时可能无法正常运行。有关更多详情,请查阅 Forwarding Requests to Services that Require Case-sensitive Header Names 。 |
安全配置有两个方面:
根据您的配置,您可以配置安全设置或两个都配置。
如果转发通讯报文的服务使用 SSL 和/或访问身份验证,则代理级安全配置包括:
对于 SSL,需要其他设置。在配置面板的下半部分,您需要指定是否:
此外,您需要提供使用特定密钥存储和证书所需的信息,以便 Parasoft 可以确定要向服务器出示哪个证书(例如,对于双向 SSL)。
SSL 配置面板字段
选项 | 说明 |
---|---|
Use SSL when connecting to the service | 启用 SSL。 |
Trust all server certificates | 如果启用,将接受任何证书。将不执行任何验证。 当消息代理与服务建立连接时,此选项将禁用信任验证;它使其接受与服务提供的任何证书的连接。通常,如果证书信任不是部署 环境的焦点,则应启用此选项。 |
接受自签名证书 | 如果启用,只要验证方法 java.security.cert.X509Certificate.checkValidity() 返回 true,就会接受证书,从而有效地检查当前日期和时间是否在证书中给出的有效期内。不会计算证书信任路径,并且不会应用提供的信任存储配置。 此选项确定服务提供且未由受信任的证书颁发机构签名的证书是否受信任。通常,如果证书信任不是部署SOAtest 或 Virtualize 环境的焦点,则应启用此选项。 |
请注意,只有在 Trust all server certificates 和 Accept self-signed certificates 均未选中时,信任库配置(如下所述)才适用。
密匙库配置面板字段
选项 | 说明 |
---|---|
Key store file | 指定密钥存储文件的路径。密钥存储确定消息代理在 SSL 握手期间向服务显示的证书和密钥。 |
Key store password | 指定用于访问密钥库的密码。 |
Key store type | 指定密钥存储的类型。 |
Certificate | 指定要用于对服务器进行身份验证时使用的证书的别名。 |
完成密匙库详情后,请单击 Load ,从 Certificate 下拉菜单中选择 展示给服务器的证书别名 。 如果 Certificate 下拉在您单击 Load后没有被填充,则您可能输入了错误地密码或密匙库类型。
密匙库配置面板字段
这些字段仅在 Trust all 和 Accept self-signed certificates (如上所述)均未选中时才适用。
选项 | 说明 |
---|---|
Key store file | 指定信任库文件的路径。信任库确定消息代理在与服务握手时应信任的证书。如果服务提供此存储区中未包含的证书,则连接将被拒绝。如果未提供信任存储,将使用默认的 JRE 信任存储。 此选项仅在 trust all server certificates 未被选中时才适用。 |
Key store password | 指定用于访问信任库的密码。 |
Key store type | 指定信任库的类型。 |
MTLM 设置面板字段
选项 | 说明 |
---|---|
Use NTLM | 指定服务是否需要 NTLM 身份验证。 |
Username | 指定用于 NTLM 身份验证的用户名。 |
Password | 指定用于 NTLM 身份验证的密码。 |
Kerberos 面板字段
选项 | 说明 |
---|---|
Kerberos service principal | 指定服务主体以对请求进行身份验证。 |
如果待测试应用程序提供摘要式认证凭据作为请求的一部分,并将它们作为 HTTP 标头的一部分传输,则代理会将它们传递给未修改的服务(就像它处理其他 HTTP 标头一样)。
如果您的服务需要 NTLM 身份验证,请提供 NTLM 部分中的用户名/密码。
如果您的服务需要 Kerberos 身份验证,请在身份验证部分设置 Kerberos Service Principal 。
如果 AUT 使用 SSL 和/或访问身份验证,则服务器级安全配置可能涉及:
您可以更改默认端口号 (9080)、启用 SSL 并配置其他服务器设置。有关更多详情,请查阅 服务器配置 。
要将第三方库 WAFFLE 用于 NTLM:
lib
目录下: jna.jar, platform.jar, wafflejna.jar
。将以下内容添加到 tomcat/conf/server.xml
。
<Context> <Valve className="waffle.apache.NegotiateAuthenticator" principalFormat="fqn" roleFormat="both"/> <Realm className="waffle.apache.WindowsRealm" /> </Context> |
如果安装了 SOAtest,但没有安装 Virtualize,请执行以下操作:启动 SOAtest,确保至少创建了一个响应程序,然后修改 [SOAtest install dir]/eclipse/plugins/com.parasoft.xtest.libs.web_[version]/root/tomcat/conf/server.xml 目录下的 server.xml 文件。 如果安装了 Virtualize,但没有安装 SOAtest,请执行以下操作::启动 Virtualize,确保至少创建了一个响应程序,然后修改 [Virtualize install dir]/eclipse/plugins/com.parasoft.xtest.libs.web_[version]/root/tomcat/conf/server.xml 目录下的 server.xml 文件。 如果既安装了 Virtualize,也安装了 SOAtest,请执行以下操作:启动 Virtualize,确保至少创建了一个响应程序,然后修改 [SOAtest install dir]/eclipse/plugins/com.parasoft.xtest.libs.web_[version]/root/tomcat/conf/server.xml 目录下的 server.xml 文件。 |
将以下内容添加到 tomcat/conf/web.xml
。
<security-role> <role-name>Everyone</role-name> </security-role> <security-constraint> <display-name>Waffle Security Constraint</display-name> <web-resource-collection> <web-resource-name>Protected Area</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>Everyone</role-name> </auth-constraint> </security-constraint> |
有关更多详情,请查阅单点登录。Tomcat Negotiate Authenticator (Kerberos + NTLM) w/ Waffle 教程和 WAFFLE 主页。
WAFFLE 包括对 Kerberos 身份验证的支持,请参阅 WAFFLE 主页以获得指导和支持。
JAAS 是配置基于 Tomcat 的 Virtualize 服务器以执行 Kerberos 身份验证的另一个选项。有关如何使用 JAAS 的参考说明,请参阅 Tomcat。