背景
定时扫描K8s集群证书的过期时间, exporter 需要运行 daemonset 感觉过于浪费资源, 打算自己用Go下一个工具, 定时在每个节点上都拉起一下, 跑完了就销毁.
解决方案
要使用 Go 语言验证证书的有效期,可以使用以下代码示例:
go
package main
import (
"crypto/x509"
"encoding/pem"
"fmt"
"io/ioutil"
"time"
)
func main() {
certPEM, err := ioutil.ReadFile("path/to/certificate.pem")
if err != nil {
fmt.Println("Error reading certificate file:", err)
return
}
block, _ := pem.Decode(certPEM)
if block == nil {
fmt.Println("Failed to parse certificate PEM")
return
}
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
fmt.Println("Error parsing certificate:", err)
return
}
fmt.Println("Certificate Expiry Date:", cert.NotAfter)
now := time.Now()
if now.Before(cert.NotBefore) {
fmt.Println("Certificate is not yet valid")
} else if now.After(cert.NotAfter) {
fmt.Println("Certificate has expired")
} else {
fmt.Println("Certificate is valid")
}
}
在上面的代码中,需要将 path/to/certificate.pem
替换为您要验证的证书文件的路径。代码将读取证书文件,解析证书并检查当前时间是否在证书的有效期内。根据验证结果,将输出相应的结果。