package collector import ( "crypto/x509" "encoding/pem" "os/exec" "path/filepath" "strings" "time" ) type Certificate struct { Name string `json:"name"` Subject string `json:"subject"` Issuer string `json:"issuer"` NotBefore string `json:"not_before"` NotAfter string `json:"not_after"` DaysLeft int `json:"days_left"` Serial string `json:"serial"` SAN string `json:"san,omitempty"` KeyUsage string `json:"key_usage,omitempty"` IsCA bool `json:"is_ca"` Status string `json:"status"` // "valid", "expiring", "expired" Source string `json:"source"` // "opnsense", "file" } // CollectCertificates liest Zertifikate aus OPNsense config.xml und gaengigen Pfaden func CollectCertificates() []Certificate { var certs []Certificate // 1. OPNsense config.xml Zertifikate certs = append(certs, collectOPNsenseCerts()...) // 2. Zertifikate aus /var/etc/cert/ (aktiv genutzte) certs = append(certs, collectCertDir("/var/etc/cert/")...) return certs } func collectOPNsenseCerts() []Certificate { // configctl: Zertifikate als Liste ausgeben // Alternativ: direkt config.xml parsen out, err := exec.Command("grep", "-A2", "", "/conf/config.xml").Output() if err != nil || len(out) == 0 { return collectFromConfigXML() } return collectFromConfigXML() } func collectFromConfigXML() []Certificate { // PHP-basiertes Auslesen der Zertifikate (OPNsense hat php verfuegbar) // Skript via stdin uebergeben, da -r bei langen Strings Probleme macht script := `