java8
代码如下:
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import java.net.URL;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.*;
public class SSLCertMonitor {
// 检查间隔时间(单位:小时)
private static final long CHECK_INTERVAL_HOURS = 12;
// 到期阈值(单位:天)
private static final long EXPIRY_THRESHOLD_DAYS = 30;
public static void main(String[] args) {
List<String> domainList = Arrays.asList(
"https://www.baidu.com"
);
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable checkTask = () -> checkAllDomains(domainList);
// 初次执行立即运行,以后每12小时执行一次
// scheduler.scheduleAtFixedRate(checkTask, 0, CHECK_INTERVAL_HOURS, TimeUnit.HOURS);
}
private static void checkAllDomains(List<String> domains) {
System.out.println("\n==== SSL证书检测开始 " + new Date() + " ====");
for (String domain : domains) {
try {
checkCertificate(domain);
} catch (Exception e) {
System.err.println("检测 " + domain + " 失败: " + e.getMessage());
}
}
System.out.println("==== SSL证书检测结束 ====\n");
}
private static void checkCertificate(String httpsUrl) throws Exception {
URL url = new URL(httpsUrl);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setConnectTimeout(10000);
connection.connect();
Certificate[] certs = connection.getServerCertificates();
for (Certificate cert : certs) {
if (cert instanceof X509Certificate) {
X509Certificate x509Cert = (X509Certificate) cert;
Instant now = Instant.now();
Instant expire = x509Cert.getNotAfter().toInstant();
long daysLeft = ChronoUnit.DAYS.between(now, expire);
System.out.printf("域名: %-25s 剩余天数: %3d 到期时间: %s%n",
httpsUrl, daysLeft, x509Cert.getNotAfter());
if (daysLeft <= EXPIRY_THRESHOLD_DAYS) {
System.out.printf("⚠️ 警告:%s 证书将在 %d 天后过期!%n", httpsUrl, daysLeft);
}
break; // 通常第一个就是目标证书
}
}
connection.disconnect();
}
}
作者:张三 创建时间:2025-11-10 14:11
最后编辑:张三 更新时间:2025-11-10 14:13
最后编辑:张三 更新时间:2025-11-10 14:13