testssl.sh配置文件详解:自定义扫描行为的方法

testssl.sh配置文件详解:自定义扫描行为的方法

【免费下载链接】testssl.sh Testing TLS/SSL encryption anywhere on any port 【免费下载链接】testssl.sh 项目地址: https://gitcode.com/gh_mirrors/te/testssl.sh

痛点与解决方案

你是否在使用testssl.sh时遇到扫描结果不符合需求的情况?是否需要针对特定业务场景定制TLS扫描规则?本文将系统讲解testssl.sh配置文件体系,通过15个实战案例演示如何自定义扫描行为,从根本上解决扫描策略僵化问题。

读完本文你将掌握:

  • 三大核心配置文件的工作原理
  • 自定义加密套件优先级排序的方法
  • 客户端模拟测试环境的精准配置
  • 证书信任链验证规则的高级定制
  • 扫描性能与准确性的平衡调优

配置文件体系架构

testssl.sh的配置系统采用模块化设计,主要配置文件位于项目根目录的etc/文件夹下,形成"核心配置+扩展规则"的双层架构。

mermaid

配置文件功能矩阵

文件名主要功能数据格式典型应用场景
openssl.cnfOpenSSL引擎配置INI格式自定义SSL上下文参数
cipher-mapping.txt加密套件映射表空格分隔文本调整套件优先级排序
client-simulation.txt客户端行为模板Bash数组模拟特定浏览器/设备
ca_hashes.txt可信CA指纹库哈希列表证书链验证规则定制
curves.txtECC曲线优先级名称列表椭圆曲线支持配置

核心配置文件详解

openssl.cnf:SSL引擎配置中心

该文件是testssl.sh与OpenSSL引擎交互的核心配置接口,采用标准INI格式,包含多个功能区块。其中对扫描行为影响最大的是[req][ssl_server]区块。

关键配置参数
[req]
default_bits       = 2048        ; 默认密钥长度
distinguished_name = req_distinguished_name
x509_extensions    = v3_ca       ; 默认扩展配置
string_mask        = utf8only    ; 字符串编码限制

[ssl_server]
ssl_protocols = TLSv1.2 TLSv1.3  ; 启用的协议版本
cipher_suite  = HIGH:!aNULL:!MD5 ; 加密套件选择策略
实用配置示例:禁用弱哈希算法

要全局禁用所有MD5和SHA1相关的哈希算法,可修改[req]区块的默认消息摘要算法:

[req]
default_md  = sha256            ; 默认使用SHA-256
[ssl_client]
ssl_cipher  = HIGH:!MD5:!SHA1   ; 禁用MD5和SHA1

cipher-mapping.txt:加密套件定义库

该文件定义了IANA标准加密套件与OpenSSL名称之间的映射关系,同时包含加密强度评级信息。每行代表一个加密套件,包含6个字段:

0x13,0x02 - TLS_AES_256_GCM_SHA384         TLS_AES_256_GCM_SHA384                             TLSv1.3    Kx=any         Au=any     Enc=AESGCM(256)                Mac=AEAD               

字段解析:

  1. 十六进制标识符:用于TLS握手时的套件协商
  2. OpenSSL名称:OpenSSL库使用的套件标识符
  3. IANA标准名称:TLS协议标准名称
  4. 支持的协议版本:如TLSv1.2、TLSv1.3等
  5. 密钥交换算法(Kx):如ECDH、RSA、PSK等
  6. 认证算法(Au):如ECDSA、RSA等
  7. 加密算法(Enc):如AESGCM(256)、ChaCha20等
  8. 消息认证码(Mac):如AEAD、SHA384等
自定义套件优先级

通过调整文件中套件的顺序,可影响testssl.sh的套件优先级评估。例如,将ChaCha20套件移至AES套件之前:

-0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384    TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384              TLSv1.2    Kx=ECDH        Au=RSA     Enc=AESGCM(256)                Mac=AEAD               
+0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305    TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256        TLSv1.2    Kx=ECDH        Au=RSA     Enc=ChaCha20(256)              Mac=AEAD               

client-simulation.txt:客户端行为模拟

该文件定义了各种客户端(浏览器、操作系统、移动设备)的TLS握手行为模板,用于模拟真实-world客户端的连接测试。每个客户端配置包含以下关键参数:

names+=("Android 13/14 (native)")
short+=("android_13_14")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:...")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:...")
ch_sni+=("$SNI")
handshakebytes+=("16030102330100022f0303564593a940b5d751d4cee7d4cd3ffbb68c...")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
alpn+=("http/1.1")
curves+=("x25519:secp256r1:secp384r1")
客户端配置参数详解
参数名含义示例值
names客户端名称"Android 13/14 (native)"
short短标识符"android_13_14"
ch_ciphers密码套件列表"ECDHE-ECDSA-AES128-GCM-SHA256:..."
ciphersuitesTLS 1.3密码套件"TLS_AES_128_GCM_SHA256:..."
ch_sniSNI配置"$SNI"
handshakebytes握手报文模板"16030102330100022f030356..."
protos禁用协议"-no_ssl3 -no_ssl2"
tlsvers启用协议"-tls1_3 -tls1_2"
alpnALPN扩展"http/1.1"
curves椭圆曲线列表"x25519:secp256r1:secp384r1"

高级配置实战

场景一:企业内部加密标准合规检测

某金融机构需要确保所有服务器仅支持FIPS 140-2认可的加密套件,可通过以下步骤配置:

  1. 定制加密套件白名单

创建etc/fips-ciphers.txt文件,定义允许的套件:

TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-CHACHA20-POLY1305
DHE-RSA-AES256-GCM-SHA384
  1. 修改cipher-mapping.txt

使用utils/hexstream2cipher.sh工具生成映射关系:

./utils/hexstream2cipher.sh fips-ciphers.txt >> etc/cipher-mapping.txt
  1. 配置优先级规则

openssl.cnf中设置:

[ssl_client]
cipher_suite = @SECLEVEL=2:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:...
  1. 执行合规扫描
./testssl.sh --cipher-list fips-ciphers.txt --openssl-config etc/openssl.cnf example.com

场景二:模拟老旧客户端兼容性测试

要测试服务器对Android 4.4 (KitKat)设备的兼容性,需精确配置客户端模拟参数:

  1. 查找客户端配置段

client-simulation.txt中找到Android 4.4.2配置:

names+=("Android 4.4.2")
short+=("android_442")
ch_ciphers+=("ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:...")
...
  1. 调整加密套件顺序

将AES-CBC套件提前,适应老旧设备需求:

-ch_ciphers+=("ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:...")
+ch_ciphers+=("ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-SHA:...")
  1. 限制TLS版本
-protos+=("-no_ssl2")
+tlsvers+=("-tls1 -tls1_1")
+protos+=("-no_ssl2 -no_tls1_2 -no_tls1_3")
  1. 执行模拟测试
./testssl.sh --client-simulation android_442 --sneaky example.com

场景三:证书信任链验证规则定制

企业内部CA签发的证书需要被testssl.sh识别为可信,需配置ca_hashes.txt

  1. 提取CA证书哈希
openssl x509 -in internal-ca.crt -noout -fingerprint -sha256 | awk -F= '{print $2}' | tr -d ':' | awk '{print tolower($0) " internal-ca"}' >> etc/ca_hashes.txt
  1. 配置证书验证规则

openssl.cnf中添加:

[ca]
default_ca = custom_ca

[custom_ca]
dir = ./etc/ca
certs = $dir/certs
database = $dir/index.txt
new_certs_dir = $dir/newcerts
certificate = $dir/cacert.pem
serial = $dir/serial
crl_dir = $dir/crl
crl = $dir/crl.pem
  1. 执行信任链验证
./testssl.sh --capath etc/ca --show-cert example.com

性能优化配置

对于大型网络扫描任务,合理调整配置可显著提升性能:

关键性能参数

参数配置位置推荐值影响
Max Concurrent Connectionstestssl.sh5-10并发连接数
Session Cache Sizeopenssl.cnf1000会话缓存大小
Timeouttestssl.sh15s连接超时时间
Retry Counttestssl.sh2重试次数

性能优化配置示例

修改testssl.sh脚本中的默认参数:

# 原始配置
MAX_PARALLEL=3
SSL_TIMEOUT=10

# 优化配置
MAX_PARALLEL=8
SSL_TIMEOUT=15

配置文件维护与更新

testssl.sh项目会定期更新配置文件以支持新的TLS特性和安全标准,建议通过以下工作流维护配置文件:

mermaid

自动化更新脚本

创建update-configs.sh

#!/bin/bash
# 同步最新的CA哈希
wget -O etc/ca_hashes.txt https://testssl.sh/ca_hashes.txt

# 更新加密套件映射
./utils/generate_static_cipher_lists.sh > etc/cipher-mapping.txt

# 验证配置文件完整性
./utils/checkcert.sh etc/

常见问题与解决方案

Q1: 修改配置后扫描结果无变化?

A1: 检查以下可能原因:

  • 配置文件路径是否正确(必须在etc/目录下)
  • 是否使用了--openssl-config参数指定自定义配置
  • 配置文件权限是否允许读取
  • 重启终端或执行source ~/.bashrc刷新环境

Q2: 如何验证客户端模拟配置是否生效?

A2: 使用--debug 3参数查看详细握手过程:

./testssl.sh --client-simulation android_13_14 --debug 3 example.com | grep "ClientHello"

Q3: 自定义加密套件排序不生效?

A3: 确认:

  • cipher-mapping.txt中的套件顺序是否正确
  • 未使用--cipher-list参数覆盖配置
  • OpenSSL版本支持指定的套件(openssl ciphers -v验证)

总结与进阶方向

本文详细介绍了testssl.sh配置文件系统的架构和核心功能,通过实际场景演示了如何定制加密套件、客户端模拟和证书验证规则。高级用户可进一步探索:

  1. 动态配置生成:使用脚本根据环境变量自动生成配置文件
  2. 配置模板系统:为不同场景创建配置文件模板(PCI-DSS、HIPAA等)
  3. 配置版本控制:将关键配置文件纳入Git管理,追踪变更历史
  4. 自定义扫描模块:开发基于Lua的扩展规则脚本

testssl.sh的配置系统设计兼顾了灵活性和易用性,通过合理配置可满足从简单扫描到复杂合规检测的各种需求。建议定期查看项目的Coding_Convention.md文档,了解配置文件格式的最新规范。

下一步行动建议

  1. 基础配置:备份默认配置文件,创建个人配置目录
  2. 安全加固:禁用不安全的加密套件和协议版本
  3. 场景测试:为关键业务场景创建专用配置文件
  4. 自动化集成:将配置管理纳入CI/CD流程

通过系统掌握testssl.sh的配置能力,您可以构建更贴合实际需求的TLS安全扫描解决方案,在保障系统安全的同时确保业务兼容性。

【免费下载链接】testssl.sh Testing TLS/SSL encryption anywhere on any port 【免费下载链接】testssl.sh 项目地址: https://gitcode.com/gh_mirrors/te/testssl.sh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值