写一段python脚本,可以从客户端批量查看域名的ssl证书过期时间
时间: 2023-08-31 11:26:28 浏览: 222
### 回答1:
import ssl
import socket
import datetimedomain_list = ["domain1.com", "domain2.com", "domain3.com"]for domain in domain_list:
print("查看域名 " + domain + " 的 SSL 证书过期时间:")
ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z' try:
hostname = domain
context = ssl.create_default_context()
s = context.wrap_socket(socket.socket(), server_hostname=hostname)
s.connect((hostname, 443))
certificate = s.getpeercert()
expire_date = datetime.datetime.strptime(certificate['notAfter'], ssl_date_fmt)
print(expire_date)
except Exception as e:
print(e)
### 回答2:
您好!以下是一段可以从客户端批量查看域名SSL证书过期时间的Python脚本:
```python
import ssl
import socket
from datetime import datetime
# 客户端域名列表
domain_list = ['example.com', 'google.com', 'facebook.com']
def get_ssl_expiry(domain):
try:
# 获取SSL证书的有效期
cert = ssl.get_server_certificate((domain, 443))
x509 = ssl.PEM_cert_to_X509(cert)
cert_info = x509.get_notAfter().decode('utf-8')
# 将日期字符串转换为日期对象
expiry_date = datetime.strptime(cert_info, '%Y%m%d%H%M%SZ')
return expiry_date
except Exception as e:
print(f"无法获取域名 {domain} 的SSL证书信息:{e}")
# 批量查看域名SSL证书过期时间
for domain in domain_list:
expiry_date = get_ssl_expiry(domain)
if expiry_date:
days_left = (expiry_date - datetime.now()).days
print(f"域名 {domain} 的SSL证书将于 {expiry_date} 过期,还有 {days_left} 天。")
```
请注意,以上代码仅限于检查域名的SSL证书过期时间,且仅适用于默认的HTTPS端口(443)。此外,需要确保您的计算机已安装了Python的ssl模块。
希望对您有帮助!
### 回答3:
以下是一个可以从客户端批量查看域名的SSL证书过期时间的Python脚本示例:
```python
import ssl
import socket
import datetime
def get_ssl_expiry(hostname):
try:
ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z'
context = ssl.create_default_context()
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=hostname)
conn.settimeout(2) # 设置连接超时时间为2秒
conn.connect((hostname, 443))
ssl_info = conn.getpeercert()
# 解析证书过期日期
expiry_date = datetime.datetime.strptime(ssl_info['notAfter'], ssl_date_fmt)
conn.close()
return expiry_date
except ssl.SSLError:
return '获取SSL证书失败'
except socket.gaierror:
return '无法解析主机名'
except socket.timeout:
return '连接超时'
if __name__ == '__main__':
# 输入要查看的域名列表
domains = ['example.com', 'google.com', 'github.com']
for domain in domains:
expiry_date = get_ssl_expiry(domain)
# 打印结果
if isinstance(expiry_date, datetime.datetime):
print(f'{domain} SSL证书过期时间:{expiry_date}')
else:
print(f'{domain} 错误信息:{expiry_date}')
```
脚本的工作原理是使用`ssl`和`socket`库与服务器建立安全连接,并获取SSL证书的过期日期。脚本首先通过`wrap_socket`方法将socket连接包装成SSL连接,然后通过`getpeercert`方法获取证书信息,包括过期日期。最后,脚本打印出每个域名的SSL证书过期时间。
请注意,脚本使用了固定的端口443来与服务器建立连接,这是HTTPS默认的端口。如果你想要使用不同的端口,可以修改`conn.connect`的参数。
由于获取SSL证书需要与服务器进行通信,所以需要有网络连接。如果无法建立连接,脚本会返回适当的错误信息。
阅读全文