1
0

cert_info.go 944 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package cert
  2. import (
  3. "crypto/x509"
  4. "encoding/pem"
  5. "github.com/pkg/errors"
  6. "os"
  7. "time"
  8. )
  9. type Info struct {
  10. SubjectName string `json:"subject_name"`
  11. IssuerName string `json:"issuer_name"`
  12. NotAfter time.Time `json:"not_after"`
  13. NotBefore time.Time `json:"not_before"`
  14. }
  15. func GetCertInfo(sslCertificatePath string) (info *Info, err error) {
  16. certData, err := os.ReadFile(sslCertificatePath)
  17. if err != nil {
  18. err = errors.Wrap(err, "error read certificate")
  19. return
  20. }
  21. block, _ := pem.Decode(certData)
  22. if block == nil || block.Type != "CERTIFICATE" {
  23. err = errors.New("certificate decoding error")
  24. return
  25. }
  26. cert, err := x509.ParseCertificate(block.Bytes)
  27. if err != nil {
  28. err = errors.Wrap(err, "certificate parsing error")
  29. return
  30. }
  31. info = &Info{
  32. SubjectName: cert.Subject.CommonName,
  33. IssuerName: cert.Issuer.CommonName,
  34. NotAfter: cert.NotAfter,
  35. NotBefore: cert.NotBefore,
  36. }
  37. return
  38. }