在 AppScan® Enterprise 中使用 AppScan 流量记录器实现测试自动化

您可以借助 HCL AppScan 流量记录器记录流量,用作 AppScan Enterprise (ASE) 作业中的探索数据。HCL AppScan Traffic Recorder 是一个用于管理流量记录器实例的系统。可按需创建流量记录器实例,以记录稍后将用于 DAST 扫描的流量。本主题介绍如何设置和使用流量记录器。

概述

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

此图描绘了使用 AppScan Enterprise 的自动扫描流程®。


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

典型工作流程

  1. 安装流量记录器
  2. 配置流量记录器
  3. 启动流量记录器
  4. 使用流量记录器
Note:
此工作流程的演示脚本 ProxyServerDemoScript.py 可在 AppScan 安装文件夹中找到。

安装 HCL AppScan 流量记录器

先决条件:您必须在计算机上安装 Node.js 的当前版本(v16 或更高版本的 LTS)。如果您的服务符合 FIPS,则必须使用符合 FIPS 的 Node.js 服务器。

如果您使用 OpenSSL FIPS 提供程序,请更新 OpenSSL FIPS 配置:

  1. 找到随流量记录器提供的 nodejs.cnf 文件。
  2. 更新包含路径,使其指向您在安装 OpenSSL FIPS 提供程序时所使用的 openssl fipsinstall 命令的输出。
  3. 要将流量记录器作为进程运行,请使用 nodefips <filename>。当您运行 Node.js 时,这将自动应用 nodejs.cnf 配置。

    例如:nodefips app.js

要安装流量记录器,请执行以下操作:

  1. 下载流量记录器文件。您可以从 https://<HOST_NAME>/ase/downloads/TrafficRecorder.zip 下载它,或者在本地访问 C:\Program Files (x86)\HCL\AppScan Enterprise\WebApp\downloads\TrafficRecorder.zip。
  2. 在 Windows 上,请将 TrafficRecorder.zip 解压到计算机上的某个文件夹中。

    在 Linux 上,请解压 TrafficRecorder.Linux.zip。

  3. 要覆盖用于运行流量记录器的缺省端口,请在 Settings.json 中配置端口设置。
  4. 在 Linux 上,请确保 app.js 和内部 Java 文件 (/java/bin/java) 具有可执行权限。

配置 HCL AppScan 流量记录器

进行任何配置更改后,必须重新启动服务器。
Note:
升级时,如果已在 Settings.json 中设置了 PKCS12 证书,您需要再次设置该证书。

FIPS 合规模式

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

流量记录器连接

  1. 在 Settings.json 中配置用于运行流量记录器的缺省端口。
  2. 配置与流量记录器的安全 (SSL) 连接。您可以使用您自己的证书(方法 A)或自签名证书(方法 B)来执行此操作。

    方法 A:在 Settings.json 中配置您自己的 PEM 或 PKCS12 证书。

    PEM:

    PEM 证书需要两个文件路径(分别指向 private.key 和 certificate.pem)。
    • 将文件路径填入 Settings.json 的 PEM 部分。
      Note:
      ‘\’ 字符需要转义,例如:"C:\\Users\\admin\\private.key"

    PKCS12:

    您必须根据需要对文件路径和密码中的字符进行转义,例如,密码 abc!”123 将变为 abc!\”123(” 符号被转义)。
    1. 在命令行中,运行:

      .\Java\bin\java.exe -jar .\DastProxy.jar -sc "C:\Path\to\certificate.pfx"

    2. 出现提示时,请输入证书的密码,然后按 Enter。

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

    方法 B:如果您没有证书,那么必须创建并使用自签名证书。请注意,此方法不太安全。

    选项 A:使用 OpenSSL

    除创建自签名证书外,不附带 OpenSSL,也不需要使用它。

    1. 使用 OpenSSL 命令创建密钥和 PEM 文件:openssl req -new -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out certificate.pem
    2. 将文件路径插入到 Settings.json 的 PEM 部分。
      Note:
      ‘\’ 字符需要转义,例如:"C:\\Users\\admin\\private.key"。

    选项 B:使用 Java keytool

    对于 NodeJS 17 及更高版本,由于 keytool 的限制,您必须使用“--openssl-legacy-provider”Node 标志,请参阅https://nodejs.org/api/cli.html#--openssl-legacy-provider

    1. 在命令行中,打开流量记录器根文件夹。
    2. 使用以下命令创建 PKCS12 证书文件:.\Java\bin\keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore-new.p12 -storetype PKCS12 -validity 365 -keysize 2048
    3. 填写证书详细信息并使用密码进行保护,下一步将需要该密码。
    4. 使用以下命令在 HCL AppScan Traffic Recorder 中使用生成的证书:.\Java\bin\java.exe -jar .\DastProxy.jar -sc "keystore-new.p12"

根证书

如果您正在测试的应用程序使用 SSL (HTTPS),HCL AppScan Traffic Recorder 必须充当中间人来记录流量。为此,它必须具有根证书,以使用该证书对其与应用程序的通信进行签名。

默认情况下,HCL AppScan Traffic Recorder 会生成唯一的根证书,无需用户干预。但是,在浏览应用程序时,您将收到 SSL 警告。可以忽略它们,也可以执行下列其中一项操作:
  1. 在您的计算机上安装由 HCL AppScan Traffic Recorder 生成的证书:
    1. 使用 REST API 将 AppScan 流量记录器使用的自签名根证书颁发机构下载为 PEM 文件。
    2. 将其安装到用于 Explore 的浏览器中,或安装到任何需要的位置(取决于流量来自何处)。
  2. 将您自己的根证书导入到 HCL AppScan Traffic Recorder。受支持的证书格式为 PKCS12(.P12、.PFX)、JKS:
    1. 打开命令行窗口,并导航到 Traffic Recorder 所在计算机上的安装文件夹。
    2. 运行以下命令:

      .\Java\bin\java -jar DastProxy.jar -irc [证书文件路径] -ircp [密码]

      Note:
      要查看完整的命令用法,请运行 .\Java\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 请求的端口。

Note:
  • 如果在启动流量记录器时未定义该端口,则会使用 Settings.json 文件中设置的端口,如果该文件中未定义端口,则会使用端口 8383。
  • 无需停止流量记录器。您可以任其永久运行。

作为 Windows 服务启动

使用 Service 文件夹中的 service.js 可执行文件,可将流量记录器作为 Windows 服务运行。服务使用本地系统权限。
Note:
所有服务命令都必须以管理员权限运行(以管理员身份运行)。

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

node service.js --install

node service.js --start

其他服务命令

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

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

停止 Windows 服务

要使用“Service”文件夹中的 service.js 可执行文件来停止流量记录器 Windows 服务,请运行以下命令:

node service.js --uninstall

使用 systemd 作为 Linux 服务启动

  1. 在 systemd 目录(通常为:/etc/systemd/system)下创建新文件。例如,sudo vim /etc/systemd/system/TrafficRecorder.service。

    文件内容:

    [Unit]

    Description=Appscan TrafficRecorder

    After=multi-user.target

    [Service]

    ExecStart=[此处为 node 路径] [此处为 app.js 路径]

    Restart=always

    RestartSec=10StandardOutput=syslog

    StandardError=syslog

    SyslogIdentifier=TrafficRecorder

    [Install]

    WantedBy=multi-user.target

    ExecStart 的示例:ExecStart= node /home/admin/Documents/TrafficRecorder.Linux.1.2.0/app.js

  2. 使用以下命令重新加载 systemd 文件:sudo systemctl daemon-reload
  3. 使用以下命令启动服务:sudo systemctl start TrafficRecorder.service
  4. 您可以使用以下命令检查状态:sudo systemctl status TrafficRecorder.service
    Note:
    状态应显示为“Active: active (running)”
  5. 使用以下命令启用服务:sudo systemctl enable TrafficRecorder.service

停止 Linux 服务

  1. 使用以下命令停止服务:sudo systemctl stop TrafficRecorder.service
  2. 使用以下命令禁用服务:sudo systemctl disable TrafficRecorder.service

使用流量记录器

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

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

流量记录器 API 命令

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

文档

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

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

https://[server]:[port]/automation/

server = 安装了流量记录器的机器的 IP 地址 (缺省为 localhost)

port = 流量记录器在其上进行侦听的端口

"StartProxy"

启动在指定端口上进行侦听的流量记录器实例。
  • URL:https://[server]:[port]/automation/StartProxy/<recordingPort>
  • 请求类型:POST 或 GET(如果使用 chainedProxy、proxyCertificate 和 clientCertificate,则请求为 POST;否则,请求为 GET)

"StopProxy"

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

"StopAllProxies"

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

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

"EncryptDastConfig"

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

"DownloadEncryptedDast"

下载已使用 EncryptDastConfig API 上载的加密 .dast.config 文件。
Note:
下载此文件后,将从流量记录器中删除已加密和未加密的 .dast.config 文件。
  • URL: https://[server]:[port]/automation/DownloadEncryptedDastConfig/<uuid>
  • 请求类型:GET

"Traffic"

从以其端口标识的流量记录器下载记录的数据作为 .dast.config 文件。
  • URL: https://[server]:[port]/automation/Traffic/<recordingPort>
  • 请求类型:GET

"Certificate"

下载流量记录器使用的自签名根证书颁发机构,格式为 PEM 文件。
  • URL: https://[server]:[port]/automation/Certificate
  • 请求类型:GET