网络安全应用安全CLI漏洞扫描【免费下载链接】testssl.shTesting TLS/SSL encryption anywhere on any port项目地址https://gitcode.com/gh_mirrors/te/testssl.sh点击查看免费下载导读本文以仓库根目录下的 Dockerfile.md 为骨架结合 Dockerfile、Dockerfile.alpine 与 .dockerignore 的源码细节系统讲解 testssl.sh 官方容器镜像的两种用法直接拉取官方镜像运行 TLS/SSL 检测以及基于 openSUSE Leap / Alpine 两种基础镜像自行构建。读完本文你将掌握容器内输出文件的落盘与权限处理、镜像标签选择、本地与远程两种构建方式以及镜像内部的多阶段构建原理可直接把这些命令用于自己的扫描与 CI 场景。一、为什么用容器运行 testssl.shtestssl.sh 是一个纯 bash 编写的 TLS/SSL 检测工具按 Readme.md 的描述它本身依赖极少、无需安装任何东西clone 下来即可运行。但在以下场景中容器化是更优选择不想在宿主机上保留源码目录或安装依赖需要在 CI/CD 流水线里做一次性、可复用的 TLS 基线检测需要在不同平台上获得一致的 OpenSSL 版本与检测行为。官方镜像的入口ENTRYPOINT已经直接设置为testssl.sh因此使用体验和直接执行命令别无二致。二、快速开始一条命令完成 TLS 检测最简单的方式是直接拉取官方镜像运行把testssl.sh的命令行参数追加在镜像名之后docker run --rm -it ghcr.io/testssl/testssl.sh:3.2 github.com几点说明镜像的 ENTRYPOINT 已设为testssl.sh所以上面命令等价于在容器内执行testssl.sh github.com若不带任何参数容器默认执行testssl.sh --help对应 Dockerfile 与 Dockerfile.alpine 中的CMD [--help]--rm让容器退出后自动清理-it提供交互式终端以便实时查看扫描输出。三、输出文件与数据导出卷挂载实战3.1 输出文件默认落在容器内需要特别留意--log、--html、--json、--csv等所有输出文件默认生成在容器内部的文件系统里容器一旦删除数据也随之消失。从 testssl.sh 的源码可以看到默认命名规则统一为${NODE}-p${port}${YYYYMMDD-HHMM}.log同理还有.html、.json、.csv即主机名-端口-日期时间格式。3.2 用 bind mount --workdir 把结果写到宿主机官方推荐的做法是挂载宿主机目录为卷并设置容器的--workdir这样输出参数可以直接使用相对路径# Writes the HTML output to the host path: /tmp/example.com_p443-date-time.html docker run --rm -it -v /tmp:/data --workdir /data ghcr.io/testssl/testssl.sh:3.2 --htmlfile ./ example.com拆解这条命令参数作用-v /tmp:/data将宿主机/tmp挂载为容器内/data卷--workdir /data将容器工作目录设为/data相对路径的落点--htmlfile ./输出目录参数-oH的等价长选项.即当前工作目录同样的套路可套用到--logfile-oL、--jsonfile-oj、--csvfile-oC等所有输出参数上。3.3 文件所有权与权限陷阱容器内以非 root 用户testsslUID/GID 均为1000运行因此写入卷的文件属主是1000:1000权限为644宿主机挂载目录必须允许1000这个 UID/GID或对应组写入否则会报权限错误如果不想处理卷权限官方也给出了替代方案不挂卷容器退出后用docker cp把文件拷出来。四、镜像来源与可用标签官方镜像同时发布到两个容器仓库DockerHubdrwetter/testssl.shGHCRGitHub Container Registryghcr.io/testssl/testssl.sh当前支持的标签为3.2对应 3.2 稳定版latest跟随最新发布按 Readme.md 的说明GHCR 支持更多平台linux/amd64、linux/386、linux/arm64、linux/arm/v7、linux/arm/v6、linux/ppc64le在有跨平台拉取需求时优先选用 GHCR 地址。五、本地构建git clone docker build如果需要自己构建镜像例如出于供应链审计、离线部署或自定义镜像内容的考虑标准流程是 clone 源码后在仓库根目录执行构建mkdir /tmp/testssl cd /tmp/testssl git clone --branch 3.2 --depth 1 https://github.com/testssl/testssl.sh . docker build --tag localhost/testssl.sh:3.2 .给镜像打上本地 tag示例中的localhost/testssl.sh:3.2便于后续引用。5.1 两种官方基础镜像的选择构建时支持两种基础镜像它们在 Dockerfile 与 Dockerfile.alpine 中分别实现变体基础镜像libc特点默认openSUSE Leapglibcglibc性能更快约 54MB本地构建AlpineAlpinemuslmusl体积约小一半约 27MB本地构建平台支持更广性能略慢官方说明 Alpine 变体的体积大约比 Leap 变体小 30MB代价是略微的性能下降当需要更广的平台支持或对镜像体积敏感如边缘设备、嵌入式环境时选择 Alpine。六、远程构建一条命令从 Git 仓库直接构建6.1 远程构建上下文不必先 clone可以直接用 Git 仓库地址作为构建上下文docker build --tag localhost/testssl.sh:3.2 https://github.com/testssl/testssl.sh.git#3.2#3.2指定要检出的分支或 tag。需要知晓的代价是远程构建上下文不支持.dockerignore无法过滤多余文件因此产物镜像会比本地构建略大。6.2 远程构建 Alpine 变体构建 Alpine 版本时额外用--file指定远程的Dockerfile.alpinedocker build \ --tag localhost/testssl.sh:3.2-alpine \ --file https://raw.githubusercontent.com/testssl/testssl.sh/3.2/Dockerfile.alpine \ https://github.com/testssl/testssl.sh.git#3.2七、镜像内部原理从 Dockerfile 源码看实现7.1 openSUSE Leap 变体的多阶段构建Dockerfile 采用三阶段结构builder阶段基于opensuse/leap:15.6用zypper将运行所需包安装到自定义的${INSTALL_ROOT}根目录包列表为bash procps grep gawk sed coreutils busybox ldns libidn2-0 socat openssl curl。构建时还会移除openh264与non-oss仓库以缩短同步时间并在最后清理/usr/share/{licenses,man,locale,doc,help,info}、termcap和 RPM 数据库回收约 13MiB 空间。base-leap阶段FROM scratch之上把 builder 阶段安装好的根文件系统整体COPY进来并完成三项关键配置为busybox手工创建tar、hexdump、xxd三个命令的符号链接Leap 的 busybox 包不支持busybox --install -s手工向/etc/passwd、/etc/group、/etc/shadow追加条目创建非 root 用户testsslUID/GID1000等价于useradd --uid 1000 --user-group --create-home --shell /bin/bash testssl将/home/testssl/testssl.sh符号链接到/usr/local/bin/testssl.sh使它成为 PATH 中的命令。最终阶段二选一默认取最后一个dist-localdist-git通过ADD从远程 Git 仓库克隆项目文件到/home/testssl产物约62MB无法用.dockerignore过滤内容dist-local用COPY把本地构建上下文复制到/home/testssl产物约54MB可享受.dockerignore过滤。最后统一设置USER testssl、ENTRYPOINT [testssl.sh]、CMD [--help]。7.2 Alpine 变体的差异Dockerfile.alpine 结构类似但更精简基于alpine:3.21apk add安装bash procps drill coreutils libidn curl socat openssl xxd用drill提供 DNS 查询能力同样手工创建testssl用户与命令符号链接最终镜像体积为dist-git35MB、dist-local27MB。7.3 .dockerignore 与构建上下文裁剪.dockerignore 的规则解释了两种最终阶段的大小差异# Exclude everything from the Docker build context: * # Except for this content: !bin/ !etc/ !testssl.sh # But additionally exclude this nested content: bin/openssl.Darwin.* bin/openssl.FreeBSD.*即本地构建时只把bin/、etc/和主脚本testssl.sh送入构建上下文并排除 macOS/FreeBSD 平台的 OpenSSL 二进制从而大幅缩小上下文与镜像体积。这同时印证了远程构建镜像更大的原因——远程上下文不受这些规则约束。八、实践建议与注意事项版本选择生产环境建议锁定3.2标签而非latest保证行为可复现数据落盘凡是需要保留的--log/--html/--json/--csv结果务必配合-v卷挂载 --workdir使用或事后用docker cp取出权限规划挂载目录需提前放开1000:1000的写权限或改用docker cp规避镜像体积对体积敏感时选 Alpine 变体对扫描性能敏感时选 openSUSE Leap 变体审计与离线可结合 Readme.md 中的clone 即用模式把镜像构建纳入自己的版本管理流水线实现完全可控的供应链。综合来看官方容器镜像把 testssl.sh 变成了一个即插即用的TLS 扫描命令无论是单次交互扫描还是自动化流水线都可以围绕上文给出的卷挂载、构建与标签策略快速落地。赞分享网络安全应用安全CLI漏洞扫描【免费下载链接】testssl.shTesting TLS/SSL encryption anywhere on any port项目地址https://gitcode.com/gh_mirrors/te/testssl.sh点击查看免费下载相关推荐Apache Pulsar Docker 镜像实战官方镜像体系、非 root 安全运行与自定义镜像构建Apache Pulsar Docker 镜像实战官方镜像体系、非 root 安全运行与自定义镜像构建 Apache Pulsar 社区在每个官方版本发布时都消息队列后端流处理MXNet Docker 镜像使用与构建指南从官方预编译镜像到自定义构建MXNet Docker 镜像使用与构建指南从官方预编译镜像到自定义构建 本篇技术指南围绕 MXNet 官方仓库中的 Docker 支撑体系展开系统讲解如何深度学习人工智能机器学习分布式训练Glances Docker 镜像构建、运行与安全扫描实战指南Glances Docker 镜像构建、运行与安全扫描实战指南 Glances 是一个跨平台GNU/Linux、BSD、macOS、Windows的系统监控指标监控监控大盘CLI告警MCP 服务上一篇System Informer 系统资源监控实战指南三步编译出自己的系统X光机下一篇Cookiecutter Data Science与CI/CD集成自动化测试与部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
