Parse out the poison extension in pre-certs
This commit is contained in:
@@ -31,7 +31,10 @@ var (
|
|||||||
issuerCacheMu sync.Mutex
|
issuerCacheMu sync.Mutex
|
||||||
)
|
)
|
||||||
|
|
||||||
var oidSCTList = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 11129, 2, 4, 2}
|
var (
|
||||||
|
oidSCTList = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 11129, 2, 4, 2}
|
||||||
|
oidCTPoison = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 11129, 2, 4, 3}
|
||||||
|
)
|
||||||
|
|
||||||
// CTLogInfo holds details about a CT log from the log list.
|
// CTLogInfo holds details about a CT log from the log list.
|
||||||
type CTLogInfo struct {
|
type CTLogInfo struct {
|
||||||
@@ -91,6 +94,7 @@ type CertDetails struct {
|
|||||||
KeyUsage []string `json:"key_usage,omitempty"`
|
KeyUsage []string `json:"key_usage,omitempty"`
|
||||||
ExtKeyUsage []string `json:"ext_key_usage,omitempty"`
|
ExtKeyUsage []string `json:"ext_key_usage,omitempty"`
|
||||||
IsCA bool `json:"is_ca"`
|
IsCA bool `json:"is_ca"`
|
||||||
|
PoisonExtension bool `json:"poison_extension,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var keyUsageNames = []struct {
|
var keyUsageNames = []struct {
|
||||||
@@ -470,8 +474,10 @@ func fetchIssuer(logURL, fingerprint string) (*IssuerInfo, error) {
|
|||||||
|
|
||||||
// parseCertDetails extracts certificate fields not covered by TrimmedEntry.
|
// parseCertDetails extracts certificate fields not covered by TrimmedEntry.
|
||||||
func parseCertDetails(certDER []byte) *CertDetails {
|
func parseCertDetails(certDER []byte) *CertDetails {
|
||||||
cert, err := x509.ParseCertificate(certDER)
|
// Proceed as long as a cert was returned, even if there are unhandled
|
||||||
if err != nil {
|
// critical extensions (e.g. the CT poison extension in precertificates).
|
||||||
|
cert, _ := x509.ParseCertificate(certDER)
|
||||||
|
if cert == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,6 +514,12 @@ func parseCertDetails(certDER []byte) *CertDetails {
|
|||||||
d.ExtKeyUsage = append(d.ExtKeyUsage, name)
|
d.ExtKeyUsage = append(d.ExtKeyUsage, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for _, ext := range cert.Extensions {
|
||||||
|
if ext.Id.Equal(oidCTPoison) {
|
||||||
|
d.PoisonExtension = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user