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