用go语写一个检查腾讯托管理的ssl证书过期的程序,当过期时间少于30天时进行钉钉提醒.
时间: 2024-04-06 15:35:04 浏览: 24
好的,我可以帮你写一个简单的程序来实现这个功能。首先,你需要安装 Go 语言的开发环境。然后,按照以下步骤进行操作:
1. 导入必要的包:
```go
package main
import (
"crypto/tls"
"fmt"
"net/http"
"time"
)
```
2. 设置需要检查的域名和端口号:
```go
const (
domain = "scf.tencentcloudapi.com"
port = "443"
)
```
3. 设置提醒阈值和钉钉机器人 Webhook:
```go
const (
remindThreshold = 30 * 24 * time.Hour // 30 天
dingTalkWebhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxx"
)
```
4. 编写一个函数来检查 SSL 证书是否过期:
```go
func checkSSLExpiration() {
// 构建 TLS 配置
tlsConfig := &tls.Config{
InsecureSkipVerify: true, // 跳过证书验证
}
// 构建 HTTP 客户端
client := &http.Client{
Transport: &http.Transport{
TLSClientConfig: tlsConfig,
},
Timeout: 10 * time.Second,
}
// 发送 HTTP 请求
url := fmt.Sprintf("https://%s:%s", domain, port)
resp, err := client.Get(url)
if err != nil {
fmt.Println("Failed to get SSL certificate:", err)
return
}
// 获取证书信息
certs := resp.TLS.PeerCertificates
if len(certs) == 0 {
fmt.Println("No SSL certificate found.")
return
}
// 检查证书过期时间
expiration := certs[0].NotAfter
daysLeft := expiration.Sub(time.Now())
if daysLeft < remindThreshold {
// 发送钉钉提醒
message := fmt.Sprintf("SSL certificate for %s will expire in %d days.", domain, daysLeft/time.Hour/24)
sendDingTalkMessage(message)
}
}
```
5. 编写一个函数来发送钉钉提醒:
```go
func sendDingTalkMessage(message string) {
// 构建请求体
requestBody := fmt.Sprintf(`{
"msgtype": "text",
"text": {
"content": "%s"
}
}`, message)
// 发送 HTTP POST 请求
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Post(dingTalkWebhook, "application/json", strings.NewReader(requestBody))
if err != nil {
fmt.Println("Failed to send DingTalk message:", err)
return
}
defer resp.Body.Close()
// 解析响应
responseBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Failed to read DingTalk response:", err)
return
}
response := make(map[string]interface{})
json.Unmarshal(responseBytes, &response)
if response["errcode"].(float64) != 0 {
fmt.Println("Failed to send DingTalk message:", response["errmsg"].(string))
return
}
// 提醒发送成功
fmt.Println("DingTalk message sent successfully:", message)
}
```
6. 最后,在 `main` 函数中设置一个定时器来定期检查 SSL 证书:
```go
func main() {
ticker := time.NewTicker(24 * time.Hour) // 每 24 小时检查一次
for {
select {
case <-ticker.C:
checkSSLExpiration()
}
}
}
```
这个程序会每 24 小时检查一次 SSL 证书的过期时间,并在证书过期时间少于 30 天时发送钉钉提醒。你需要将 `dingTalkWebhook` 替换为你自己的钉钉机器人 Webhook 地址。