使用 HCL AppScan Traffic Recorder 在 AppScan® Enterprise 中测试自动化
您可以借助 AppScan 流量记录器在 AppScan Enterprise (ASE) 作业中记录流量以用作探索数据。AppScan 流量记录器是用于管理流量记录器实例的系统。可按需创建流量记录器实例,以记录稍后将用于 DAST 扫描的流量。本主题介绍如何设置和使用 Traffic Recorder。
概述
- 使用 AppScan 流量记录器,可以自动启动一个流量记录器实例。然后,从自动框架到 Web 应用程序的请求将在发送时由此流量记录器进行记录。流量以 HAR 格式保存在 .dast.config 文件中,您稍后可以上传该文件以供 AppScan Enterprise (ASE) 用作扫描的探索数据。
- 您还可以通过 Traffic Recorder 手动记录流量,以创建 .dast.config 文件。
- 您也可以直接将自己的 HAR 文件上载到 ASE,而不使用流量记录器。
此图描述了 AppScan Enterprise 的自动扫描流程®。
典型工作流程
安装 AppScan 流量记录器
先决条件:您的计算机上必须安装当前版本的 Node.js(v16 或更高版本的 LTS 版本)。如果您的服务符合 FIPS,则必须使用符合 FIPS 的 Node.js 服务器。
- Windows:将 TrafficRecorder.Windows.zip 解压缩到计算机上的文件夹中。
Linux:解压缩 TrafficRecorder.Linux.zip
- 要覆盖运行 Traffic Recorder 的默认端口: 在 Settings.json 中配置端口设置。
- 确保 app.js 和内部 java 文件:/java/bin/java 具有“作为可执行文件运行”权限。
配置 AppScan 流量记录器
符合 FIPS 的模式
- 在 Traffic Recorder 的根文件夹中找到文件 Settings.json,并在文本编辑器中将其打开。
- 找到设置 requireFips 并将其值从 false 更改为 true。
- 保存文件。
流量记录器连接
- 在 Settings.json 中配置运行 Traffic Recorder 的默认端口。
- 配置与流量记录器的安全 (SSL) 连接。您可以使用您自己的证书(方法 A)或自签名证书(方法 B)来执行此操作。
方法 A:在
Settings.json
中配置您自己的 PEM 或 PKCS12 证书。PEM:
PEM 证书需要两个文件路径(private.key 和certificate.pem)。- 将文件路径插入到 Settings.json 的 PEM 部分。注: “\”字符需要转义,例如:“C:\\Users\\admin\\private.key”
PKCS12:
您必须根据需要对文件路径和密码中的字符进行转义,例如 abc!”123 等密码将变为 abc!\”123(” 符号已转义)。- 在命令行中,运行:
.\Java\bin\java.exe -jar .\DastProxy.jar -sc "C:\Path\to\certificate.pfx"
- 出现提示时,输入证书的密码并按 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 不包含在内,也不需要,除非是为了创建自签名证书。
- 使用 OpenSSL 命令创建密钥和 pem 文件:
openssl req -new -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out certificate.pem
- 将文件路径插入到 Settings.json 的 PEM 部分。注: “\”字符需要转义,例如:“C:\\Users\\admin\\private.key”。
选项 B:使用 Java keytool
对于 NodeJS 17 和更高版本,由于 keytool 限制,您必须使用
“--openssl-legacy-provider”
节点标志,请参阅https://nodejs.org/api/cli.html#--openssl-legacy-provider- 在命令行中,打开流量记录器根文件夹。
- 使用以下命令创建 PKCS12 证书文件:
.\Java\bin\keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore-new.p12 -storetype PKCS12 -validity 365 -keysize 2048
- 填写证书详细信息并使用密码保护它,下一步将需要该密码。
- 使用以下命令在 HCL AppScan Traffic Recorder 中使用生成的证书:
.\Java\bin\java.exe -jar .\DastProxy.jar -sc "keystore-new.p12"
- 将文件路径插入到 Settings.json 的 PEM 部分。
根证书
如果您测试的应用程序使用的是 SSL (HTTPS),则 AppScan 流量记录器必须作为中间人来记录交流。为此,它必须具有根证书,以使用该证书对其与应用程序的通信进行签名。
- 在您的机器上安装 AppScan 流量记录器生成的证书:
- 使用 REST API 下载由 AppScan 流量记录器使用的自签名根认证中心作为 PEM 文件。
- 在用于“浏览”的浏览器上安装证书,或在需要的位置(取决于流量的来源)进行安装。
- 将您自己的根证书导入 AppScan 流量记录器。受支持的证书格式为 PKCS12(.P12、.PFX)、JKS:
- 打开命令行窗口,导航到流量记录器机器上的安装文件夹。
- 运行以下命令:
.\Java\bin\java -jar DastProxy.jar -irc [path to certificate file] -ircp [password]
注: 要查看完整的命令用法,请运行 .\Java\bin\java -jar DastProxy.jar 命令。重要说明:由于证书将保存在 Traffic Recorder 上,因此建议您使用专用测试证书。
- 在 StartProxy 命令中提供您自己的修订服务器证书(而不是根证书)。
设置不活动超时
如果在使用后未使用关闭命令关闭流量记录器实例,则该流量记录器实例将保持打开状态并在端口上侦听。如果流量记录器实例处于闲置状态达到预定义的时间,则会自动关闭。
Traffic Recorder 实例的默认不活动超时为 60 分钟。通过更改安装文件夹中保存的 Settings.json 文件中的 inactivityTimeoutInMinutes 的值,可以更改此值。
流量加密
默认情况下,流量 (.dast.config) 文件未加密。要将服务器配置为加密所有流量,请将安装文件夹中的 Settings.json 文件中的 "encryptDastConfig" 值更改为 "true"。
链式代理
如果您需要定义多个链式代理或代理的例外,请使用安装文件夹中的链式代理规则文件 (proxy.chain)。文件包含使用说明。
启动/停止流量记录器
您只需启动流量记录器,或将其作为一项服务运行(如下)。请注意,不能并行执行这两种操作。
- 运行命令:node app.js [port]
其中,*port = Traffic Recorder 侦听 REST API 请求的端口。
- 如果启动 Traffic Recorder 时未定义端口,则使用在 Settings.json 文件中设置的端口;如果未定义任何端口,则使用端口 8383。
- 无需停止流量记录器。您可以任其永久运行。
作为 Windows 服务启动
要启动此服务,请运行以下命令:
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 服务启动
- 在 systemd 目录(通常为:/etc/systemd/system)下创建新文件。例如,sudo vim /etc/systemd/system/TrafficRecorder.service。文件内容:
[Unit]
Description=Appscan TrafficRecorder
After=multi-user.target[Service]
ExecStart=[path to node here] [path to app.js here]Restart=always
RestartSec=10StandardOutput=syslogStandardError=syslog
SyslogIdentifier=TrafficRecorder[Install]
WantedBy=multi-user.target
ExecStart 示例:ExecStart= node /home/admin/Documents/TrafficRecorder.Linux.1.2.0/app.js
- 使用以下命令重新加载 systemd 文件:sudo systemctl daemon-reload
- 使用以下命令启动服务:sudo systemctl start TrafficRecorder.service
- 您可以使用以下命令检查状态:sudo systemctl status TrafficRecorder.service注: 状态应显示为“Active: active (running)”
- 使用以下命令启用服务:sudo systemctl enable TrafficRecorder.service
停止 Linux 服务
- 使用以下命令停止服务:sudo systemctl stop TrafficRecorder.service
- 使用以下命令禁用服务:sudo systemctl disable TrafficRecorder.service
使用流量记录器
流量记录器启动后,您可以启动新的流量记录器实例,以记录您的应用程序的流量。
- 要启动 Traffic Recorder 实例,请使用 REST API 请求:StartProxy
- 通过已定义的流量记录器端口将流量发送到要测试的应用程序。
- 完成后,发送 REST API 请求:StopProxy。
- 下载包含所记录流量的 .dast.config 文件,方法是发送 REST API 请求:Traffic。该文件是一个 ZIP 文件,包含一个或多个 .har(HTTP 存档)文件。下载此文件时,会从 AppScan 流量记录器删除数据。
- 您可以借助 ASE REST API 使用 .dast.config 文件来更新现有作业的“浏览”数据。请参阅文档链接:https://<domain>:9443/ase/api/pages/apidocs.html。有关详细信息,请参阅 Traffic Recorder API 命令部分。
流量记录器 API 命令
流量记录器启动后,您可以启动流量记录器实例,并将流量发送到应用程序。
文档
要在 Swagger 中查看完整的 REST API 文档,请在浏览器中键入:https://<server>:<port>
所有命令都指向如下所示的端点:
https://[server]:[port]/automation/
server = 安装 Traffic Recorder 的计算机的 IP 地址(默认为 localhost)
port = Traffic Recorder 侦听的端口
"StartProxy"
- URL:https://[server]:[port]/automation/StartProxy/<recordingPort>
- 请求类型:POST 或 GET(如果使用 chainedProxy、proxyCertificate 和 clientCertificate,则请求是 POST;否则为 GET)
"StopProxy"
- URL:https://[server]:[port]/automation/StopProxy/<recordingPort>
- 请求类型:GET
"StopAllProxies"
停止所有正在运行的流量记录器实例。此命令将停止所有端口上的所有流量记录器实例,包括其他用户启动的流量记录器实例。
- URL:https://[server]:[port]/automation/StopAllProxies
- 请求类型:POST
"EncryptDastConfig"
- URL:https://[server]:[port]/automation/EncryptDastConfig
- 请求类型:POST
"DownloadEncryptedDast"
- URL:https://[server]:[port]/automation/DownloadEncryptedDastConfig/<uuid>
- 请求类型:GET
"Traffic"
- URL:https://[server]:[port]/automation/Traffic/<recordingPort>
- 请求类型:GET
"Certificate"
- URL:https://[server]:[port]/automation/Certificate
- 请求类型:GET