代码如下:
//CheckSSL 校验证书到期时间
// return 到期时间, 证书是否过期,错误
func CheckSSL(url string) (time.Time, bool, error) {
client := &http.Client{
Transport: &http.Transport{
// 注意如果证书已过期,那么只有在关闭证书校验的情况下链接才能建立成功
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
// 10s 超时后认为服务挂了
Timeout: 10 * time.Second,
}
resp, err := client.Get(url)
if err != nil {
return time.Time{}, false, err
}
defer func() { _ = resp.Body.Close() }()
// 遍历所有证书
for _, cert := range resp.TLS.PeerCertificates {
// 检测证书是否已经过期
if !cert.NotAfter.After(time.Now()) {
return cert.NotAfter.Local(), false, nil
} else {
return cert.NotAfter.Local(), true, nil
}
}
return time.Time{}, false, errors.New("Error of SSL expire")
}