forked from TrueCloudLab/certificates
Fix certificate type identification
This commit is contained in:
parent
b3316c4a56
commit
d424159200
1 changed files with 12 additions and 5 deletions
|
@ -1,7 +1,6 @@
|
||||||
package vaultcas
|
package vaultcas
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"context"
|
"context"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
|
@ -162,12 +161,12 @@ func getCertificateAndChain(certb certutil.CertBundle) (*Certificate, error) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
used[cert.SerialNumber.String()] = true
|
used[cert.SerialNumber.String()] = true
|
||||||
if cert.IsCA && bytes.Equal(cert.RawIssuer, cert.RawSubject) {
|
if isRoot(cert) {
|
||||||
root = cert
|
root = cert
|
||||||
} else if !cert.IsCA {
|
} else if cert.BasicConstraintsValid && cert.IsCA {
|
||||||
leaf = cert
|
|
||||||
} else {
|
|
||||||
intermediates = append(intermediates, cert)
|
intermediates = append(intermediates, cert)
|
||||||
|
} else {
|
||||||
|
leaf = cert
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -402,3 +401,11 @@ func unmarshalMap(m map[string]interface{}, v interface{}) error {
|
||||||
|
|
||||||
return json.Unmarshal(b, v)
|
return json.Unmarshal(b, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isRoot returns true if the given certificate is a root certificate.
|
||||||
|
func isRoot(cert *x509.Certificate) bool {
|
||||||
|
if cert.BasicConstraintsValid && cert.IsCA {
|
||||||
|
return cert.CheckSignatureFrom(cert) == nil
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue