AppScan® Enterprise 中的测试自动化使用AppScan Proxy Server

您可以借助 AppScan Proxy Server 在 AppScan Enterprise (ASE) 作业中记录流量以用作探索数据。AppScan 代理服务器是一个用于管理记录代理的系统。可按需创建代理实例以记录稍后将用于 DAST 扫描的流量。本文档描述如何设置和使用代理服务器。

概述

在 DevOps 领域中,越来越需要能够在 CI/CD 流程中合并安全性扫描。如果您使用自动化框架(例如 Selenium),则可以利用已编写的脚本来创建定制扫描。
  • 通过使用 AppScan 代理服务器,您可以自动启动记录代理。然后,从自动框架到 Web 应用程序的请求将在发送时由此记录代理进行记录。流量以 HAR 格式保存在 .dast.config 文件中,您可以稍后上载该文件,以供 AppScan Enterprise (ASE) 用作扫描程序的探索数据。
  • 还可通过代理服务器手动记录流量来创建 .dast.config 文件。
  • 您也可以直接将自己的 HAR 文件上载到 ASE,而不使用代理服务器。

此图描述了 automated scan flow with AppScan® Enterprise。


通过 AppScan Enterprise 进行的自动扫描流程

典型工作流程

  1. 安装代理服务器
  2. 配置代理服务器
  3. 启动代理服务器
  4. 使用代理服务器
注: 可在 AppScan 安装文件夹中获取此工作流程 ProxyServerDemoScript.py 的演示脚本。

安装 AppScan 代理服务器

  1. 下载 Node.js 的一个当前版本(v12 或更高版本),并将其安装到计算机上。如果您的服务符合 FIPS,则必须使用符合 FIPS 的 Node.js 服务器。
  2. DastProxyServerStandalone.zip 解压缩到机器上的文件夹中。
  3. 要覆盖用于运行代理服务器的缺省端口,请执行以下操作:在 Settings.json 中配置端口设置。

配置 AppScan 代理服务器

进行任何配置更改后,必须重新启动服务器。
注: Settings.json 是一个 JSON 文件,因此,某些字符需要进行转义(例如双引号 (") 和反斜杠 (\) 需转义为 \” 和 \\)。请勿更改此文件中的 internalConfiguration 设置。

符合 FIPS 的方式

  1. 在代理服务器的根文件夹中找到 Settings.json 文件,并在文本编辑器中打开该文件。
  2. 找到 requireFips 设置 ,并将设置值从 false 更改为 true
  3. 保存文件。

代理服务器连接

  1. 要为代理服务器设置其运行时使用的缺省端口,请执行以下操作:在 Settings.json 中配置端口设置。
  2. 对于代理服务器的安全 (SSL) 连接:在 Settings.json 中配置您自己的 PEM 或 PKCS12 证书。
    • PEM 证书需要两个文件(完整路径),PKCS12 证书需要一个文件(完整路径)和一个密码。
    • 请注意根据需要对文件路径和密码中的字符进行转义,例如密码abc!”123 将变为 abc!\”123 (“ 被转义)。

      一个通过使用 openssl 创建 PEM 证书的示例:

      openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

      openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt

      一个通过使用 openssl 将 PEM 证书转换为 PKCS12 证书的示例:

      openssl pkcs12 -export -out certificate.pfx -inkey key.pem -in server.crt

      一个通过使用 Java 的 keygen 工具将 JKS 证书转换为 PKCS12 证书的示例:

      keytool -importkeystore -srckeystore certificate.jks -srcstoretype JKS -destkeystore certificate.p12 -deststoretype PKCS12

根证书

如果您测试的应用程序使用的是 SSL (HTTPS),则 AppScan 记录代理必须作为中间人来记录交流。为此,它必须具有根证书,以使用该证书对其与应用程序的通信进行签名。

缺省情况下,AppScan 代理服务器会生成一个唯一的根证书,无需用户介入。但是,在浏览应用程序时,您将收到 SSL 警告。可以忽略它们,也可以执行下列其中一项操作:
  1. 在您的计算机上安装 AppScan 代理服务器生成的证书:
    1. 使用 REST API 可下载由 AppScan Proxy Server 使用的自签署根认证中心作为 PEM 文件。
    2. 在用于“浏览”的浏览器上安装证书,或在需要的位置(取决于流量的来源)进行安装。
  2. 将您的根证书导入 AppScan 代理服务器。受支持的证书格式为 PKCS12(.P12、.PFX)、JKS:
    1. 打开命令行窗口,导航到代理服务器上的安装文件夹。
    2. 运行以下命令:

      .\Java\jre\bin\java -jar DastProxy.jar -irc [path to certificate file] -ircp [password]

      注: 要查看所使用的全部命令,请运行 .\Java\jre\bin\java -jar DastProxy.jar 命令。

      重要说明:由于证书将保存在代理服务器上,因此建议您使用专用测试证书。

  3. 在 StartProxy 命令中提供您自己的修订服务器证书(而不是根证书)。

设置代理非活动超时

如果在使用后未使用关闭命令关闭记录代理实例,则该代理实例将保持打开状态并在端口上侦听。如果记录代理实例在预定义的时间内处于闲置状态,则会自动关闭。

记录代理实例的缺省不活动超时为 60 分钟。您可以更改此值,方法是更改安装文件夹中保存的 Settings.json 文件中的 inactivityTimeoutInMinutes 值。

将流量加密

缺省情况下,不会加密流量文件 (.dast.config)。要将服务器配置为加密所有流量,请将安装文件夹中的 Settings.json 文件中的 "encryptDastConfig" 值更改为 "true"。

链接代理

如果需要定义多个链接在一起的代理,或者定义代理异常,请使用在安装文件夹中找到的链接代理规则文件 (proxy.chain)。文件包含使用说明。

启动代理服务器

您只需启动代理服务器,或将其作为一个服务运行(如下)。请注意,不能并行执行这两种操作。

要启动代理服务器,请执行以下操作:
  • 运行以下命令: node app.js [port]

    其中 *port = 代理服务器在其上侦听 REST API 请求的端口。

注:
  • 如果在启动代理服务器时未定义端口,则会使用 Settings.json 文件中设置的端口,如果其中未定义端口,则会使用端口 8383
  • 无需停止代理服务器。您也可以使代理服务器永久运行。

作为服务启动

可以通过使用 Service 文件夹中的 service.js 可执行文件将代理服务器作为一个服务运行。服务将使用本地系统权限。
注: 所有服务命令都必须以管理员权限运行(以管理员身份运行)。

要启动此服务,请运行以下命令:

node service.js --install

node service.js --start

其他服务命令

您可以通过运行 node service.js --help 命令来输出此列表

服务命令 描述
--start 启动服务
--stop 停止服务
--install 安装服务
--uninstall 停止并卸载服务
--h | --help 输出使用信息

使用代理服务器

代理服务器启动后,您可以启动新的记录代理实例,以记录您的应用程序的流量。

  1. 要启动代理实例,请使用 REST API 请求:StartProxy
  2. 通过已定义的记录代理端口将流量发送到要测试的应用程序。
  3. 完成后,发送 REST API 请求:StopProxy
  4. 下载其中包含已记录的流量的 .dast.config 文件,方法是发送以下 REST API 请求:Traffic。这是 ZIP 文件,其中包含一个或多个 .har(HTTP 存档)文件。下载此文件时,会从 AppScan 代理服务器删除数据。
  5. 您可以借助 ASE REST API 使用 .dast.config 文件来更新现有作业的“浏览”数据。请参阅以下文档:https://%3Case_server%3E:9443/ase/api/pages/apidocs.html。有关更多详细信息,请参阅 代理服务器 API 命令 部分。

代理服务器 API 命令

代理服务器启动后,您可以启动记录代理实例,并将流量发送到应用程序。

文档

要在 Swagger 中查看完整 REST API 文档,请在浏览器中输入:http(s)://<server>:<port>

所有命令都指向如下所示的端点:

http(s)://[server]:[port]/automation/

server = 安装了代理服务器的计算机的 IP 地址 (缺省为 localhost)

port = 代理服务器侦听的端口

"StartProxy"

启动在指定端口上侦听的代理。
  • URL:http://[server]:[port]/automation/StartProxy/<recordingPort>
  • 请求类型:POST 或 GET(如果使用 chainedProxy、proxyCertificate 和 clientCertificate,则请求为 POST;否则,请求为 GET)

"StopProxy"

停止正在指定端口上进行侦听的记录代理。
  • URL:http://[server]:[port]/automation/StopProxy/<recordingPort>
  • 请求类型:GET
注: 将端口设置为 0 不会停止所有打开的代理服务器。使用 StopAllProxies 执行此项操作。

"StopAllProxies"

停止所有正在运行的记录代理。此命令将停止所有端口上的所有记录代理,包括其他用户启动的记录代理。

  • URL:http://[server]:[port]/automation/StopAllProxies
  • 请求类型:POST

"EncryptDastConfig"

上载 DAST.CONFIG 文件以供加密。
  • URL:http://[server]:[port]/automation/EncryptDastConfig
  • 请求类型:POST

"DownloadEncryptedDast"

下载已使用 EncryptDastConfig API 上载的加密 .dast.config 文件。
注: 下载此文件后,将从代理服务器中删除已加密和未加密的 .dast.config 文件。
  • URL:http://[server]:[port]/automation/DownloadEncryptedDastConfig/<uuid>
  • 请求类型:GET

"Traffic"

从由其端口标识为 .dast.config 文件的记录代理下载记录的数据。
  • URL:http://[server]:[port]/automation/Traffic/<recordingPort>
  • 请求类型:GET

"Certificate"

下载由记录代理使用的自签名根证书认证中心作为 PEM 文件。
  • URL:http://[server]:[port]/automation/Certificate
  • 请求类型:GET

更新 AppScan 代理服务器

在删除 AppScan 代理服务器并移至更新的版本前,请确保将您可能已修改的任何配置文件复制到新文件夹中。

如果已将代理服务器安装为一项服务,则在更新前必须卸载该服务(请参阅 其他服务命令),然后重新安装该服务。