目录:
证书Q&A
证书查看方式
方法1:通过浏览器查看
方法2:站点管理员通过管理端查看
方法3:脚本
方法4:在线工具获取站点证书并获取过期时间
方法5 命令行
证书异常提示
SSl证书Q&A
Q:证书发布是针对根域名还是子域名?
A:不一定。具体取决于证书申请者需要对哪个域名进行加密通信保护。例如,有些 SSL 证书是针对整个网站(按照域名通配符)进行发放,而其他证书则只针对某些子域名或特定网页进行发放。
Q:证书会针对ip发放吗?
A:尽管 SSL/TLS 证书通常是绑定到域名而不是 IP 地址上的,但是证书仍然会包含一些 IP 地址的信息。例如,某些证书会使用在 Subject Alternative Name (SAN) 字段中包含 IP 地址等信息。
此外,如果您使用 IP 地址作为请求的目标,网络浏览器会执行一个名为"Server Name Indication" (SNI)的扩展来向 HTTP 服务器传递请求的主机名。因此,在进行 SSL/TLS 握手时,如果服务器使用 SNI 扩展并提供了与您访问的 IP 地址对应的主机名,则浏览器可以正常查找到该 IP 地址的证书信息。
Q:证书的有效期是多久?
A:一般是 一年或两年
Q:过期的证书会存在哪些危害?
A:过期的证书可以被攻击者滥用,用于让不安全的网站看起来像是经过安全认证的。会影响部分业务连续性,如果该网址需要使用微信打开会提示异常。
Q:证书过期了怎么办?
A:购买和安装新的 SSL 证书
Q:ssl证书为什么有有效时间,有什么作用?
A:证书的过期时间是为了确保在一段时间后重新评估整个安全架构、加密技术和根证书可信性。为了确保公钥加密算法的安全性,证书需要安装过期时间,以便及时更新证书并更换加密机制,以防止算法被破解。
证书查看方式
方法1:通过浏览器查看
以google浏览器为例
打开网站,单击浏览器地址栏左侧的锁形图标。点击“证书”菜单,然后单击“查看证书”来查看证书属性。
方法2:站点管理员通过管理端查看
运维-证书管理
假设证书购买平台为阿里云,可以在阿里云对应账号的控制台-域名证书处查看
方法3:脚本
A思路: 通过socket连接
创建 SSL 上下文(ssl.create_default_context())并封装 Socket(c.wrap_socket(socket.socket(), server_hostname=ip/domain))。这样做的作用是在与目标主机建立 SSL/TLS 握手时,使用传输加密的方式保护通信。
将封装后的 Socket 连接到目标主机的 443 端口(s.connect((ip, 443)))。这里使用的是 HTTPS 协议的默认端口号。
从该 Socket 上获取握手后的 SSL/TLS 证书(s.getpeercert())。
解析证书中的字段,包括证书的有效期、适用范围等信息,并输出到控制台。
不足:
不支持自定义端口号
无法处理以下场景——
网络连接问题,如握手失败、SSL/TLS 连接失败、请求超时。
SSL/TLS 连接过程中,证书验证失败错误的场景。包括证书过期、证书的颁发机构不被信任、证书的域名和实际所访问的主机名不一致等
特殊的证书验证场景,如使用客户端证书进行双向验证
B思路:通过OpenSSL 工具
使用 subprocess 模块来调用 OpenSSL 命令
openssl s_client -connect {host}:{port} -showcerts </dev/null"
方法4:在线工具获取站点证书并获取过期时间
http://web.chacuo.net/netsslcheck/
方法5 命令行
openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -dates
证书异常提示
方法1: 用户端——通过浏览器警告:浏览器以不同的方式警告用户,告诉他们连接到的网站证书已经过期。
方法2:证书服务端——通过管理员账号或手机号发送过期提示。
方法3:脚本获取过期时间并用定时任务提示
前提 需要收集域名列表
参考:python脚本检查ssl证书到期并邮件告警 - 掘金 - https://juejin.cn/post/6938274068722352165
评论区