func certInfo()

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
}