in certViewer/cmd/web/certificates.go [542:617]
func certInfo(cert *x509.Certificate) Certificate {
serial, err := GetHexASN1Serial(cert)
if err != nil {
slog.Error("Unable to retrieve ASN1 serial", "error", err.Error())
}
certRead := Certificate{
Version: cert.Version,
Serial: serial,
Validity: Validity{
NotBefore: cert.NotBefore.UTC().Format(time.RFC3339),
NotAfter: cert.NotAfter.UTC().Format(time.RFC3339),
},
SignatureAlgorithm: SignatureAlgorithm[cert.SignatureAlgorithm],
Hashes: Hashes{
SHA1: SHA1Hash(cert.Raw),
SHA256: SHA256Hash(cert.Raw),
SPKISHA256: SPKISHA256(cert),
SubjectSPKISHA256: SubjectSPKISHA256(cert),
PKPSHA256: PKPSHA256Hash(cert),
},
CA: cert.IsCA,
Raw: base64.StdEncoding.EncodeToString(cert.Raw),
}
certRead.Key, err = getPublicKeyInfo(cert)
if err != nil {
slog.Error("Failed to retrieve public key information", "error", err.Error())
}
// Handle common attributes for Issuer
var commonIssuerAttributes Subject
commonIssuerAttributes.Country = cert.Issuer.Country
commonIssuerAttributes.Organization = cert.Issuer.Organization
commonIssuerAttributes.OrganizationalUnit = cert.Issuer.OrganizationalUnit
commonIssuerAttributes.Locality = cert.Issuer.Locality
commonIssuerAttributes.StateOrProvince = cert.Issuer.Province
commonIssuerAttributes.StreetAddress = cert.Issuer.StreetAddress
commonIssuerAttributes.PostalCode = cert.Issuer.PostalCode
commonIssuerAttributes.SerialNumber = cert.Issuer.SerialNumber
commonIssuerAttributes.CommonName = cert.Issuer.CommonName
// Handle uncommon attributes for Issuer
uncommonIssuerAttributes := GetOIDAttributes(cert.Issuer.Names)
// Format all Issuer attributes into one string
// If uncommon attributes are empty, only return common... otherwise we get a trailing comma
if reflect.DeepEqual(uncommonIssuerAttributes, Subject{}) {
certRead.Issuer = GetAttributes(commonIssuerAttributes)
} else {
certRead.Issuer = strings.Join([]string{GetAttributes(commonIssuerAttributes), GetAttributes(uncommonIssuerAttributes)}, ", ")
}
// Handle common attributes for Subject
var commonSubjectAttributes Subject
commonSubjectAttributes.Country = cert.Subject.Country
commonSubjectAttributes.Organization = cert.Subject.Organization
commonSubjectAttributes.OrganizationalUnit = cert.Subject.OrganizationalUnit
commonSubjectAttributes.Locality = cert.Subject.Locality
commonSubjectAttributes.StateOrProvince = cert.Subject.Province
commonSubjectAttributes.StreetAddress = cert.Subject.StreetAddress
commonSubjectAttributes.PostalCode = cert.Subject.PostalCode
commonSubjectAttributes.SerialNumber = cert.Subject.SerialNumber
commonSubjectAttributes.CommonName = cert.Subject.CommonName
// Handle uncommon attributes for Subject
uncommonSubjectAttributes := GetOIDAttributes(cert.Subject.Names)
// Format all Subject attributes into one string
// If uncommon attributes are empty, only return common... otherwise we get a trailing comma
if reflect.DeepEqual(uncommonSubjectAttributes, Subject{}) {
certRead.Subject = GetAttributes(commonSubjectAttributes)
} else {
certRead.Subject = strings.Join([]string{GetAttributes(commonSubjectAttributes), GetAttributes(uncommonSubjectAttributes)}, ", ")
}
certRead.X509v3Extensions = getCertExtensions(cert)
return certRead
}