写一段python脚本,可以从文件中依次读取域名,再从客户端批量查看域名的ssl证书过期时间
时间: 2023-09-13 14:05:28 浏览: 111
利用python批量检查网站证书过期时间
### 回答1:
答:import ssldomains = []with open('domains.txt', 'r') as f:
for line in f:
domains.append(line.strip())for domain in domains:
try:
cert = ssl.get_server_certificate((domain, 443))
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
print(domain + ": " + str(x509.get_notAfter()))
except Exception as e:
print(domain + ": " + str(e))
### 回答2:
下面是一个可以从文件中逐行读取域名,并批量检查域名的 SSL 证书过期时间的 Python 脚本:
```python
import ssl
import socket
import datetime
def check_ssl_expiry(domain):
try:
hostname = domain.strip()
context = ssl.create_default_context()
with socket.create_connection((hostname, 443)) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
cert = ssock.getpeercert()
expire_date = cert['notAfter']
expire_datetime = datetime.datetime.strptime(expire_date, '%b %d %H:%M:%S %Y %Z')
current_datetime = datetime.datetime.now()
days_left = (expire_datetime - current_datetime).days
print(f'{domain} SSL 证书剩余 {days_left} 天过期')
except Exception as e:
print(f'{domain} SSL 证书过期时间无法获取: {e}')
file_path = "domains.txt" # 域名文件路径
with open(file_path, "r") as file:
for line in file:
check_ssl_expiry(line)
```
这个脚本会打开一个文件,其中每行包含一个域名。然后,它会依次读取每个域名,并使用 SSL 验证来检查该域名的证书过期时间。如果成功获取到证书过期时间,将会打印出域名和剩余的过期天数。如果获取不到证书过期时间,将会打印出错误信息。
请将域名列表存储在名为 "domains.txt" 的文件中,并将其放在与脚本相同的目录下。然后运行脚本,它将逐行读取域名并输出结果。
### 回答3:
你可以使用Python的`ssl`和`socket`模块来编写一个脚本,从文件中读取域名,并批量查找域名的SSL证书过期时间。
首先,你需要创建一个文本文件,其中包含一行一个域名。例如,假设你的文件名为`domains.txt`,其内容如下:
```
www.example1.com
www.example2.com
www.example3.com
```
然后,你可以使用以下脚本来读取文件中的域名,并批量查找其SSL证书的过期时间:
```python
import ssl
import socket
# 打开文件并读取域名
with open('domains.txt', 'r') as file:
domains = file.readlines()
# 遍历域名列表
for domain in domains:
# 去除行尾的换行符
domain = domain.strip()
try:
# 创建TLS连接
with socket.create_connection((domain, 443)) as sock:
with ssl.create_default_context().wrap_socket(sock, server_hostname=domain) as ssock:
# 获取证书信息
cert = ssock.getpeercert()
# 取出过期时间字段
expire_date = cert['notAfter']
# 打印信息
print(f"域名: {domain}")
print(f"SSL证书过期时间: {expire_date}")
print()
except ssl.CertificateError:
print(f"域名: {domain}")
print("无法验证证书")
print()
except ssl.SSLError as e:
print(f"域名: {domain}")
print(f"SSL错误: {str(e)}")
print()
```
该脚本逐行读取文件,并使用`socket.create_connection`方法与每个域名的443端口建立TLS连接。然后,使用`ssl.create_default_context`和`wrap_socket`方法包装套接字,并获取证书信息。
注意,如果域名具有自签名证书或证书在本地不受信任,则可能会引发`ssl.CertificateError`异常。这段代码也可以捕获其他与SSL相关的错误异常。
通过执行以上脚本,你将看到每个域名以及其SSL证书的过期时间输出在控制台上。
阅读全文