cert_info.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package cert
  2. import (
  3. "crypto/x509"
  4. "encoding/pem"
  5. "github.com/0xJacky/Nginx-UI/internal/helper"
  6. "github.com/0xJacky/Nginx-UI/internal/nginx"
  7. "os"
  8. "time"
  9. )
  10. type Info struct {
  11. SubjectName string `json:"subject_name"`
  12. IssuerName string `json:"issuer_name"`
  13. NotAfter time.Time `json:"not_after"`
  14. NotBefore time.Time `json:"not_before"`
  15. }
  16. func GetCertInfo(sslCertificatePath string) (info *Info, err error) {
  17. if !helper.IsUnderDirectory(sslCertificatePath, nginx.GetConfPath()) {
  18. err = ErrCertPathIsNotUnderTheNginxConfDir
  19. return
  20. }
  21. certData, err := os.ReadFile(sslCertificatePath)
  22. if err != nil {
  23. return
  24. }
  25. block, _ := pem.Decode(certData)
  26. if block == nil || block.Type != "CERTIFICATE" {
  27. err = ErrCertDecode
  28. return
  29. }
  30. cert, err := x509.ParseCertificate(block.Bytes)
  31. if err != nil {
  32. err = ErrCertParse
  33. return
  34. }
  35. info = &Info{
  36. SubjectName: cert.Subject.CommonName,
  37. IssuerName: cert.Issuer.CommonName,
  38. NotAfter: cert.NotAfter,
  39. NotBefore: cert.NotBefore,
  40. }
  41. return
  42. }