Beispiel #1
0
func Dump(w indent.Writer, cert *x509.Certificate) {
	w.Headerf("Certificate:\n")

	w.Printf("Version: %s\n", w.Bold("%v", cert.Version))
	w.Printf("Serial Number: %s\n", w.Bold("%v (0x%x)\n", cert.SerialNumber, cert.SerialNumber))
	w.Printf("Issuer: %s\n", w.Bold("%s", RDNString(cert.Issuer)))

	w.Headerf("Validity:\n")
	w.Printf("Not Before: %s\n", w.Bold("%v", cert.NotBefore))
	w.Printf("Not After : %s\n", w.Bold("%v", cert.NotAfter))
	w.Dedent()

	w.Printf("Subject: %s\n", w.Bold(RDNString(cert.Subject)))
	w.Headerf("Subject Public Key Info:\n")
	pubkeyDump(w, cert)
	w.Dedent()

	w.Headerf("X509v3 Extensions:\n")
	if cert.KeyUsage != 0 {
		s := []string{}
		for t, d := range X509KeyUsage {
			if cert.KeyUsage&t != 0 {
				s = append(s, d)
			}
		}
		w.Headerf("X509v3 Key Usage:\n")
		w.Println(w.Bold("%s", strings.Join(s, ", ")))
		w.Dedent()
	}
	if cert.KeyUsage != 0 {
		s := []string{}
		for _, u := range cert.ExtKeyUsage {
			s = append(s, X509ExtKeyUsage[u])
		}
		w.Headerf("X509v3 Extended Key Usage:\n")
		w.Println(w.Bold("%s", strings.Join(s, ", ")))
		w.Dedent()
	}
	if cert.BasicConstraintsValid {
		w.Headerf("X509v3 Basic Constraints:\n")
		w.Printf("CA: %s\n", w.Bold("%v", cert.IsCA))
		if cert.MaxPathLen > 0 || cert.MaxPathLenZero {
			w.Printf("MaxPathLen: %s\n", w.Bold("%v", cert.MaxPathLen))
		}
		w.Dedent()
	}
	for _, e := range cert.Extensions {
		if cps, unotice, err := ExtractCertificationPolicy(e); err == nil {
			w.Headerf("Policy:\n")
			w.Printf("CPS: %s\n", w.Link(cps, w.Bold(cps)))
			w.Printf("User Notice: %s\n", w.Link(unotice, w.Bold(unotice)))
			w.Dedent()
		}
	}
	w.Dedent()

	w.Headerf("Signature Algorithm: %s\n", w.Bold("%v", SigAlgName[cert.SignatureAlgorithm]))
	w.PrintHex(cert.Signature)
	w.Dedent()

	w.Dedent()
}