Skip to content

Instantly share code, notes, and snippets.

@rsc
Created December 3, 2015 19:57
Show Gist options
  • Select an option

  • Save rsc/902e44eb7bce01e9810e to your computer and use it in GitHub Desktop.

Select an option

Save rsc/902e44eb7bce01e9810e to your computer and use it in GitHub Desktop.
package main
import (
"crypto/x509"
"encoding/pem"
"log"
)
func main() {
pemData := []byte(chain)
var der []byte
for len(pemData) > 0 {
b, next := pem.Decode(pemData)
if b == nil {
break
}
pemData = next
der = append(der, b.Bytes...)
}
certs, err := x509.ParseCertificates(der)
if err != nil {
log.Fatalf("failed to parse certificate: %s", err)
}
println("parsed", len(certs))
}
var chain = `
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJERTEP
MA0GA1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xGjAYBgNVBAoTEVRlc3Qg
T3JnYW5pc2F0aW9uMRcwFQYDVQQDEw5DQSBFeGFtcGxlIENvbTAeFw0xNTEwMTIx
NzQ3MDBaFw0yNTEwMTIxNzQ3MDBaMGQxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZC
ZXJsaW4xDzANBgNVBAcTBkJlcmxpbjEaMBgGA1UEChMRVGVzdCBPcmdhbmlzYXRp
b24xFzAVBgNVBAMTDkNBIEV4YW1wbGUgQ29tMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEA63VI14BcBdlXVorQ7pymCbgrII2K+gEJ1hljRs3VZSLJ9fzc
zVl72f9QB9Ie5MXb8k/YrnMLv1j6Yil1bMhdU1Mgt4rWTRvM7pIRNydle06Jd3te
VitzD2+3WVtU1K6HlRyxD4VxIaN5kXQXqGqfYskvU3jd6OukrsEhEP7VFQrtMDPG
H40vwXZctzjUrmXl6HalhGcA0j7hdEYIcM9Yk7DQXRqsCeP92aSr3cZlZXYPtZg+
3G9UYfDfLV6Bd4AM9HLhurm7rRUvs1gEXBS3tj49GUm7R6qtWxB0KHz4S85cQe6a
M1E+gjh0vkXyzE80wWGbN3KXvy3ZbZ7dFkrXmQIDAQABo3IwcDAPBgNVHRMBAf8E
BTADAQH/MB0GA1UdDgQWBBTYfyH6lcnyJXTeF4hkbGm1F+EU9zALBgNVHQ8EBAMC
AQYwEQYJYIZIAYb4QgEBBAQDAgAHMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlm
aWNhdGUwDQYJKoZIhvcNAQEFBQADggEBALJT8snkfPmWzWlcdP6N0MfNTKoj+7Uo
ZPZmLLHQCALSxf5XI97Nllq9GCpyteb5vH3EiYjmDNJMVA+o6Sf9vg0GroGXlyQG
fgTeEpcPBlbgybA6JzxRsixIpKs/z9F9qm7XcEsHm/EPr290fWDQ8u4FrWN3mA5b
pihj5pJ2Ui1P+yJW7qCEO0lSaP5KrG9MHEbXlFuWGn2ACWTAR5RsOuRwNE0/ZE62
X6oJxrNCZWHYGEoKzjr5PWW59LFtXjaEhNdX3damrMivom4R15o/VX+FlFuch9Ab
AChZmTeFQIqGw3cUcuUxgviLFuAhnHtxi8iWl4e+F8CaA+wHiJ1gf5Y=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJERTEP
MA0GA1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xGjAYBgNVBAoTEVRlc3Qg
T3JnYW5pc2F0aW9uMRcwFQYDVQQDEw5DQSBFeGFtcGxlIENvbTAeFw0xNTEwMTIx
NzQ4MDBaFw0yNTEwMTIxNzQ4MDBaMGkxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZC
ZXJsaW4xDzANBgNVBAcTBkJlcmxpbjEbMBkGA1UEChMSQ0EgU3ViIEV4YW1wbGUg
Q29tMRswGQYDVQQDExJDQSBTdWIgRXhhbXBsZSBDb20wggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQDN1Hk0pQlzD/n1IptXBQicKx3i0H1QjBTO3m9lajjd
LGBU1AUi4ZEyujGNLZRouJdoA23YmGjyvVPWSOhG8z0mHBaJ1IRJfm3jyybcHGc+
XGnfz4zNJ8O6uL+nCA2qD5jwtM42AVF9kbh2UKRQFwex1Akieh5MRnSKKd53qKDm
7DSjgIDutXHM7FzzoM516khNZQlY96qgzNNnrZuMP50v/P2tyN3oApcPxveIpi9D
3B1eK77qZ7z3w4blzQW1sa+X5Z7mSN+E1wvsq5inEzIyykgADm4v7Ku03NBKpe/k
RE8Gbe2etEZIWeyenmH/VU5kqIO269PYGTJMguspMH1nAgMBAAGjcjBwMA8GA1Ud
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFNH5+nwpJArYSpw1vnYt46fDm/+gMAsGA1Ud
DwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBj
ZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEAruwGCNlbRDDPb5FGMhtAd4vn
I2wNnnmR2C0um8BfZhsIOPyTjLERqz2wH1v9B/QwipEXmT5widAzukia93gAiTd4
vM4NrkMOkoLMSftMI3onC1+uY2seEtFx3E5XUunTiXnvFrXx6X1i0B/ZteLCnWJX
n+iwdvc7aJdRqOxqLTYCie6Dd+iAdfvvjTb8qxSqj9gst1kRzsczu9X920A7e146
0C6cbp2w90RXoTpd4UaoR3VScHlI04T+PqeinwkVb+wIfpKAMSqqnvqeGHn5zrua
dOkteKVKyQP+cssXwCa+Xb1PbtEWYdA7XY5v/Y+8CWAT3+Mzms5EOlyxHM51LQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxzCCAq+gAwIBAgIBAzANBgkqhkiG9w0BAQUFADBpMQswCQYDVQQGEwJERTEP
MA0GA1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xGzAZBgNVBAoTEkNBIFN1
YiBFeGFtcGxlIENvbTEbMBkGA1UEAxMSQ0EgU3ViIEV4YW1wbGUgQ29tMB4XDTE1
MTAxMjE3NDkwMFoXDTI1MTAxMjE3NDkwMFowcTELMAkGA1UEBhMCREUxDzANBgNV
BAgTBkJlcmxpbjEPMA0GA1UEBxMGQmVybGluMR8wHQYDVQQKExZDQSBTdWIgU3Vi
IEV4YW1wbGUgQ29tMR8wHQYDVQQDExZDQSBTdWIgU3ViIEV4YW1wbGUgQ29tMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyrF11H9SfWA+wJriMwdE3L9x
KWa6iVx77xI0ztx+3g/ucHc3NqvXkrRiyXvcHoA9y+QHOCMHzumTKVrDm3+R0QSI
ctcUqbf4HqzyxsYBnGKgKk9IR/M7RgWiOMZSUSnh7aX7gBOejfy6f8YOfpwRhdoC
tRYSm6Aq44HeBlbDNBRqXkwgqTJQY5qysl9TntOYkRUxZoBUaITI4xT9PnZvRYzX
xdLblEnvxLO5whbqjW+GKIGof0Q0prMv/+CgnDcYVcHr8gZBvpSIRmPYqXNykihg
VZldgPUWuDAA79EAQWX7mYyAOMAk+E7SqMtA+JMpZJS8w/gpT62tF5MWoE0HYQID
AQABo3IwcDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTdW0+iVe+DfCwxe2Js
QJ5kGmth2TALBgNVHQ8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMB4GCWCGSAGG
+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEBAHFUyXyr
TNJtM9thGP6W8raCWrsssqX9faICct3Yo6SrHStbHfqD2qxHn71zXtSPf8iA4lWb
Xop7xe71yAfoJ/alNDTaIxmd+2X+VQ1T1IlTH3P6bAVGsNHhEYxt/QOizGkOt5h3
VzBieg+wUZ3X7AX+B2rzscVT14UDaLmta8fzbc3z/6rOckd4DcQCWWIRvwnQvm1H
64094OcPlcZNnGl4/6OQhmuwp/BJsVkGEC7S/+rWCalwVQGsHBh+KiH+5E8Zekbc
beqwXMUe1PGYIfRjga8XsU3SDC7EMjm2qfWpVlMYFuYFMq3ZNANb4u7ei8vIJ2dI
/iTX3MQK1hQw5yc=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIID1zCCAr+gAwIBAgIBBTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEP
MA0GA1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xHzAdBgNVBAoTFkNBIFN1
YiBTdWIgRXhhbXBsZSBDb20xHzAdBgNVBAMTFkNBIFN1YiBTdWIgRXhhbXBsZSBD
b20wHhcNMTUxMDEyMTc1MDAwWhcNMjUxMDEyMTc0OTAwWjB5MQswCQYDVQQGEwJE
RTEPMA0GA1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xIzAhBgNVBAoTGkNB
IFN1YiBTdWIgU3ViIEV4YW1wbGUgQ29tMSMwIQYDVQQDExpDQSBTdWIgU3ViIFN1
YiBFeGFtcGxlIENvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAND+
6nMIneYYmoDYK6m/DlE3B91OkoelLJW6kP1lwkH02NEIod5CrrLiDBKh6xHg0mwC
mEkkRBOKUYngqvYXSAfVM7DINYNUuzGCwCTF22vYzSzziPGCCYiZgVpHECQFXTyf
M6djj7cAsdvYgGYTPfkaSS9EqmOrZgT1n+1A8rkjUiYszEUWSiYBrC5nfPhUdg+8
f33SZf0iIcbB9Mi8OruEAsyqop2dUtmKuWx0TgBOx8hvmWPnax1mfTFumbA7qMlt
gTDaN9iuwZ7ip+H0+qnPkMv9xiJfVHrDzdR+9+Tix/NNHyEAqPk/YRDX3jUP3yR1
1tjDDCHlH4FjRwXgKIECAwEAAaNyMHAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
FgQUUeTDom5JD3gHQnMWUMcQ0D5JurQwCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIB
AQQEAwIABzAeBglghkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3
DQEBBQUAA4IBAQB8mSAWpfzqN80Dxo6y1/Ly2nSuNzXiT6Y4JZ82/RSW4E9Hb2A6
AM92u1Clxsccqb74L+rvb9X1PyGMi0Prhsxrk3ie5TH/+EqghqhbXLorjk2t4w+5
H/vG0ygLUX8VUki+0S7dBn59+EdZfPfRPcgiEZNIP9BsH2Hb7swT6ZVTVLQ1PsaX
5Px1+oLAZXfcmL4ihAZIZIXg6zreZw1atR5bas370cf45Or0jzYF3j8X9a4Gk4iL
Lape3LkpFeLc7v5mUu5sKhScuxZcLQ2JHNo7Kz6r+fdWrm2v9ABdh9pBT77LoS/+
XDFT+xEWrHpAoUKBE7TpuSKoLawqcxtHPWCD
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDzDCCArSgAwIBAgIBCTANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJERTEP
MA0GA1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xIzAhBgNVBAoTGkNBIFN1
YiBTdWIgU3ViIEV4YW1wbGUgQ29tMSMwIQYDVQQDExpDQSBTdWIgU3ViIFN1YiBF
eGFtcGxlIENvbTAeFw0xNTEwMTMxMDQ5MDBaFw0xNjEwMTIxMDQ5MDBaMGkxCzAJ
BgNVBAYTAkRFMQ8wDQYDVQQIEwZCZXJsaW4xDzANBgNVBAcTBkJlcmxpbjEbMBkG
A1UEChMSU2VydmVyIEV4YW1wbGUgQ29tMRswGQYDVQQDExJzZXJ2ZXIuZXhhbXBs
ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDct+jxb4+l5dm
tAo1EL4jP6vnrDY7YXKle3oq6py92CwtP2/AGy+guOqD/55bYAinVeZcTqcIJrH5
bL+6r7qxKXEzbjvxuuznxiC62Yb6p1O03seU6pQ9/pFA9Bhv3S8OBcW1aNRc+egI
HHho6BsKfxEmS1WaM85iFMz+Pvs0KtKAyyYeJPch2FQ591egzX4sw4kTRLv0WCg7
LjsbUJh4C1i0U6azMOMBkAyHb4pGGRe0sLWo7imhD5RiLkcWysGxpoYxjYV0UlZ2
gUzxgCrO3hK5uUQm9F8r2kgjJzNMhipDuV62nQufxUj2twXMsFREbR8OK2SBWgXL
pkhQ3EmxAgMBAAGjbzBtMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFPWgZEupDE42
mSCAV/K3sp3abdJNMAsGA1UdDwQEAwIF4DARBglghkgBhvhCAQEEBAMCBkAwHgYJ
YIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEA
ke7ho8pnzpJYHVCOpY6YmpZRY0xUZMOjvKolZ5v7ryR2UWOQyWHzXz4RkXv4bJ2G
f1h0u3bfV4ysA6xK8bFEYzRsqa6igh3SQPd1qJwonT96LDneMM2ulCWU6qyxuU0q
ds8CS0Jaay1KIGvzQ+cGdae2pGLRD/5YssSrM6hjxTRR3ibxJb3lZmqOMDtLUKQp
wJYG0WYGvFL8iKLfHrVOzq0q7/ccOUFHUudWcA0qH28mHmrT9kvgHrH4drTGxue3
rT+Re5WrmiRVcFz9gbazH2P9uuh9u8hHEJ1uvR2+YrBwvGjJM+7rgM+L8dLBikTJ
q5GdqBBPkeGxcpX38gpqxA==
-----END CERTIFICATE-----
`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment