mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 18:35:51 +02:00
61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
package cert
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"encoding/pem"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/0xJacky/Nginx-UI/internal/helper"
|
|
"github.com/0xJacky/Nginx-UI/internal/nginx"
|
|
)
|
|
|
|
type Info struct {
|
|
SubjectName string `json:"subject_name"`
|
|
IssuerName string `json:"issuer_name"`
|
|
NotAfter time.Time `json:"not_after"`
|
|
NotBefore time.Time `json:"not_before"`
|
|
}
|
|
|
|
func GetCertInfo(sslCertificatePath string) (info *Info, err error) {
|
|
if !helper.IsUnderDirectory(sslCertificatePath, nginx.GetConfPath()) {
|
|
err = ErrCertPathIsNotUnderTheNginxConfDir
|
|
return
|
|
}
|
|
|
|
certData, err := os.ReadFile(sslCertificatePath)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
block, _ := pem.Decode(certData)
|
|
if block == nil || block.Type != "CERTIFICATE" {
|
|
err = ErrCertDecode
|
|
return
|
|
}
|
|
|
|
cert, err := x509.ParseCertificate(block.Bytes)
|
|
if err != nil {
|
|
err = ErrCertParse
|
|
return
|
|
}
|
|
|
|
// for wildcard certificate, the subject name is the first DNS name
|
|
subjectName := cert.Subject.CommonName
|
|
if subjectName == "" {
|
|
for _, name := range cert.DNSNames {
|
|
if name != "" {
|
|
subjectName = name
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
info = &Info{
|
|
SubjectName: subjectName,
|
|
IssuerName: cert.Issuer.CommonName,
|
|
NotAfter: cert.NotAfter,
|
|
NotBefore: cert.NotBefore,
|
|
}
|
|
return
|
|
}
|