
简介面向安全工程师、开发与测试人员的 Fortify SCA 安装使用手册范本聚焦静态应用安全测试工具的部署与落地内容覆盖产品特性、安装说明、扫描操作、结果分析和故障修复等环节适合作为企业安全测试规范或团队内部培训文档的编写蓝本。资源包共 1 个文件类型为 DOCX压缩后约 2MB编辑友好可依据实际环境直接增删章节并复用。目前已有 52 人学习。文档目录细致列出 Windows、Linux、UNIX 三种系统的安装流程、Eclipse 插件配置方法、扫描指南与结果解读并在故障修复部分给出日志文件调试、转换失败信息定位和 Fortify SCA 配置选项调整思路针对 C/C 工程构建时常见的转换失败还提示了修改配置文件的具体方向。整体结构清晰能帮助读者快速梳理安装到落地的完整路径减少文档整理成本是安全团队建立静态扫描规范时可直接参考的模板。1. 给 Fortify SCA 装机写一份能复现的手册范本拆解与落地Fortify SCA静态代码安全分析工具这类工具装一次不难难的是把“装一次”变成“谁都能照着重现一次”。我手头这份《Fortify-SCA 安装使用手册范本.docx》就是用来干这个的一份把安装步骤、参数表、核对清单、FAQ 全部留好空位的文档模板拿到手填上自己的路径和版本就能交付。它解决的问题很具体——团队要上安全扫描却缺一份既能让新人照着操作、又能让老手快速核对边界的手册。适合安全测试岗、研发团队的安全责任人以及准备把 SCA 塞进构建流程的运维和 CI 岗。所以这篇笔记不只讲装 Fortify SCA更讲怎么把一份 docx 范本变成你自己团队的资产。2. 为什么需要一份“带空位的安装手册”模板思维与文档工程2.1 安装手册最容易踩的文档坑版本、路径、参数三处空白我在一支做应用安全测试的团队里待过几年移交过很多次安装文档。最常见的翻车模板是这样的文档开头写得像全都有跟着走三步就断在“输入以下命令”——因为命令里写的是别人机器上的绝对路径或者是编造出来的伪命令。下面这个片段就是典型的“看着很全实际没法用”# 看着很全的伪命令 cd {安装目录} ./install.sh这段命令有几个致命问题安装目录没有实际值没有写明需要在什么用户权限下执行没有给出执行成功后的预期输出。真正照着做的人会在第二步停下来然后开始猜。安装类手册的痛点从来不是“写得太少”而是“变量没标出来”。拆开这份范本会发现它的出发点就是怼着这个问题来的所有会因机器而变的内容都单独列成“待替换项”包括安装目录、JDK 主版本、许可证路径、扫描目标目录。范本把这些东西统一摆在开头的“环境信息记录表”里让读文档的人先填一张表再动手。这种设计我见过很多次但真正做到位的文档很少。我用下面这个结构说明范本里那类“环境信息记录表”该怎么建。这份表不是给写文档的人看的是给执行安装的人看的所以每一行都要有默认值、示例和说明。信息项示例值说明操作系统CentOS 7.9 / Windows Server 2019影响路径写法与安装包选择JDK 主版本与位数OpenJDK 1.8.0_29264 位Fortify SCA 的本地库对 JDK 位数敏感安装目录/opt/fortify严禁带中文和空格许可证文件路径/opt/fortify/license.txt安装后要能被扫描进程读到扫描目标仓库地址ssh://git…/repo.git只是记录来源不参与安装执行安装的用户fortify 账号不需要 root但要有写权限表格填完后续所有命令里的占位符才能替换成真实值。这份范本里最值钱的设计就是把这些字段做成了一张开篇表而不是把变量藏在正文里。实际用起来新同事拿到手先填表填完基本就成功了一半。三处最常被填错的地方范本里也都给了提示版本、路径、参数。版本指 JDK 版本Java 8 和 Java 17 对应的 SCA 主版本可能不兼容路径指安装目录与扫描工作区中文目录和带空格的目录是崩溃高发点参数指扫描命令里的-source 1.8、-buildID这类值必须与当前仓库实际使用的编译环境匹配。把这三处统一交给“环境信息记录表”管理是范本最核心的思路。2.2 范本的结构设计章节、表格、命令为什么按这个顺序排范本从结构上带着你走。我把它拆开看主体是六个部分排布顺序不是拍脑袋定的每一部分都服务一个文档目标。章节承载的信息为什么排在这环境信息记录表JDK、路径、许可证、系统信息所有命令的输入源必须先定义安装步骤解压、执行安装、验证目录结构让环境从“没有”到“有”初始配置环境变量、许可证导入、规则包确认让工具能被命令行正确调用扫描流程翻译、扫描、报告三步命令验证安装是否真正成功常见问题按现象组织的排错表新人是靠“现象”检索解决问题不是靠原理验收与回退验收清单、卸载与旧版本切换交付文档必须有退出机制这个顺序背后有一个原则先写结果再写过程。环境信息记录表就是“结果”后面每一章的每个命令都回头引用它安装步骤里每大步都带“预期输出”执行到什么程度算成功一眼就能判断。范本里“命令与预期输出成对出现”的做法是我最推荐抄走的一点。很多手册只写命令不写输出新人跑完一条命令不知道对不对只能继续往下跑直到出错才回头排查。范本里每一个命令下面都预留了一个框写着类似“成功标志出现 Fortify Static Code Analyzer 版本号”这类验收性描述。把范本变成自己项目手册的步骤我一般走四条另存一份标题改成“项目名 Fortify SCA 安装使用手册”。填写开篇的环境信息记录表填完先不往下看。严格按安装步骤执行一遍每跑完一条命令就对照预期输出不一致立刻改文档。把改完的文档交给一个没装过 SCA 的同事让他完全按文档装不许发挥。第四步最容易发现自以为是的问题。命令里缺一个-encoding参数、许可证路径写错一级目录都是在这个环节暴露的。从那以后我每接一个新工具都强制自己先写手册再动工这套流程下来交付的文档基本不会返工。3. 照着范本装机环境检查、JDK 与许可导入3.1 环境检查清单先确认系统、JDK、内存三个前置Fortify SCA 的安装本身不复杂复杂的是装完后跑不起来。绝大多数执行安装的人一上来就解压安装包跳过环境检查然后卡在莫名其妙的报错里。范本把环境检查列成安装步骤的第一步不是走形式是因为这三项影响了后续 80% 的排错方向。# 确认操作系统版本 uname -a cat /etc/os-release # 确认 JDK 主版本SCA 的本地库要求 64 位 JDK java -version # 确认可用内存建议至少 4G扫描大仓库时 8G 起步 free -h逻辑说明uname -a和/etc/os-release用于确认系统架构和发行版x86_64 与 ARM64 的安装包不能混用java -version会输出 JDK 版本和位数注意看输出里有没有 “64-Bit” 字样free -h查看物理内存与 Swap扫描阶段 Fortify SCA 会加载全部源码的中间表示内存不足会直接导致扫描进程被杀掉。参数说明JDK 版本不是越高越好只要范本里写明“推荐 1.8”就老老实实用 1.8不能拿系统默认的 Java 17 硬试。位数上必须与安装包一致32 位 JDK 配 64 位扫描器在加载本地库时大概率报Unable to load native library。硬件配置我给一个通用参照实际以你的仓库规模为准项目最小配置推荐配置CPU2 核4 核以上内存4 GB8 GB 以上磁盘5 GB 剩余独立数据盘剩余 20 GBJDKOpenJDK 864 位OpenJDK 864 位非系统自带这里的每一条都该被写进范本的环境信息记录表里。我在实际交付时还会补一条把java -version的执行结果直接贴在文档里。这样后来的人能确认文档描述的环境和当前机器环境确实一致。3.2 安装与许可导入命令、路径、常见参数说明环境检查通过后进入安装步骤。我以 Linux 下的安装为例Windows 的路径写法不一样但思路相同先解压再执行安装脚本然后验证目录。# 解压安装包到目标目录 tar -xzf Fortify_SCA_*.tar.gz -C /opt/fortify cd /opt/fortify # 执行安装脚本安装包版本不同脚本名会有差异以解压后的实际为准 ./install.sh # 确认安装结果关键目录是否生成 ls -l /opt/fortify/bin /opt/fortify/Core逻辑说明第一步把压缩包解压到安装目录注意-C指定目录要提前创建第二步执行安装脚本这里的具体脚本名每个主版本不一定相同范本里故意写成“以解压后目录为准”避免读者照抄出问题第三步验证目录结构bin目录里放着sourceanalyzer命令行工具Core目录放着核心规则与引擎。参数说明tar -xzf里的z对应 gzip 压缩格式如果安装包是其他格式要去掉z-C指定解压目标路径不能带中文和空格这是常见翻车点。安装完成后环境变量必不可少。范本里一般会给出下面这段我建议直接写到/etc/profile.d/fortify.sh里避免每次开终端都要手动 export。# 写入 /etc/profile.d/fortify.sh export FORTIFY_HOME/opt/fortify export PATH$FORTIFY_HOME/bin:$PATH export JAVA_HOME/opt/jdk1.8.0_292逻辑说明FORTIFY_HOME指向安装根目录后续脚本都要引用PATH加入bin目录让sourceanalyzer命令直接可用JAVA_HOME指向我们环境检查时确认的那个 JDK注意这里不是系统默认 JDK 路径而是写死了版本的具体路径。参数说明JAVA_HOME如果不生效检查是否有权限读取该目录在 Windows 上环境变量通过“系统属性 → 环境变量”图形界面设置效果相同。下一步是许可证导入。Fortify SCA 没有有效许可证扫描命令会直接拒绝执行。常见做法是把许可证文件放到安装目录下的 licensing 目录或者直接用命令行工具导入。# 将许可证文件拷贝到安装目录的 licensing 目录 cp /path/to/fortify.license /opt/fortify/licensing/ # 验证安装输出版本号说明命令行工具可执行 sourceanalyzer -version # 若许可证路径需要显式指定常见做法是在扫描命令里加参数 sourceanalyzer -license /opt/fortify/licensing/fortify.license逻辑说明cp命令把许可证文件放到工具默认读取的位置sourceanalyzer -version是为了确认命令行工具本身可用最后一条-license并不是每个主版本都支持如果执行时报未知参数说明许可证要通过环境变量或配置文件放置以当前版本 release note 为准。参数说明许可证文件路径里的目录名licensing在不同版本可能叫license范本里会提示“目录名以安装后实际目录为准”。如果你执行sourceanalyzer -version显示的不是预期版本说明PATH里还残留了其他版本的 Fortify 工具优先检查which sourceanalyzer指向哪里。许可导入是安装阶段的最后一道闸门。我见过有人在许可证文件还放在下载目录时就急着跑扫描结果报错“许可证无效”实际上只是路径没对上。先确认文件被拷贝到位再验证工具能读取顺序不能反。4. 配置扫描规则与运行首次分析从 GUI 到命令行4.1 创建项目并配置扫描目标扫什么、不扫什么安装完成只说明工具能跑真正决定扫描效果的是规则配置和扫描范围。Fortify SCA 自带一套标准规则包覆盖常见语言漏洞模式但在实际项目里必须手动确认两件事规则包路径是否正确加载、扫描范围是否排除掉生成代码和第三方框架。先用 GUI 方式创建项目并直观确认规则配置这也是范本里推荐新手走的第一步。Audit Workbench 是 Fortify SCA 自带的图形审计工具安装目录的bin下能找到启动脚本。创建项目时选择源码根目录工具会自动识别语言在规则配置界面勾选标准规则包然后保存。扫描范围是配置阶段最需要动脑子的地方。把整个仓库一股脑丢进去扫描时间会成倍增加而且大量漏洞来自第三方依赖和生成代码噪音极大。范本里有一个“扫描范围边界清单”表格我按它整理了一份通用配置建议扫描建议排除src/main/java 等手写业务代码target、build、out 等构建产物目录前端手写 JS/TS 源码node_modules、第三方依赖库配置文件中的敏感信息检测自动生成的 DTO、接口桩代码测试代码可按需开启test 目录默认排除专项安全测试再包含配置完范围还要确认语言引擎。规则包里对不同语言的支持强度不同Java 是支持最成熟的C/C 需要编译环境配合JavaScript 主要是模式匹配。范本里会要求你在“环境信息记录表”里登记项目主要语言原因就在这里语言决定你用哪一套扫描参数。4.2 命令行扫描三件套翻译、扫描、生成报告GUI 适合配置调试但日常扫描必须走命令行否则无法自动化。命令行扫描的核心逻辑是三步翻译构建分析模型、扫描执行漏洞匹配、生成报告。我把这套流程叫扫描三件套范本里也是按这个顺序写的。# 1. 翻译把源码和编译产物绑定到同一个构建 ID sourceanalyzer -b myApp -source 1.8 -cp lib/*:target/classes -encoding UTF-8 src/** # 2. 扫描翻译完成后生成 FPR 结果文件 sourceanalyzer -b myApp -scan -format fpr -f output/myApp.fpr # 3. 生成报告从 FPR 结果文件输出 HTML 报告 sourceanalyzer -b myApp -report -format html -f output/myApp.html逻辑说明第一步-b myApp指定构建 ID-source 1.8告诉工具源码使用 Java 8 语法-cp指定类路径这一步会把源码和编译产物关联起来第二步-scan执行真正的漏洞扫描生成 FPR 后缀的结果文件第三步-report读取 FPR 文件输出人类可读的 HTML 报告。参数说明-b后面的构建 ID 是自定义字符串三组命令必须保持一致否则第二步会报“找不到构建结果”-cp里的lib/*:target/classes是 Linux 写法Windows 下分隔符要改成分号-encoding UTF-8是中文注释项目必须带的参数不然扫描结果里会出现乱码src/**表示递归扫描该目录下所有源码文件如果你要扫多个目录继续在后面追加。这里有一个我踩过很多次的细节第二步扫描之前必须先成功执行第一步翻译。很多新手把扫描命令单拎出来跑结果提示找不到构建数据以为是工具装坏了其实只是顺序错了。范本里每一步后面都有预期输出第一步执行完应该出现Translation completed之类的字样没看到就不要进入第二步。4.3 首次扫描后的验收动作看什么、留什么记录扫描完成不代表交付完成。我在首次扫描后至少做三个动作确认报告中问题总数落在合理区间、过滤掉误报或构建噪音、把扫描命令和参数固化到文档里。# 用命令行导读 FPR 文件中的摘要信息 sourceanalyzer -b myApp -scan -format fpr -f output/myApp.fpr -quiet # 查看报告文件是否生成且非空 ls -lh output/myApp.fpr output/myApp.html逻辑说明第一条命令在重跑扫描时加上-quiet减少日志输出便于脚本捕获退出码第二条命令检查产出文件大小FPR 文件太小时大概率扫描范围没覆盖到位。参数说明-quiet只影响控制台输出不影响结果文件内容FPR 是二进制格式不能直接阅读但可以通过 Audit Workbench 打开做人工审计。第一次扫描后我会用 Audit Workbench 打开 FPR 文件随机抽查两条高危漏洞确认工具能正确定位到源码行而不是报出无法回溯的抽象堆栈。这一步不通过说明翻译阶段的-cp类路径配置有问题需要回到 4.2 重新调整。报告中如果出现大量重复堆栈、明显不属于本项目代码的路径优先检查扫描范围的排除列表是否生效。生成代码没排干净、构建产物目录被扫进去是两个最常见的噪音来源。范本在“扫描流程”这一章里留了一个“首次扫描验收记录”表格填的内容包括扫描时间、问题总数、高危数量、误报数量。这个表既是给现任团队看的也是给后来接手的人看的——两个月后有人质疑报告数据时这就是个案底。5. 避坑Fortify SCA 安装使用中我踩过的五个坑5.1 装完执行sourceanalyzer提示 command not found现象安装完成后按手册执行sourceanalyzer -version终端直接回command not found。人还在安装目录里命令却找不到。原因环境变量没生效或者压根没写进 shell 配置文件。终端是新开的/etc/profile.d/fortify.sh没有被重新加载。还有一种可能安装目录里bin这个二级目录不存在安装脚本实际把工具放到了别的路径下而手册里的FORTIFY_HOME是照着旧版本写的。解决先执行ls $FORTIFY_HOME/bin确认路径下确实有sourceanalyzer然后用source /etc/profile重载环境变量再跑which sourceanalyzer看工具实际路径。如果路径不对手动修正 export 语句并重新登录终端。从那以后我每次装完都先跑which sourceanalyzer看到输出指向安装目录才继续下一步。5.2 扫描启动时报Unable to load native library现象执行扫描命令进程还没开始工作就报错提示加载本地库失败伴随UnsatisfiedLinkError或no fortifynative in java.library.path之类的日志。原因JDK 位数不匹配。SCA 安装包自带 64 位本地库但环境变量JAVA_HOME指向了 32 位 JDK或者系统默认 Java 是 32 位。这个坑在 Windows 上最常见因为系统里常常同时装了多个 JDK。解决检查java -version输出里有没有64-Bit没有就换 JDK。把JAVA_HOME硬指向 64 位 JDK 的安装目录不要依赖 PATH 里的隐式解析。范本里环境信息记录表要求写 JDK 位数就是为这个坑准备的。5.3 扫描到一半中断路径含中文目录现象翻译阶段正常扫描阶段跑到 30% 左右进程退出日志里出现乱码路径或者直接报找不到文件。项目代码放在/data/项目A/backend这类带中文的目录里。原因Fortify 某些版本对非 ASCII 路径的支持不完整。虽然 GUI 模式下可能没问题但命令行扫描经过构建 ID 关联后路径编码不一致会导致中间文件无法定位。解决把安装目录和扫描工作区全部改成纯英文路径。仓库源码实在无法移动时在扫描命令里单独映射一个英文工作目录把源码拷贝过去再扫。不要试图调整字符集参数硬扛我试过改-encoding治标不治本。5.4 扫描耗时数小时像是卡死了现象命令执行后 CPU 占用率一直很高但控制台长时间没有新输出几小时后任务还没结束。大仓库、多语言混合项目里尤其明显。原因默认内存上限不够扫描进程一直在做内存交换。另一个常见原因是扫描范围没有排除生成代码工具在反复分析重复文件。这不是死锁是真实计算但效率低到没意义。解决用环境变量把堆内存调大同时缩小扫描范围。范本里推荐的做法是先排除构建产物再考虑加内存。内存不是第一解药排除范围才是。5.5 直接扫描报 “build not found”现象照着扫描三步走把-scan单独执行提示找不到构建数据。明明刚才还跑过翻译怎么一下就不认识了。原因-b后面的构建 ID 不一致或者执行扫描时换了目录构建数据与当前目录对不上。还有一个隐蔽原因第一次翻译之后源码目录结构发生了变动。解决检查三条命令的-b参数是否完全一致再确认当前工作目录与翻译时一致。范本里专门标了“同一构建 ID 同一工作目录”这条提示实际上只要有一次从图形界面创建项目构建 ID 就可能被改掉块级排查时第一件事就是核对这个值。6. 把模板变成团队资产版本记录与持续集成接入6.1 给手册补上“版本记录”与“回退方案”范本在最后附带一张“版本记录表”我建议任何团队接手后第一件事就是把这张表填起来。这张表承载的价值在于SCA 工具升级、规则包更新、扫描参数调整都必须留下痕迹否则三个月后没人说得清报告为什么和之前不同。日期手册版本修改人修改原因影响范围2025-01-15v1.0A同学初始版本全部章节2025-03-02v1.1B同学JDK 8 扫描参数调整扫描流程回退方案同样重要。Fortify 升级后如果出现规则不兼容需要能快速切回旧版本。范本里的回退方案其实就三步备份旧安装目录、恢复环境变量指向、重新导入旧许可证。别小看这个动作没有回退方案的文档在出问题的那一天就是一张废纸。6.2 把 SCA 命令行扫描加进构建机的每日任务文档的价值最终体现在自动化上。我习惯在手册末尾附一段可直接放到构建机上的脚本让 SCA 扫描以定时任务方式跑起来。下面的脚本基于第 4 章的扫描三件套加了失败处理和日志记录#!/usr/bin/env bash set -e export FORTIFY_HOME/opt/fortify export PATH$FORTIFY_HOME/bin:$PATH export JAVA_HOME/opt/jdk1.8.0_292 export SCA_OPTS-Xmx8g cd /data/build/myApp timestamp$(date %Y%m%d_%H%M) sourceanalyzer -b nightly -source 1.8 -cp lib/*:target/classes -encoding UTF-8 src/** sourceanalyzer -b nightly -scan -format fpr -f report/nightly_${timestamp}.fpr sourceanalyzer -b nightly -report -format html -f report/nightly_${timestamp}.html echo SCA scan completed: report/nightly_${timestamp}.html脚本里的set -e保证任意一步失败都会退出不会带着残缺结果继续跑SCA_OPTS设置堆内存上限输出文件带时间戳避免覆盖历史报告。第一次接入时不要直接替换现有构建流程先和日常构建并行跑两周确认扫描结果的稳定性和耗时再决定是否设置为门禁。最后说个我自己的习惯从那以后我每次接一个新工具都强制自己先写手册再动工哪怕只有我一个人看。因为手册写清楚的那一刻工具才真正从“能跑”变成“能交付”。希望帮到你。本文还有配套的精品资源点击获取