使用openssl批量检测域名TLSv1.3支持时脚本无自动返回问题
OpenSSL批量检测TLSv1.3脚本卡住问题解决方案
问题根因
openssl s_client 完成TLS握手后默认会保持连接等待后续交互式输入,即使通过管道传入退出指令,部分版本仍会因连接保持、输出缓冲问题卡住,无超时机制的情况下遇到不可达域名也会导致脚本僵死。
修复后可正常运行的脚本
#!/usr/bin/env bash filename='domains.txt' while IFS= read -r line || [[ -n "$line" ]]; do # 去除域名前后空白字符 domain=$(xargs <<< "$line") # 跳过空行 [[ -z "$domain" ]] && continue # 10秒超时兜底+输入重定向到空,强制命令执行完自动退出 if timeout 10s openssl s_client -connect "$domain":443 -tls1_3 < /dev/null 2>/dev/null | grep -q 'Protocol : TLSv1.3'; then echo "$domain: TLS 1.3 已支持" else echo "$domain: TLS 1.3 未支持" fi done < "$filename"
关键调整说明
- 新增
timeout 10s限制单条域名检测最长耗时,超时直接终止进程,避免网络不通、域名无效等场景卡住整个脚本 - 新增
</dev/null将openssl的标准输入重定向到空设备,进程完成握手后会直接收到EOF信号自动退出,无需额外通过echo传退出指令 - 优化读取逻辑,
IFS= read -r避免域名中的特殊字符、前后空格被截断,|| [[ -n "$line" ]]兼容domains.txt末尾无换行符的场景 - 新增空行过滤逻辑,避免文件中的空行导致执行报错
- 输出结果增加域名前缀,方便批量检测时对应每条结果所属的域名
内容的提问来源于stack exchange,提问作者Salman Ali
相关产品推荐
相关产品推荐

