本主题说明如何配置通过 HTTP(包括 HTTPS)发送和接收消息的消息代理。 

版本兼容性

在 Virtualize 或 SOAtest 9.10.X 和更高版本中记录的 HTTP 通讯报文文件不能与 9.9.x 和更低版本一起使用。 

在本章节中: 

您将需要服务的主机,端口和路径 测试或创建虚拟服务设置基本的 HTTP 连接选项。使用通常用于直接向服务发送消息的设置。 

连接设置

要指定基本的 HTTP 连接选项,请在 Proxy Settings Connection 选项卡中设置以下服务和侦听详细信息。

Proxy Settings (incoming) 

这些设置指定来自客户端的消息应连接到的位置,以便与被测应用程序进行通信。 

Listener

您可以从下拉菜单中选择在创建代理时定义的 HTTP 侦听器 (请参阅 创建代理)或使用默认侦听器。

你可以在这一部分添加 HTTP 侦听器:

  1. 点击 New 并指定侦听器的名称。
  2. 点击 Add Port 并且输入一个端口号。您可以通过指定端口号 0 来使消息代理自动分配端口。启用代理后,分配的端口号将出现在控制台中。每次 changed/enabled 消息代理时,都会随机分配该端口。您还可以将 GET 请求发送到 messageProxies  API 端点以返回自动分配的端口号。有关其他信息,请查阅 通过 REST API 进行测试 。  
  3. 如果客户端通过 SSL 发送通讯报文,请启用 Secure 选项并启用您的验证选项。有关更多详情,请查阅 SSL Settings for Listener Ports 。
  4. 点击 OK 退出端口号编辑。
  5. 点击 Add 将其他端口添加到侦听器,或再次点击 OK 完成添加侦听器。
代理监听路径

启用代理应该监听传入连接的路径。

任何两个消息代理都不能具有具有相同代理路径或与现有虚拟资产的 HTTP 路径匹配的路径的 HTTP 连接。

更多相信信息请参考 Service Forward Path and Proxy Listen Path

代理 URL

显示应提供给 AUT 的 URL。查阅 将 AUT 指向代理 以获得其他信息。

侦听器端口的 SSL 设置。

启用使用 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

Primary Connection (outgoing)

Service URL包含目标应用程序的完整 URL(包括服务主机,服务端口和转发路径)。您可以在此处输入完整的 URL and/or 在以下字段中编辑特定组件。在一个区域中进行的更新将传播到另一区域(例如,如果您在 URL 中修改端口,则 Service port 字段中的值将自动更新)。 
服务主机

输入服务所在机器的主机名。这是代理将发送消息的机器。

如果要使代理转发到本地服务器上的虚拟资产而不消耗HTTP连接,请输入 localhost 或者是 127.0.0.1 而不是实际的主机名。 

服务端口输入服务正在监听的端口。这是代理将发送消息的端口。
服务转发路径

(可选项)输入代理应该其接收到的消息转发到的路径。如果为空,则默认为 Proxy listen path 字段中的值。

如果 HTTP 代理正在向 localhost 发送消息,则必须输入一个 Service forward path ,因为代理不允许转发其自身。 

如果 Service forward path 发送重定向后,代理将跟随重定向并进行响应。它将不会把重定向传递回客户端。

更多相信信息请参考 Service Forward Path and Proxy Listen Path

Secondary Connection (outgoing)

请启用 Use secondary connection if primary fails 选项,如果您希望在主连接失败或响应器不可用时将流量重定向到辅助代理端点。如果响应状态代码为 400 级或更高,则连接将被视为“failed”。

例如,如果希望在活动端点不可用时使用虚拟资产,则可以指定辅助端点。如果虚拟资产无法处理给定的用例,则您也可以使用辅助端点将通讯报文重定向到实时端点,并记录实时通讯报文以创建新的虚拟资产来覆盖该用例。

如果未启用此选项,则主要连接将用于记录。

如果启用此选项,则可以从可用的录制选项中进行选择(如下所述)。

Recording options

这些设置确定在指定辅助端点时如何记录流量。

  • 记录两个连接:记录主从连接的流量。来自主服务器的错误消息将不会被记录; 而是将消息发送到辅助站点,并记录响应。第二连接报告的错误将被录制。
  • 仅在主要连接上记录:记录首次连接的流量。不录制错误。
  • 仅在辅助连接上记录:记录第二连接的流量,包括错误。

安全选项卡设置

需要去完成服务 SSL 部分 如果您使用的服务使用SSL时

如果虚拟化服务和 / 或测试中的应用程序使用 SSL 和 / 或其他身份验证(basic / digest,Kerberos,NTLM),可能需要其他配置。

有关在这些字段正下方填写服务 SSL 字段的详细信息,请参阅。 Security Configuration.

代理服务器选项卡设置

您可以在此选项卡中为消息代理服务器指定服务器 这使您可以配置其他代理服务器来收发来自不同消息代理的通讯报文。此配置可控制代理服务器处理被测应用程序和特定消息代理之间的通讯报文。 

要在此级别指定代理设置,请在代理的 Proxy Serve 标签中提供适当的详细信息。 

不支持 SSL。 

服务转发路径和代理侦听路径

在最简单的情况下,您可以将 Proxy listen path 设置为服务的路径并将 Service forward path 保留为空。使用此配置,代理将把它在该路径上所接收的所有消息自动转发到 Service hostService port上的相同路径。 

如果需要代理监听与服务不同的路径,则将 Service forward path 设置为要发送接受消息的实际路径。代理将把路径和任何查询部分转发到目标服务中。 

如果 Proxy listen pathService 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

标头变更

在大多数情况下,代理会将所有标头直接传递到目标服务或从目标服务传递。某些内容长度相关的标头可能会更改,以适合代理服务器的工作方式。例如,代理服务器不支持使用“分块”传输编码进行响应,并且将替换发送的“主机”标头以匹配其自己的主机名(但是,它确实支持从目标服务接收分块的请求和分块的响应)。

设置目标服务

代理可以使用服务器上的虚拟或测试资产作为其目标服务。 

  1. 将服务主机和端口设置为部署虚拟资产的 Virtualize 服务器的主机和端口。如果要使代理转发到本地服务器上的虚拟资产而不消耗HTTP连接,请输入 localhost 或者 127.0.0.1 而不是实际的主机名。
  2. 将代理连接的 Service forward path 设置为虚拟资产的路径(可在 HTTP endpoint下的 Transports> HTTP 选项卡中找到)。

分块/分组行为

代理支持从目标服务接收分块的请求和分块的响应。如果服务响应使用 HTTP 分块,则代理将对响应进行分组,然后将其返回给原始 caller/AUT。

其他 HTTP 消息代理配置

可以创建属性文件来配置其他 HTTP 监听器设置。通过属性文件,您可以微调 HTTP 监听器性能并指定其他 SSL 设置。

  1. 创建纯文本文件,并指定要设置的属性(请查阅 HTTP Listener Message Proxy Performance Properties 和 HTTP Listener Message Proxy SSL Properties)。 
  2. 将文件保存到工作空间的VirtualAssets 或 TestAssets 目录中,并将其命名为 embeddedServer.properties

每次启用具有 HTTP 侦听器的代理时,都会读取该文件。

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

HTTP 监听器消息代理性能属性

所有属性都是可选的,非整数值将被忽略。

embedded.connector.maxThreads

指定连接器应创建的请求处理线程的最大数量。此属性确定可以处理的同步请求的最大数。默认为 200

embedded.connector.minThreads

指定应始终运行的最小线程数。默认为 10

embedded.connector.acceptors

指定应用于接受连接的线程数。在具有多个 CPU 的计算机上或使用多个非保持活动的连接时,请增加此值。大多数情况下,12 便足够了。默认为 1

embedded.connector.idleTimeout指定连接器在关闭连接之前应等待另一个 HTTP 请求的毫秒数。指定为 -1 表示允许连接器无限期地等待。默认为 use connectTimeout
embedded.connector.soLingerTime

指定关闭套接字时,连接器使用的套接字应延迟的毫秒数。默认情况下,禁用延迟。

embedded.connector.acceptorPriorityDelta指定用于接受新连接的接受线程的优先级。有关其他详细信息,请查阅 java.lang.Thread JavaDoc 。默认为 5
embedded.connector.acceptQueueSize

当所有可能的请求处理线程都在使用时,为传入的连接请求指定最大队列长度。队列已满时收到的任何请求都将被拒绝。默认为 100

embedded.connector.connectTimeout指定连接器在接受连接后应等待多少毫秒 以等待请求 URI 行出现 。输入 -1 表示允许连接器无限期地等待。默认为 60000

HTTP 监听器消息代理 SSL 属性

embedded.ssl.includeProtocols

支持 HTTPS 连接的以逗号分隔的 SSL 协议列表。如果指定,JVM 中的 SSL 实现将仅支持列表中的协议。如果没有设置该属性,则使用 JVM 支持的 协议 (默认情况下,如果 JVM 启用它们中的一个或两个,则排除 SSLv2 和 SSLv3)

embedded.ssl.includeCipherSuites

支持 HTTPS 连接的以逗号分隔的加密密码列表。使用 JSSE 密码命名规范来指定密码。如果设置了该属性, 则 SSL 实现将仅支持列表中的密码。如果未设置该属性,则 JVM 默认的密码套件(除了不被认为安全的套件之外) 都将受到支持因此, 默认情况下,老版本的 JVM 只能使用非常有限的一组密码。

embedded.ssl.useCipherSuitesOrder

设置为 true 强制执行服务器的密码顺序(通过密码设置)。设置为 false 选择客户端提供的第一个可接受的密码套件。此特性要求 Java 8 或其更高版本。默认为 undefined,这将导致 JSSE 实现定义顺序。

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 代理:: 

  • Proxy listen path: /BookStore
  • Service host:virtualize.parasoft.com
  • Service port: 9080
  • Service forward path: [empty]


此配置将侦听 /BookStore,并将所有通讯报文转发到实际的书店服务。

如果我们想要侦听服务路径以外的路径,我们将如下所示配置代理:

  • Service forward path: /BookStore
  • Proxy listen path: /SomeOtherPath


这会将通讯报文从代理上的 /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 服务器的主机和端口信息,就像它只是另一个服务一样。

例如,向远程服务器上的虚拟资产发送通讯报文,您可以使用: 

  • Service host: virtualize.parasoft.com
  • Service port: 9080
  • Proxy listen path: /path

向本地服务器上的虚拟资产发送通讯报文,您可以使用:

  • Service host: localhost
  • Service port: 9080
  • Service forward path: /pva

HTTP 代理不区分虚拟资产和实际服务。两者都以相同的方式配置。然而,如果 HTTP 代理发送给本地主机,则必须指定 Service forward path ,因为代理不允许转发其自身。

将请求转发到标头名称(区分大小写)的服务

如果使用 Virtualize 桌面服务器,则消息代理标头将小写,并且在请求转发到区分大小写的 HTTP 标头名称的服务时可能无法正常运行。有关更多详情,请查阅 Forwarding Requests to Services that Require Case-sensitive Header Names


安全配置

安全配置有两个方面: 

  • 如果要转发通讯报文的服务使用 SSL 和/或访问身份验证,则您需要执行代理级配置 (来自代理的 UI 控件)。
  • 如果 AUT 使用 SSL 和/或访问身份验证,泽您需要执行服务级配置 (针对基于 Tomcat 的服务器)。

根据您的配置,您可以配置安全设置或两个都配置。

代理级配置

如果转发通讯报文的服务使用 SSL 和/或访问身份验证,则代理级安全配置包括:

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 certificatesAccept self-signed certificates 均未选中时,信任库配置(如下所述)才适用。

密匙库配置面板字段

选项说明
Key store file指定密钥存储文件的路径。密钥存储确定消息代理在 SSL 握手期间向服务显示的证书和密钥。
Key store password指定用于访问密钥库的密码。
Key store type指定密钥存储的类型。
Certificate指定要用于对服务器进行身份验证时使用的证书的别名。

完成密匙库详情后,请单击 Load ,从 Certificate 下拉菜单中选择 展示给服务器的证书别名 如果 Certificate 下拉在您单击 Load后没有被填充,则您可能输入了错误地密码或密匙库类型。


密匙库配置面板字段

这些字段仅在 Trust allAccept 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 身份验证,请提供 NTLM 部分中的用户名/密码。


Kerberos 身份验证

如果您的服务需要 Kerberos 身份验证,请在身份验证部分设置 Kerberos Service Principal

服务级配置

如果 AUT 使用 SSL 和/或访问身份验证,则服务器级安全配置可能涉及:

配置 SOAtest 和 Virtualize 服务器

您可以更改默认端口号 (9080)、启用 SSL 并配置其他服务器设置。有关更多详情,请查阅 服务器配置 

使用具有 WAFFLE 的 NTLM

要将第三方库 WAFFLE 用于 NTLM:

  1. 请将以下 jar 文件拷贝到 tomcat 的 lib 目录下: jna.jar, platform.jar, wafflejna.jar
  2. 将以下内容添加到 tomcat/conf/server.xml

    <Context>
      <Valve className="waffle.apache.NegotiateAuthenticator" principalFormat="fqn" roleFormat="both"/> 
      <Realm className="waffle.apache.WindowsRealm" /> </Context> 

    文件 server.xml 在哪里?

    如果安装了 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 文件。

  3. 将以下内容添加到 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> 
  4. 重启服务。

有关更多详情,请查阅单点登录。Tomcat Negotiate Authenticator (Kerberos + NTLM) w/ Waffle 教程和 WAFFLE 主页。

使用不支持的配置(具有 WAFFLE、JAAS 的 Kerberos)

WAFFLE 包括对 Kerberos 身份验证的支持,请参阅 WAFFLE 主页以获得指导和支持。 

JAAS 是配置基于 Tomcat 的 Virtualize 服务器以执行 Kerberos 身份验证的另一个选项。有关如何使用 JAAS 的参考说明,请参阅 Tomcat。

  • No labels