用户登录
个人主页 用户中心 我的订单 添加授权 管理授权
退出登录
用户登录 用户注册
欢迎来到 UC建站系统

HTTPS批量检测脚本方案:免费在线工具测一个站只要10秒但50个站逐一手动测完天都黑了,换成脚本批量扫连证书过期和中间证书链断裂报告都自动生成好了

免费在线工具测一个站只要10秒,但50个站逐一手动测完天都黑了,换成脚本批量扫一遍连报告都自动生成好了

一个做站群的朋友上个月遇到件事:他手里30多个站,某天早上突然有客户反馈好几个域名浏览器都提示"不安全"。一查才发现,三个站点的免费SSL证书过期了,还有一个站的中间证书链断了。前前后后排查加修复折腾了大半天。他说了句挺有道理的话——单个站HTTPS出问题不可怕,可怕的是几十个站一起出问题你还不知道。

SSL Labs、myssl.com这些在线工具测一个站确实好用,证书详情、TLS版本、加密套件一目了然。但问题是:测完一个站你得手动输入下一个域名,测完10个站手指已经酸了,测完50个站——没人会这么干。HTTPS检测这件事,站点数量一上去,免费在线工具和批量脚本之间的效率差距不是差几倍,是差了一个维度。

HTTPS批量检测应该覆盖哪些维度

1证书有效期:距离过期还剩多少天,这个最容易出问题
2证书链完整性:根证书→中间证书→服务器证书,缺一环就报错
3TLS协议版本:是否还支持TLS 1.0/1.1(该关了),是否已支持TLS 1.3
4域名匹配:证书上的域名和实际访问的域名是否一致
5混合内容:HTTPS页面里是否还加载了HTTP资源(图片、CSS、JS)
6HSTS/安全头:是否配置了HSTS、CSP等安全响应头

一、先看在线工具:单个站够用,批量就是灾难

1 - HTTPS批量检测脚本方案:免费在线工具测一个站只要10秒但50个站逐一手动测完天都黑了,换成脚本批量扫连证书过期和中间证书链断裂报告都自动生成好了 - UC建站系统

市面上好用的在线HTTPS检测工具不少,功能也很全。SSL Labs(ssllabs.com)算是行业标准,输入一个域名,等两三分钟出完整报告:证书有效期、证书链路径、支持的TLS版本、加密套件强度、协议漏洞,还有A+到F的评级。myssl.com是国内用得最多的,界面更直观,检测速度也快一些。还有httpsok.cn、ssltool.cc这些,都做得不错。

但所有这些在线工具的共性问题是一样的:一次只能测一个站。你手里有20个站,就得手动输入20次域名,等20次检测结果,人工看20份报告,然后自己整理成表格。30个站以上,光是手动输入域名的过程就能把人搞崩溃。

工具核心优势单次耗时50个站预估总耗时能否批量
SSL Labs最权威的TLS深度分析,A+评级体系2-3分钟约2.5小时不支持
myssl.com国内访问快,证书链检测直观10-30秒约15分钟不支持
httpsok.cnTLS版本+加密套件+HSTS一体化报告10-20秒约12分钟不支持
ssltool.cc证书链可视化做得最好15-30秒约20分钟不支持

纯手动测50个站,即使选最快的工具,光是操作等待的时间就要十几分钟,还没算上整理报告的功夫。而且人工逐条比对很容易漏——第37个站的证书链缺了中间证书,你眼睛一花就跳过去了。

二、OpenSSL命令行:单条命令精准定位,串起来就是批量脚本

如果你只需要快速看一个站的证书有效期,OpenSSL一行命令就解决了。不需要打开浏览器、不需要等页面加载:

# 查看证书有效期echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates# 输出示例:# notBefore=Jun 15 00:00:00 2026 GMT# notAfter=Sep 13 23:59:59 2026 GMT

这条命令连到目标服务器的443端口,抓取证书,然后解析出生效日期和过期日期。一行命令,不到两秒出结果。想看证书链有没有断?加上-showcerts参数:

# 查看完整证书链echo | openssl s_client -servername example.com -connect example.com:443 -showcerts 2>/dev/null | grep -E "s:|i:|subject|issuer"

OpenSSL命令行强在精准和快速,而且天生适合被脚本包裹。你把几十个域名放在一个txt文件里,写个shell循环,就能实现最基本的批量检测。但这个方案也有短板:不支持TLS版本检测、不支持混合内容扫描、不支持HSTS头检查。它只是一个证书信息的查看工具,不是完整的HTTPS安全审计工具。

OpenSSL的局限

它只能告诉你证书"有没有"和"什么时候到期",不能告诉你配置"好不好"。一个站可以证书有效、证书链完整,但同时支持TLS 1.0(有已知漏洞)且没配HSTS——OpenSSL不会告诉你这些。

三、Shell脚本批量方案:把OpenSSL包一层,10分钟写完跑一辈子

把OpenSSL命令包进shell循环,就是最实用的批量检测方案。思路很简单:准备一个域名列表文件(domains.txt),一行一个域名;写个脚本逐个连过去查证书过期时间;算出剩余天数;少于30天的标红警告。

2 - HTTPS批量检测脚本方案:免费在线工具测一个站只要10秒但50个站逐一手动测完天都黑了,换成脚本批量扫连证书过期和中间证书链断裂报告都自动生成好了 - UC建站系统

#!/bin/bash# 批量检测SSL证书过期时间DOMAINS_FILE="domains.txt"WARN_DAYS=30while IFS= read -r domain; do[[ -z "$domain" || "$domain" == \#* ]] && continueend_date=$(echo | openssl s_client -servername "$domain"     -connect "$domain:443" 2>/dev/null     | openssl x509 -noout -enddate 2>/dev/null     | cut -d= -f2)if [[ -z "$end_date" ]]; thenecho "⚠️  $domain | 连接失败或无法获取证书"continuefiend_epoch=$(date -d "$end_date" +%s 2>/dev/null)now_epoch=$(date +%s)days_left=$(( (end_epoch - now_epoch) / 86400 ))if [[ $days_left -le $WARN_DAYS ]]; thenecho "🔴 $domain | 剩余 ${days_left} 天 | 过期: $end_date"elseecho "🟢 $domain | 剩余 ${days_left} 天 | 过期: $end_date"fidone < "$DOMAINS_FILE"

这个脚本的优点是零依赖——只要服务器上有openssl和bash就能跑。配个crontab每天凌晨自动执行,结果发到企业微信或者钉钉群,从此再也不用担心证书过期忘续了。站群运维里最怕的就是"忘了续",自动化巡检是性价比最高的方案。

Shell脚本方案优点

零依赖、运行快、天生适合crontab定时、可以接钉钉/企业微信/邮件告警、改几行就能加新功能

Shell脚本方案短板

只能测证书有效期、测不了TLS版本和加密套件、测不了混合内容、跨平台兼容性差(date命令在macOS和Linux上不一样)

四、Python脚本方案:检测维度更全,输出报告更专业

如果你的需求不只是"证书有没有过期",还要知道每个站支持哪些TLS版本、用了什么加密套件、有没有配HSTS、有没有混合内容——那Shell脚本就力不从心了。Python生态里有现成的库可以搞定这些。

核心用两个库:ssl(Python内置,处理证书连接)和requests(发HTTP请求检查响应头和混合内容)。检测逻辑不复杂:先连443端口抓证书信息(有效期、颁发者、域名匹配),再发HTTPS请求检查HSTS头和安全头,最后扫页面源码里有没有http://的资源引用。

import sslimport socketimport requestsfrom datetime import datetimefrom urllib.parse import urlparseimport csvdef check_ssl_cert(domain, port=443):"""检测SSL证书信息"""ctx = ssl.create_default_context()try:with socket.create_connection((domain, port), timeout=5) as sock:with ctx.wrap_socket(sock, server_hostname=domain) as ssock:cert = ssock.getpeercert()# 过期时间not_after = datetime.strptime(cert['notAfter'], "%b %d %H:%M:%S %Y %Z")days_left = (not_after - datetime.now()).days# TLS版本tls_ver = ssock.version()# 颁发者issuer = dict(x[0] for x in cert['issuer'])return {'days_left': days_left,'tls_version': tls_ver,'issuer': issuer.get('organizationName', 'Unknown'),'not_after': not_after.strftime('%Y-%m-%d'),'subject': dict(x[0] for x in cert['subject'])}except Exception as e:return {'error': str(e)}def check_https_headers(domain):"""检测安全响应头"""try:r = requests.get(f"https://{domain}", timeout=10, allow_redirects=True)headers = r.headersreturn {'hsts': 'Strict-Transport-Security' in headers,'hsts_max_age': headers.get('Strict-Transport-Security', ''),'status_code': r.status_code,'redirect_http': r.history[0].status_code if r.history else None}except Exception as e:return {'error': str(e)}def check_mixed_content(domain):"""检测页面中是否有混合内容"""try:r = requests.get(f"https://{domain}", timeout=10)html = r.texthttp_refs = []# 检查img src中http://引用if 'src="http://' in html:http_refs.append('img')# 检查link href中http://引用if 'href="http://' in html:http_refs.append('link')# 检查script src中http://引用if "src='http://" in html:http_refs.append('script')return {'has_mixed': len(http_refs) > 0, 'types': http_refs}except:return {'error': '无法访问页面'}

Python方案的优势在于检测维度完整。证书有效期、TLS版本、颁发者、HSTS头、混合内容——一次脚本跑完,输出一个CSV表格,所有站点的HTTPS健康状况一目了然。而且Python跨平台毫无压力,Windows、macOS、Linux都能跑。

Python vs Shell:选哪个?

如果只关心"证书什么时候过期",Shell脚本就够了,5分钟写完。如果需要完整的安全审计报告(TLS版本、加密套件、HSTS、混合内容、证书链),用Python。两个方案不是替代关系,是场景互补——Shell做日常巡检告警,Python做深度审计和出报告。

五、专业监控工具:不只是检测,是持续守护

脚本方案解决的是"批量检测"的问题,但如果你的站点数量到了50个以上、或者站点是面向客户的业务型站点(而不是纯SEO站群),那应该考虑上一套专业的SSL监控工具。区别在于:脚本是"定时跑一次",监控工具是"7×24小时持续盯着"。

工具检测维度批量能力告警方式适合场景
UptimeRobot证书过期、SSL错误50个站点邮件、Slack、Webhook中小规模站群,快速上手
Sematext Synthetics证书过期+链完整性+TLS版本无上限邮件、Slack、PagerDuty需要深度诊断的团队
Dotcom-Monitor证书+网站+事务全维度无上限,全球多节点邮件、短信、电话企业级,全球多地检测
TrackSSL证书到期+变更提醒+CT日志无上限邮件、Slack专注证书层面的安全管理
Oh Dear证书到期+变更前后对比多站点邮件、Slack开发者友好,证书变更感知强

这些工具的核心价值不在"能不能检测"——Shell脚本也能检测。它们的价值在于持续的、自动的、多维度的监控+告警。你的站点凌晨两点证书过期了,脚本要等到第二天早上crontab触发才知道;专业工具会在过期前30天、14天、7天、1天持续提醒你,过期那一刻立即推送告警。

3 - HTTPS批量检测脚本方案:免费在线工具测一个站只要10秒但50个站逐一手动测完天都黑了,换成脚本批量扫连证书过期和中间证书链断裂报告都自动生成好了 - UC建站系统

六、站群场景下的HTTPS检测,有三个特殊问题

普通网站的HTTPS检测关注的是"这个站安不安全"。站群场景下,多了三个维度要考虑:

问题一:证书签发CA统一带来的关联风险

30个站全部用Let's Encrypt的免费证书,CA都是R3或E1,这在某些场景下可能成为站群关联信号。检测时不仅要看证书有没有效,还要看签发CA是否过于集中。

问题二:多服务器/多CDN下的证书不一致

同一个域名可能背后有多台服务器或CDN节点,不同节点返回的证书可能不一样(尤其是证书刚续签时)。批量检测时要注意从多地域节点验证。

问题三:免费证书90天周期的批量管理

Let's Encrypt证书90天过期。50个站的证书过期时间如果各不相同,管理复杂度直接爆炸。需要用acme.sh统一管理续签策略,让所有证书集中续签、统一过期时间。

针对问题三,acme.sh是目前最成熟的免费证书自动化方案。一条命令部署,自动续签,支持通配符证书和多域名证书。站群场景下,可以配置一个统一的续签脚本,把所有域名证书的过期时间对齐到同一天,然后crontab定时续签,配合前面的Shell批量检测脚本做双重保险。

用UC建站系统做多站矩阵的团队,独立部署模式下每个站点都有自己的独立IP和独立SSL证书配置,不会出现多站共用一张证书的情况。配合系统的统一监控看板,所有站点的证书状态、HTTPS配置、安全头检测结果在一个界面里就能看到,不用一个一个站去跑脚本——哪个站的证书快过期了、哪个站的TLS版本还停留在1.0、哪个站的HSTS没配,看板上一目了然。

七、怎么选:一张决策路径图

说了这么多工具和方案,最后给一个实用的选择逻辑。按你的站点数量和关注维度来匹配:

你的情况推荐方案上手成本核心优势
5个站以内在线工具(myssl.com / SSL Labs)打开网页就能用
5-20个站,只看证书有效期Shell脚本 + crontab + 企微告警10分钟零成本,配完不用管
20-50个站,需要完整安全审计Python脚本 + CSV报告输出30分钟检测维度最全,可定制
50个站以上,业务型站点专业监控工具(UptimeRobot/Sematext)1小时配置7×24持续监控+多渠道告警
100+站群,需要系统化管理UC建站统一监控看板 + 脚本双重保险按需证书+HTTPS+安全头全维度看板

很多站长的实际情况是:5个站的时候觉得没必要搞自动化,等到站点涨到20个了才发现手动管不过来了,然后又因为没时间一次性搞定所有配置,拖着拖着就有站点的证书过期了。建议从一开始就用最简单的Shell脚本把批量检测跑起来,哪怕你现在只有5个站——自动化这件事,越早做越省心。

HTTPS检测工具这件事,不需要过度选择。拿一张纸写下你的站点数量、你最关心的检测维度(证书过期?TLS版本?混合内容?),然后对着上面的决策表找对应方案。Shell脚本、Python脚本、专业监控工具——三个层级,按需选择,关键是别让"选工具"变成拖延的借口,先跑起来再说。

相关推荐
在线客服
👇找客服拿折扣
QQ咨询&售后
在线时间
11:00 ~ 5:30
QQ:3155555535
👇联系QQ
👇联系WX
首页 程序 帮助 登录