From 328db64fa0846aad625e2e27fd01e7a029fb71ba Mon Sep 17 00:00:00 2001 From: Isaac Semaya Date: Wed, 16 Feb 2022 17:38:17 -0800 Subject: [PATCH] Add --leaf flag to view the first cert only, including for json and pem added dump-pkcs12-chain-to-pem.t to contrast with dump-pkcs12-chain-to-pem-first-only and show that multiple pem blocks are dumped without the --first flag.t --- README.md | 2 + cli/cli.go | 26 +++ tests/dump-first-only-to-json.t | 109 +++++++++++++ tests/dump-first-only-to-text.t | 150 +++++++++++++++++ tests/dump-pkcs12-chain-to-pem-first-only.t | 117 +++++++++++++ tests/dump-pkcs12-chain-to-pem.t | 172 ++++++++++++++++++++ 6 files changed, 576 insertions(+) create mode 100644 tests/dump-first-only-to-json.t create mode 100644 tests/dump-first-only-to-text.t create mode 100644 tests/dump-pkcs12-chain-to-pem-first-only.t create mode 100644 tests/dump-pkcs12-chain-to-pem.t diff --git a/README.md b/README.md index 3e90534..7100b76 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,7 @@ Commands: -p, --password=PASSWORD Password for PKCS12/JCEKS key stores (reads from TTY if missing). -m, --pem Write output as PEM blocks instead of human-readable format. -j, --json Write output as machine-readable JSON format. + -l, --first Only display the first certificate. This flag can be paired with --json or --pem. connect [] [] Connect to a server and print its certificate(s). @@ -75,6 +76,7 @@ Commands: --timeout=5s Timeout for connecting to remote server (can be '5m', '1s', etc). -m, --pem Write output as PEM blocks instead of human-readable format. -j, --json Write output as machine-readable JSON format. + -l, --first Only display the first certificate. This flag can be paired with --json or --pem. --verify Verify certificate chain. --expected-name Name expected in the server TLS certificate. Defaults to name from SNI or, if SNI not overridden, the hostname to connect to. diff --git a/cli/cli.go b/cli/cli.go index d842aab..04e1024 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -24,6 +24,7 @@ var ( dumpPassword = dump.Flag("password", "Password for PKCS12/JCEKS key stores (reads from TTY if missing).").Short('p').String() dumpPem = dump.Flag("pem", "Write output as PEM blocks instead of human-readable format.").Short('m').Bool() dumpJSON = dump.Flag("json", "Write output as machine-readable JSON format.").Short('j').Bool() + dumpFirst = dump.Flag("first", "Only display the first certificate. This flag can be paired with --json or --pem.").Short('l').Bool() connect = app.Command("connect", "Connect to a server and print its certificate(s).") connectTo = connect.Arg("server[:port]", "Hostname or IP to connect to, with optional port.").Required().String() @@ -37,6 +38,7 @@ var ( connectTimeout = connect.Flag("timeout", "Timeout for connecting to remote server (can be '5m', '1s', etc).").Default("5s").Duration() connectPem = connect.Flag("pem", "Write output as PEM blocks instead of human-readable format.").Short('m').Bool() connectJSON = connect.Flag("json", "Write output as machine-readable JSON format.").Short('j').Bool() + connectFirst = connect.Flag("first", "Only display the first certificate. This flag can be paired with --json or --pem.").Short('l').Bool() connectVerify = connect.Flag("verify", "Verify certificate chain.").Bool() connectVerifyExpectedName = connect.Flag("expected-name", "Name expected in the server TLS certificate. Defaults to name from SNI or, if SNI not overridden, the hostname to connect to.").String() @@ -94,8 +96,14 @@ func Run(args []string, tty terminal.Terminal) int { }() if *dumpPem { + dumped := 0 err = lib.ReadAsPEMFromFiles(files, *dumpType, tty.ReadPassword, func(block *pem.Block, format string) error { + if *dumpFirst && dumped > 0 { + return nil + } + block.Headers = nil + dumped++ return pem.Encode(stdout, block) }) } else { @@ -109,6 +117,15 @@ func Run(args []string, tty terminal.Terminal) int { return nil }) + certList := result.Certificates + formatList := result.Formats + if *dumpFirst && len(certList) > 0 { + certList = certList[:1] + formatList = formatList[:1] + result.Certificates = certList + result.Formats = formatList + } + if *dumpJSON { blob, _ := json.Marshal(result) fmt.Println(string(blob)) @@ -162,6 +179,15 @@ func Run(args []string, tty terminal.Terminal) int { verifyResult := lib.VerifyChain(connState.PeerCertificates, connState.OCSPResponse, expectedNameInCertificate, *connectCaPath) result.VerifyResult = &verifyResult + certList := result.Certificates + formatList := result.Formats + if *connectFirst && len(certList) > 0 { + certList = certList[:1] + formatList = formatList[:1] + result.Certificates = certList + result.Formats = formatList + } + if *connectJSON { blob, _ := json.Marshal(result) fmt.Println(string(blob)) diff --git a/tests/dump-first-only-to-json.t b/tests/dump-first-only-to-json.t new file mode 100644 index 0000000..a99093f --- /dev/null +++ b/tests/dump-first-only-to-json.t @@ -0,0 +1,109 @@ +Set up test data. + + $ cat > squareup-chain.crt < -----BEGIN CERTIFICATE----- + > MIIHnjCCBoagAwIBAgIRAMQdTn1Z7px7AAAAAFTMznkwDQYJKoZIhvcNAQELBQAw + > gboxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL + > Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg + > MjAxNCBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxLjAs + > BgNVBAMTJUVudHJ1c3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBMMU0wHhcN + > MTYwNzE1MjAxNTUyWhcNMTcwNzMxMjA0NTUwWjCBzTELMAkGA1UEBhMCVVMxEzAR + > BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgsr + > BgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMIRGVsYXdhcmUxFTATBgNV + > BAoTDFNxdWFyZSwgSW5jLjEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdhbml6YXRpb24x + > EDAOBgNVBAUTBzQ2OTk4NTUxGTAXBgNVBAMTEHd3dy5zcXVhcmV1cC5jb20wggEi + > MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDk+qX7IYPlzj+SJijzKDSOEh5x + > LDyVq6N8k+5bgSISr9pXbhJB2yFDsvzHn+s67B5x2jjwUfvvMYnS8Aad73UqeVJQ + > 5zPhLh9TL0U6ltgVUbKeVvxcZlGVj34WgqDJL3rMAEAJzDPZJ/Td/GNBWtrDOpdZ + > GQoNwdf/xK26ep/RKiqJWjCDBVd8Grxq0xqxaNvdml6mMJS49s5Ku5e5kvHwq7E7 + > sVX79h1k3IfYgPM5VFU0CLxBVwXwg2eQrDxxbQbgqf+am5vBaEB0olCIPrp4WImv + > 2B5cQa5/9AjXihCusXmyvDp0UBZOoFy1D6La1eJyMxgUK3uj2C+Z2DkdpythAgMB + > AAGjggOIMIIDhDCBmgYDVR0RBIGSMIGPghB3d3cuc3F1YXJldXAuY29tggxzcXVh + > cmV1cC5jb22CFGFjY291bnQuc3F1YXJldXAuY29tggdta3QuY29tggt3d3cubWt0 + > LmNvbYITbWFya2V0LnNxdWFyZXVwLmNvbYIIZ29zcS5jb22CDHd3dy5nb3NxLmNv + > bYIHZ29zcS5jb4ILd3d3Lmdvc3EuY28wggF+BgorBgEEAdZ5AgQCBIIBbgSCAWoB + > aAB2AGj2mPgfZIK+OozuuSgdTPxxUV1nk9RE0QpnrLtPT/vEAAABVfBO8foAAAQD + > AEcwRQIgHRuE49MQdG9gn47iHetv5bNzKLcaP9uReKBa/0c7luECIQCE/Km4MXBr + > 1fTTezjnGD5ZTxdcfnuStsy2FejS0ldWUQB2AFYUBpov18Ls0/XhvUSyPsdGdrm8 + > mRFcwO+UmFXWidDdAAABVfBO9scAAAQDAEcwRQIgWG3bnNz07rT7yjGdjvCC6F9i + > aiBxsWpnLmYxc0ycrogCIQD7a1RbCM8o+bGbTRmpZv9Z5M6beO+eoC/TXDFZdK58 + > JAB2AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABVfBO+BQAAAQD + > AEcwRQIgVmnuQ6nwHIwGcXRAqXVvqAQJkdzbe5DpCYM/e5FD15wCIQCdGxXNam6p + > xblJX2oUnPdsxfUvP++u94bgKgJDUdDMgDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l + > BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGgGCCsGAQUFBwEBBFwwWjAjBggrBgEF + > BQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYIKwYBBQUHMAKGJ2h0dHA6 + > Ly9haWEuZW50cnVzdC5uZXQvbDFtLWNoYWluMjU2LmNlcjAzBgNVHR8ELDAqMCig + > JqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L2xldmVsMW0uY3JsMEoGA1UdIARD + > MEEwNgYKYIZIAYb6bAoBAjAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1 + > c3QubmV0L3JwYTAHBgVngQwBATAfBgNVHSMEGDAWgBTD99C1KjCtrw2RIXA5VN28 + > iXDHOjAdBgNVHQ4EFgQU1BcUbwvFIKHW/iF+3J74V5ztrmowCQYDVR0TBAIwADAN + > BgkqhkiG9w0BAQsFAAOCAQEAhb0ixKT20fiDn+0tjAM/WeqQZpQRyQFT1jIK8ERI + > HsTeEV291SiLaatV6laocpx7R/JgwAQc1bPItf3HguhetWeXSTFDBQyy4InN0ceB + > RQJDPl6gcmq9xC9KMgMgXmh0FDrG2yMHRC3Qz9dSPDTPTNrCjLvW1PPK0o1pQ9cz + > ISdRtVnLz6/3tkx/bUNkT1TQ6mpslx5CBqyZS8LHzLr13Ei8D5P6RhsKXT6JS3Ki + > G2TfXmg9UFgsiNho7aRpLhyI66wNB+akENKPk0n23RkxpYkRtIcFUY9LIYBbvGHT + > Qq1IhY7LwcjCwcGePa0CtcnnwrA6jPnlEpTR6bh1NW5IaA== + > -----END CERTIFICATE----- + > -----BEGIN CERTIFICATE----- + > MIIFLTCCBBWgAwIBAgIMYaHn0gAAAABR02amMA0GCSqGSIb3DQEBCwUAMIG+MQsw + > CQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2Vl + > IHd3dy5lbnRydXN0Lm5ldC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkg + > RW50cnVzdCwgSW5jLiAtIGZvciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQD + > EylFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0x + > NDEyMTUxNTI1MDNaFw0zMDEwMTUxNTU1MDNaMIG6MQswCQYDVQQGEwJVUzEWMBQG + > A1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5l + > dC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMTQgRW50cnVzdCwgSW5jLiAt + > IGZvciBhdXRob3JpemVkIHVzZSBvbmx5MS4wLAYDVQQDEyVFbnRydXN0IENlcnRp + > ZmljYXRpb24gQXV0aG9yaXR5IC0gTDFNMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A + > MIIBCgKCAQEA0IHBOSPCsdHs91fdVSQ2kSAiSPf8ylIKsKs/M7WwhAf23056sPuY + > Ij0BrFb7cW2y7rmgD1J3q5iTvjOK64dex6qwymmPQwhqPyK/MzlG1ZTy4kwFItln + > gJHxBEoOm3yiydJs/TwJhL39axSagR3nioPvYRZ1R5gTOw2QFpi/iuInMlOZmcP7 + > lhw192LtjL1JcdJDQ6Gh4yEqI3CodT2ybEYGYW8YZ+QpfrI8wcVfCR5uRE7sIZlY + > FUj0VUgqtzS0BeN8SYwAWN46lsw53GEzVc4qLj/RmWLoquY0djGqr3kplnjLgRSv + > adr7BLlZg0SqCU+01CwBnZuUMWstoc/B5QIDAQABo4IBKzCCAScwDgYDVR0PAQH/ + > BAQDAgEGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8E + > CDAGAQH/AgEAMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29j + > c3AuZW50cnVzdC5uZXQwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2NybC5lbnRy + > dXN0Lm5ldC9nMmNhLmNybDA7BgNVHSAENDAyMDAGBFUdIAAwKDAmBggrBgEFBQcC + > ARYaaHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwHQYDVR0OBBYEFMP30LUqMK2v + > DZEhcDlU3byJcMc6MB8GA1UdIwQYMBaAFGpyJnrQHu995ztpUdRsjZ+QEmarMA0G + > CSqGSIb3DQEBCwUAA4IBAQC0h8eEIhopwKR47PVPG7SEl2937tTPWa+oQ5YvHVje + > pvMVWy7ZQ5xMQrkXFxGttLFBx2YMIoYFp7Qi+8VoaIqIMthx1hGOjlJ+Qgld2dnA + > DizvRGsf2yS89byxqsGK5Wbb0CTz34mmi/5e0FC6m3UAyQhKS3Q/WFOv9rihbISY + > Jnz8/DVRZZgeO2x28JkPxLkJ1YXYJKd/KsLak0tkuHB8VCnTglTVz6WUwzOeTTRn + > 4Dh2ZgCN0C/GqwmqcvrOLzWJ/MDtBgO334wlV/H77yiI2YIowAQPlIFpI+CRKMVe + > 1QzX1CA778n4wI+nQc1XRG5sZ2L+hN/nYNjvv9QiHg3n + > -----END CERTIFICATE----- + > -----BEGIN CERTIFICATE----- + > MIIE/zCCA+egAwIBAgIEUdNARDANBgkqhkiG9w0BAQsFADCBsDELMAkGA1UEBhMC + > VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 + > Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW + > KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl + > cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE0MDkyMjE3MTQ1N1oXDTI0MDkyMzAx + > MzE1M1owgb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgw + > JgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQL + > EzAoYykgMjAwOSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9u + > bHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 + > eSAtIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuoS2ctueDGvi + > mekwAad26jK4lUEaydphTlhyz/72gnm/c2EGCqUn2LNf00VOHHLWTjLycooP94MZ + > 0GqAgABFHrDH55q/ElcnHKNoLwqHvWprDl5l8xx31dSFjXAhtLMy54ui1YY5ArG4 + > 0kfO5MlJxDun3vtUfVe+8OhuwnmyOgtV4lCYFjITXC94VsHClLPyWuQnmp8k18bs + > 0JslguPMwsRFxYyXegZrKhGfqQpuSDtv29QRGUL3jwe/9VNfnD70FyzmaaxOMkxi + > d+q36OW7NLwZi66cUee3frVTsTMi5W3PcDwa+uKbZ7aD9I2lr2JMTeBYrGQ0EgP4 + > to2UYySkcQIDAQABo4IBDzCCAQswDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI + > MAYBAf8CAQEwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz + > cC5lbnRydXN0Lm5ldDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1 + > c3QubmV0L3Jvb3RjYTEuY3JsMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsGAQUF + > BwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NQUzAdBgNVHQ4EFgQUanImetAe + > 733nO2lR1GyNn5ASZqswHwYDVR0jBBgwFoAUaJDkZ6SmU4DHhmak8fdLQ/uEvW0w + > DQYJKoZIhvcNAQELBQADggEBAGkzg/woem99751V68U+ep11s8zDODbZNKIoaBjq + > HmnTvefQd9q4AINOSs9v0fHBIj905PeYSZ6btp7h25h3LVY0sag82f3Azce/BQPU + > AsXx5cbaCKUTx2IjEdFhMB1ghEXveajGJpOkt800uGnFE/aRs8lFc3a2kvZ2Clvh + > A0e36SlMkTIjN0qcNdh4/R0f5IOJJICtt/nP5F2l1HHEhVtwH9s/HAHrGkUmMRTM + > Zb9n3srMM2XlQZHXN75BGpad5oqXnafOrE6aPb0BoGrZTyIAi0TVaWJ7LuvMuueS + > fWlnPfy4fN5Bh9Bp6roKGHoalUOzeXEodm2h+1dK7E3IDhA= + > -----END CERTIFICATE----- + > EOF +Dump a live cert chain (squareup-chain.crt) with leaf flag + $ certigo --verbose dump squareup-chain.crt --json --first + {"certificates":[{"serial":"260680855742043049380997676879525498489","not_before":"2016-07-15T20:15:52Z","not_after":"2017-07-31T20:45:50Z","signature_algorithm":"SHA256-RSA","is_self_signed":false,"subject":{"business_category":["Private Organization"],"common_name":"www.squareup.com","country":["US"],"ev_country":["US"],"ev_province":["Delaware"],"ev_registration_number":"4699855","key_id":"D4:17:14:6F:0B:C5:20:A1:D6:FE:21:7E:DC:9E:F8:57:9C:ED:AE:6A","locality":["San Francisco"],"organization":["Square, Inc."],"province":["California"]},"issuer":{"common_name":"Entrust Certification Authority - L1M","country":["US"],"key_id":"C3:F7:D0:B5:2A:30:AD:AF:0D:91:21:70:39:54:DD:BC:89:70:C7:3A","organization":["Entrust, Inc."],"organizational_unit":["See www.entrust.net/legal-terms","(c) 2014 Entrust, Inc. - for authorized use only"]},"basic_constraints":{"is_ca":false},"ocsp_server":["http://ocsp.entrust.net"],"issuing_certificate":["http://aia.entrust.net/l1m-chain256.cer"],"key_usage":["Digital Signature","Key Encipherment"],"extended_key_usage":["Server Auth","Client Auth"],"dns_names":["www.squareup.com","squareup.com","account.squareup.com","mkt.com","www.mkt.com","market.squareup.com","gosq.com","www.gosq.com","gosq.co","www.gosq.co"],"pem":"-----BEGIN CERTIFICATE-----\nMIIHnjCCBoagAwIBAgIRAMQdTn1Z7px7AAAAAFTMznkwDQYJKoZIhvcNAQELBQAw\ngboxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL\nEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg\nMjAxNCBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxLjAs\nBgNVBAMTJUVudHJ1c3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBMMU0wHhcN\nMTYwNzE1MjAxNTUyWhcNMTcwNzMxMjA0NTUwWjCBzTELMAkGA1UEBhMCVVMxEzAR\nBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgsr\nBgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMIRGVsYXdhcmUxFTATBgNV\nBAoTDFNxdWFyZSwgSW5jLjEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdhbml6YXRpb24x\nEDAOBgNVBAUTBzQ2OTk4NTUxGTAXBgNVBAMTEHd3dy5zcXVhcmV1cC5jb20wggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDk+qX7IYPlzj+SJijzKDSOEh5x\nLDyVq6N8k+5bgSISr9pXbhJB2yFDsvzHn+s67B5x2jjwUfvvMYnS8Aad73UqeVJQ\n5zPhLh9TL0U6ltgVUbKeVvxcZlGVj34WgqDJL3rMAEAJzDPZJ/Td/GNBWtrDOpdZ\nGQoNwdf/xK26ep/RKiqJWjCDBVd8Grxq0xqxaNvdml6mMJS49s5Ku5e5kvHwq7E7\nsVX79h1k3IfYgPM5VFU0CLxBVwXwg2eQrDxxbQbgqf+am5vBaEB0olCIPrp4WImv\n2B5cQa5/9AjXihCusXmyvDp0UBZOoFy1D6La1eJyMxgUK3uj2C+Z2DkdpythAgMB\nAAGjggOIMIIDhDCBmgYDVR0RBIGSMIGPghB3d3cuc3F1YXJldXAuY29tggxzcXVh\ncmV1cC5jb22CFGFjY291bnQuc3F1YXJldXAuY29tggdta3QuY29tggt3d3cubWt0\nLmNvbYITbWFya2V0LnNxdWFyZXVwLmNvbYIIZ29zcS5jb22CDHd3dy5nb3NxLmNv\nbYIHZ29zcS5jb4ILd3d3Lmdvc3EuY28wggF+BgorBgEEAdZ5AgQCBIIBbgSCAWoB\naAB2AGj2mPgfZIK+OozuuSgdTPxxUV1nk9RE0QpnrLtPT/vEAAABVfBO8foAAAQD\nAEcwRQIgHRuE49MQdG9gn47iHetv5bNzKLcaP9uReKBa/0c7luECIQCE/Km4MXBr\n1fTTezjnGD5ZTxdcfnuStsy2FejS0ldWUQB2AFYUBpov18Ls0/XhvUSyPsdGdrm8\nmRFcwO+UmFXWidDdAAABVfBO9scAAAQDAEcwRQIgWG3bnNz07rT7yjGdjvCC6F9i\naiBxsWpnLmYxc0ycrogCIQD7a1RbCM8o+bGbTRmpZv9Z5M6beO+eoC/TXDFZdK58\nJAB2AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABVfBO+BQAAAQD\nAEcwRQIgVmnuQ6nwHIwGcXRAqXVvqAQJkdzbe5DpCYM/e5FD15wCIQCdGxXNam6p\nxblJX2oUnPdsxfUvP++u94bgKgJDUdDMgDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l\nBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGgGCCsGAQUFBwEBBFwwWjAjBggrBgEF\nBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYIKwYBBQUHMAKGJ2h0dHA6\nLy9haWEuZW50cnVzdC5uZXQvbDFtLWNoYWluMjU2LmNlcjAzBgNVHR8ELDAqMCig\nJqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L2xldmVsMW0uY3JsMEoGA1UdIARD\nMEEwNgYKYIZIAYb6bAoBAjAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1\nc3QubmV0L3JwYTAHBgVngQwBATAfBgNVHSMEGDAWgBTD99C1KjCtrw2RIXA5VN28\niXDHOjAdBgNVHQ4EFgQU1BcUbwvFIKHW/iF+3J74V5ztrmowCQYDVR0TBAIwADAN\nBgkqhkiG9w0BAQsFAAOCAQEAhb0ixKT20fiDn+0tjAM/WeqQZpQRyQFT1jIK8ERI\nHsTeEV291SiLaatV6laocpx7R/JgwAQc1bPItf3HguhetWeXSTFDBQyy4InN0ceB\nRQJDPl6gcmq9xC9KMgMgXmh0FDrG2yMHRC3Qz9dSPDTPTNrCjLvW1PPK0o1pQ9cz\nISdRtVnLz6/3tkx/bUNkT1TQ6mpslx5CBqyZS8LHzLr13Ei8D5P6RhsKXT6JS3Ki\nG2TfXmg9UFgsiNho7aRpLhyI66wNB+akENKPk0n23RkxpYkRtIcFUY9LIYBbvGHT\nQq1IhY7LwcjCwcGePa0CtcnnwrA6jPnlEpTR6bh1NW5IaA==\n-----END CERTIFICATE-----\n"}]} \ No newline at end of file diff --git a/tests/dump-first-only-to-text.t b/tests/dump-first-only-to-text.t new file mode 100644 index 0000000..a659eaa --- /dev/null +++ b/tests/dump-first-only-to-text.t @@ -0,0 +1,150 @@ +Set up test data. + + $ cat > squareup-chain-leaf-only.crt < -----BEGIN CERTIFICATE----- + > MIIHnjCCBoagAwIBAgIRAMQdTn1Z7px7AAAAAFTMznkwDQYJKoZIhvcNAQELBQAw + > gboxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL + > Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg + > MjAxNCBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxLjAs + > BgNVBAMTJUVudHJ1c3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBMMU0wHhcN + > MTYwNzE1MjAxNTUyWhcNMTcwNzMxMjA0NTUwWjCBzTELMAkGA1UEBhMCVVMxEzAR + > BgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgsr + > BgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMIRGVsYXdhcmUxFTATBgNV + > BAoTDFNxdWFyZSwgSW5jLjEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdhbml6YXRpb24x + > EDAOBgNVBAUTBzQ2OTk4NTUxGTAXBgNVBAMTEHd3dy5zcXVhcmV1cC5jb20wggEi + > MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDk+qX7IYPlzj+SJijzKDSOEh5x + > LDyVq6N8k+5bgSISr9pXbhJB2yFDsvzHn+s67B5x2jjwUfvvMYnS8Aad73UqeVJQ + > 5zPhLh9TL0U6ltgVUbKeVvxcZlGVj34WgqDJL3rMAEAJzDPZJ/Td/GNBWtrDOpdZ + > GQoNwdf/xK26ep/RKiqJWjCDBVd8Grxq0xqxaNvdml6mMJS49s5Ku5e5kvHwq7E7 + > sVX79h1k3IfYgPM5VFU0CLxBVwXwg2eQrDxxbQbgqf+am5vBaEB0olCIPrp4WImv + > 2B5cQa5/9AjXihCusXmyvDp0UBZOoFy1D6La1eJyMxgUK3uj2C+Z2DkdpythAgMB + > AAGjggOIMIIDhDCBmgYDVR0RBIGSMIGPghB3d3cuc3F1YXJldXAuY29tggxzcXVh + > cmV1cC5jb22CFGFjY291bnQuc3F1YXJldXAuY29tggdta3QuY29tggt3d3cubWt0 + > LmNvbYITbWFya2V0LnNxdWFyZXVwLmNvbYIIZ29zcS5jb22CDHd3dy5nb3NxLmNv + > bYIHZ29zcS5jb4ILd3d3Lmdvc3EuY28wggF+BgorBgEEAdZ5AgQCBIIBbgSCAWoB + > aAB2AGj2mPgfZIK+OozuuSgdTPxxUV1nk9RE0QpnrLtPT/vEAAABVfBO8foAAAQD + > AEcwRQIgHRuE49MQdG9gn47iHetv5bNzKLcaP9uReKBa/0c7luECIQCE/Km4MXBr + > 1fTTezjnGD5ZTxdcfnuStsy2FejS0ldWUQB2AFYUBpov18Ls0/XhvUSyPsdGdrm8 + > mRFcwO+UmFXWidDdAAABVfBO9scAAAQDAEcwRQIgWG3bnNz07rT7yjGdjvCC6F9i + > aiBxsWpnLmYxc0ycrogCIQD7a1RbCM8o+bGbTRmpZv9Z5M6beO+eoC/TXDFZdK58 + > JAB2AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABVfBO+BQAAAQD + > AEcwRQIgVmnuQ6nwHIwGcXRAqXVvqAQJkdzbe5DpCYM/e5FD15wCIQCdGxXNam6p + > xblJX2oUnPdsxfUvP++u94bgKgJDUdDMgDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l + > BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGgGCCsGAQUFBwEBBFwwWjAjBggrBgEF + > BQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYIKwYBBQUHMAKGJ2h0dHA6 + > Ly9haWEuZW50cnVzdC5uZXQvbDFtLWNoYWluMjU2LmNlcjAzBgNVHR8ELDAqMCig + > JqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L2xldmVsMW0uY3JsMEoGA1UdIARD + > MEEwNgYKYIZIAYb6bAoBAjAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1 + > c3QubmV0L3JwYTAHBgVngQwBATAfBgNVHSMEGDAWgBTD99C1KjCtrw2RIXA5VN28 + > iXDHOjAdBgNVHQ4EFgQU1BcUbwvFIKHW/iF+3J74V5ztrmowCQYDVR0TBAIwADAN + > BgkqhkiG9w0BAQsFAAOCAQEAhb0ixKT20fiDn+0tjAM/WeqQZpQRyQFT1jIK8ERI + > HsTeEV291SiLaatV6laocpx7R/JgwAQc1bPItf3HguhetWeXSTFDBQyy4InN0ceB + > RQJDPl6gcmq9xC9KMgMgXmh0FDrG2yMHRC3Qz9dSPDTPTNrCjLvW1PPK0o1pQ9cz + > ISdRtVnLz6/3tkx/bUNkT1TQ6mpslx5CBqyZS8LHzLr13Ei8D5P6RhsKXT6JS3Ki + > G2TfXmg9UFgsiNho7aRpLhyI66wNB+akENKPk0n23RkxpYkRtIcFUY9LIYBbvGHT + > Qq1IhY7LwcjCwcGePa0CtcnnwrA6jPnlEpTR6bh1NW5IaA== + > -----END CERTIFICATE----- + > -----BEGIN CERTIFICATE----- + > MIIFLTCCBBWgAwIBAgIMYaHn0gAAAABR02amMA0GCSqGSIb3DQEBCwUAMIG+MQsw + > CQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2Vl + > IHd3dy5lbnRydXN0Lm5ldC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkg + > RW50cnVzdCwgSW5jLiAtIGZvciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQD + > EylFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0x + > NDEyMTUxNTI1MDNaFw0zMDEwMTUxNTU1MDNaMIG6MQswCQYDVQQGEwJVUzEWMBQG + > A1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5l + > dC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMTQgRW50cnVzdCwgSW5jLiAt + > IGZvciBhdXRob3JpemVkIHVzZSBvbmx5MS4wLAYDVQQDEyVFbnRydXN0IENlcnRp + > ZmljYXRpb24gQXV0aG9yaXR5IC0gTDFNMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A + > MIIBCgKCAQEA0IHBOSPCsdHs91fdVSQ2kSAiSPf8ylIKsKs/M7WwhAf23056sPuY + > Ij0BrFb7cW2y7rmgD1J3q5iTvjOK64dex6qwymmPQwhqPyK/MzlG1ZTy4kwFItln + > gJHxBEoOm3yiydJs/TwJhL39axSagR3nioPvYRZ1R5gTOw2QFpi/iuInMlOZmcP7 + > lhw192LtjL1JcdJDQ6Gh4yEqI3CodT2ybEYGYW8YZ+QpfrI8wcVfCR5uRE7sIZlY + > FUj0VUgqtzS0BeN8SYwAWN46lsw53GEzVc4qLj/RmWLoquY0djGqr3kplnjLgRSv + > adr7BLlZg0SqCU+01CwBnZuUMWstoc/B5QIDAQABo4IBKzCCAScwDgYDVR0PAQH/ + > BAQDAgEGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8E + > CDAGAQH/AgEAMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29j + > c3AuZW50cnVzdC5uZXQwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL2NybC5lbnRy + > dXN0Lm5ldC9nMmNhLmNybDA7BgNVHSAENDAyMDAGBFUdIAAwKDAmBggrBgEFBQcC + > ARYaaHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwHQYDVR0OBBYEFMP30LUqMK2v + > DZEhcDlU3byJcMc6MB8GA1UdIwQYMBaAFGpyJnrQHu995ztpUdRsjZ+QEmarMA0G + > CSqGSIb3DQEBCwUAA4IBAQC0h8eEIhopwKR47PVPG7SEl2937tTPWa+oQ5YvHVje + > pvMVWy7ZQ5xMQrkXFxGttLFBx2YMIoYFp7Qi+8VoaIqIMthx1hGOjlJ+Qgld2dnA + > DizvRGsf2yS89byxqsGK5Wbb0CTz34mmi/5e0FC6m3UAyQhKS3Q/WFOv9rihbISY + > Jnz8/DVRZZgeO2x28JkPxLkJ1YXYJKd/KsLak0tkuHB8VCnTglTVz6WUwzOeTTRn + > 4Dh2ZgCN0C/GqwmqcvrOLzWJ/MDtBgO334wlV/H77yiI2YIowAQPlIFpI+CRKMVe + > 1QzX1CA778n4wI+nQc1XRG5sZ2L+hN/nYNjvv9QiHg3n + > -----END CERTIFICATE----- + > -----BEGIN CERTIFICATE----- + > MIIE/zCCA+egAwIBAgIEUdNARDANBgkqhkiG9w0BAQsFADCBsDELMAkGA1UEBhMC + > VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 + > Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW + > KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl + > cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE0MDkyMjE3MTQ1N1oXDTI0MDkyMzAx + > MzE1M1owgb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgw + > JgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQL + > EzAoYykgMjAwOSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9u + > bHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 + > eSAtIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuoS2ctueDGvi + > mekwAad26jK4lUEaydphTlhyz/72gnm/c2EGCqUn2LNf00VOHHLWTjLycooP94MZ + > 0GqAgABFHrDH55q/ElcnHKNoLwqHvWprDl5l8xx31dSFjXAhtLMy54ui1YY5ArG4 + > 0kfO5MlJxDun3vtUfVe+8OhuwnmyOgtV4lCYFjITXC94VsHClLPyWuQnmp8k18bs + > 0JslguPMwsRFxYyXegZrKhGfqQpuSDtv29QRGUL3jwe/9VNfnD70FyzmaaxOMkxi + > d+q36OW7NLwZi66cUee3frVTsTMi5W3PcDwa+uKbZ7aD9I2lr2JMTeBYrGQ0EgP4 + > to2UYySkcQIDAQABo4IBDzCCAQswDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI + > MAYBAf8CAQEwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz + > cC5lbnRydXN0Lm5ldDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1 + > c3QubmV0L3Jvb3RjYTEuY3JsMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsGAQUF + > BwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NQUzAdBgNVHQ4EFgQUanImetAe + > 733nO2lR1GyNn5ASZqswHwYDVR0jBBgwFoAUaJDkZ6SmU4DHhmak8fdLQ/uEvW0w + > DQYJKoZIhvcNAQELBQADggEBAGkzg/woem99751V68U+ep11s8zDODbZNKIoaBjq + > HmnTvefQd9q4AINOSs9v0fHBIj905PeYSZ6btp7h25h3LVY0sag82f3Azce/BQPU + > AsXx5cbaCKUTx2IjEdFhMB1ghEXveajGJpOkt800uGnFE/aRs8lFc3a2kvZ2Clvh + > A0e36SlMkTIjN0qcNdh4/R0f5IOJJICtt/nP5F2l1HHEhVtwH9s/HAHrGkUmMRTM + > Zb9n3srMM2XlQZHXN75BGpad5oqXnafOrE6aPb0BoGrZTyIAi0TVaWJ7LuvMuueS + > fWlnPfy4fN5Bh9Bp6roKGHoalUOzeXEodm2h+1dK7E3IDhA= + > -----END CERTIFICATE----- + > EOF + +Dump a live cert chain (squareup-chain.crt) with leaf flag + + $ certigo --verbose dump squareup-chain-leaf-only.crt --first + ** CERTIFICATE 1 ** + Input Format: PEM + Serial: 260680855742043049380997676879525498489 + Valid: 2016-07-15 20:15 UTC to 2017-07-31 20:45 UTC + Signature: SHA256-RSA + Subject Info: + \tCountry: US (esc) + \tProvince: California (esc) + \tLocality: San Francisco (esc) + \tEV Incorporation Country: US (esc) + \tEV Incorporation Province: Delaware (esc) + \tOrganization: Square, Inc. (esc) + \tBusiness Category: Private Organization (esc) + \tEV Incorporation Registration Number: 4699855 (esc) + \tCommonName: www.squareup.com (esc) + Issuer Info: + \tCountry: US (esc) + \tOrganization: Entrust, Inc. (esc) + \tOrganizational Unit: See www.entrust.net/legal-terms (esc) + \tOrganizational Unit: (c) 2014 Entrust, Inc. - for authorized use only (esc) + \tCommonName: Entrust Certification Authority - L1M (esc) + Subject Key ID: D4:17:14:6F:0B:C5:20:A1:D6:FE:21:7E:DC:9E:F8:57:9C:ED:AE:6A + Authority Key ID: C3:F7:D0:B5:2A:30:AD:AF:0D:91:21:70:39:54:DD:BC:89:70:C7:3A + Basic Constraints: CA:false + OCSP Server(s): + \thttp://ocsp.entrust.net (esc) + Issuing Certificate URL(s): + \thttp://aia.entrust.net/l1m-chain256.cer (esc) + Key Usage: + \tDigital Signature (esc) + \tKey Encipherment (esc) + Extended Key Usage: + \tServer Auth (esc) + \tClient Auth (esc) + DNS Names: + \twww.squareup.com, squareup.com, (esc) + \taccount.squareup.com, mkt.com, www.mkt.com, (esc) + \tmarket.squareup.com, gosq.com, www.gosq.com, (esc) + \tgosq.co, www.gosq.co (esc) + diff --git a/tests/dump-pkcs12-chain-to-pem-first-only.t b/tests/dump-pkcs12-chain-to-pem-first-only.t new file mode 100644 index 0000000..93acb16 --- /dev/null +++ b/tests/dump-pkcs12-chain-to-pem-first-only.t @@ -0,0 +1,117 @@ +Set up test data. + + $ base64 --decode > example.p12 < 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 + > TlfIjZvesIFwoYNabyLXBAiheBe+L56f7AICCAA= + > EOF + +Dump PEM blocks from a PKCS12 keystore. Only the first pem block should be shown +(note that the private key is not printed as a result) + + $ certigo --verbose dump --first --pem --password password example.p12 + -----BEGIN CERTIFICATE----- + MIIEHzCCAgegAwIBAgIRAMNYYdrU6LgeLMBAy2UeGDowDQYJKoZIhvcNAQELBQAw + EzERMA8GA1UEAxMIQ2VydEF1dGgwHhcNMjIwMjIzMDI0MTIxWhcNMjMwODIzMDI0 + MzE2WjAQMQ4wDAYDVQQDEwVBbGljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC + AQoCggEBALx3haTR1grI1eO38F75leR6SnaD6puo9VJX1BScl8ZsWNCqE6XV6Fj+ + Q5LWWYjui9qZW+uLdFCsYfyshzjvJ7+2xOwTAbAHP6GJjJqqLuaA1chFgFHepZVT + e0zf96PA1TDkcCILeeEw6qgoi8pafQxE3eLlLIPYYQMC0Y7QMk0B/5UFToTA1PCM + jstBe+QRjgzADGCbmn0mZulvZ9/aVCuLGuY8mhSEyJw6qxGwBrkbObZhVj4+fbfC + 0i0HoMBPHGIa5K2xJSCBliVynXCtdGzpFjH64uLn+ShzQPUir1lpRCFt4UPgpP1l + W4uSWg3WiF+XHokVjmlGpLjQWZZtIs0CAwEAAaNxMG8wDgYDVR0PAQH/BAQDAgO4 + MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUrSU3Jr/d + 3TccQDrYn+0Z8vNRSAMwHwYDVR0jBBgwFoAU5GRfJoIow7TFwMIn8/QYzRf8U+gw + DQYJKoZIhvcNAQELBQADggIBAAz2a8UWg4qay3s8iOUiMH55l+O6KpBUlEDEvunJ + Q8EwueXWr5P4gfDuKorK7dg9fql5Q9N3Yj3c4a6+0HEN26jmPZb0xKQlqoQ72K6H + GbGEqXvcZ3Ai/EBH09e5DcM0lqEtre5ftBFespelQ423uDWTbWKZONOiaWEUkyUL + LBtPXVW514bctIwrusc7ReSJ3PW3f9rP4pIyjcA8ikUi2bc7m+Ti1qQQtbVRwJV2 + wJLCHqszIOhyZpq4Ni92auK9Gqvx3W3wSQQ74od0odkeCuHmsTOHOy5ug+0TTDf/ + ss+mmo8BFsOeAxVmVQoM0B3rbJeDiMiLX2BLFMHIqGKlTwLV3DtAotJhrRWpM3Ej + +iUHrAgh64P3m1x0t/yYy6HH3FuARLI8S9m7vCQPTOM67gF8A0sQfTVbrbM9VJ9Z + WrOL/ffwbkIakDXi4gEr1ednMyIyNwvbh9K+aLoHAzO1ZXGBqTZnb2eyjv6C/3zd + tHOWSHtgiH0VFeckpZc4UzOXzbcsDZk9xKWIxhFSqPcOZxhZLLBSXB9VZfkFAOcE + h01onBl0rqaFtkwb7gyz7h2+V04E3+YWS75I8GfiUi5EDgtEErY5AN6RgmP+nNoS + 26M7EEhpxkSJvoxyzyor2T+7SlIdoerMi4A0zHZ2M3tQP0nOoSbeJiz5QK72hcC5 + 4zi0 + -----END CERTIFICATE----- diff --git a/tests/dump-pkcs12-chain-to-pem.t b/tests/dump-pkcs12-chain-to-pem.t new file mode 100644 index 0000000..32f0b08 --- /dev/null +++ b/tests/dump-pkcs12-chain-to-pem.t @@ -0,0 +1,172 @@ +Set up test data. + + $ base64 --decode > example.p12 < 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 + > TlfIjZvesIFwoYNabyLXBAiheBe+L56f7AICCAA= + > EOF + +Dump PEM blocks from a PKCS12 keystore. Multiple pem blocks are displayed + + $ certigo --verbose dump --pem --password password example.p12 + -----BEGIN CERTIFICATE----- + MIIEHzCCAgegAwIBAgIRAMNYYdrU6LgeLMBAy2UeGDowDQYJKoZIhvcNAQELBQAw + EzERMA8GA1UEAxMIQ2VydEF1dGgwHhcNMjIwMjIzMDI0MTIxWhcNMjMwODIzMDI0 + MzE2WjAQMQ4wDAYDVQQDEwVBbGljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC + AQoCggEBALx3haTR1grI1eO38F75leR6SnaD6puo9VJX1BScl8ZsWNCqE6XV6Fj+ + Q5LWWYjui9qZW+uLdFCsYfyshzjvJ7+2xOwTAbAHP6GJjJqqLuaA1chFgFHepZVT + e0zf96PA1TDkcCILeeEw6qgoi8pafQxE3eLlLIPYYQMC0Y7QMk0B/5UFToTA1PCM + jstBe+QRjgzADGCbmn0mZulvZ9/aVCuLGuY8mhSEyJw6qxGwBrkbObZhVj4+fbfC + 0i0HoMBPHGIa5K2xJSCBliVynXCtdGzpFjH64uLn+ShzQPUir1lpRCFt4UPgpP1l + W4uSWg3WiF+XHokVjmlGpLjQWZZtIs0CAwEAAaNxMG8wDgYDVR0PAQH/BAQDAgO4 + MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUrSU3Jr/d + 3TccQDrYn+0Z8vNRSAMwHwYDVR0jBBgwFoAU5GRfJoIow7TFwMIn8/QYzRf8U+gw + DQYJKoZIhvcNAQELBQADggIBAAz2a8UWg4qay3s8iOUiMH55l+O6KpBUlEDEvunJ + Q8EwueXWr5P4gfDuKorK7dg9fql5Q9N3Yj3c4a6+0HEN26jmPZb0xKQlqoQ72K6H + GbGEqXvcZ3Ai/EBH09e5DcM0lqEtre5ftBFespelQ423uDWTbWKZONOiaWEUkyUL + LBtPXVW514bctIwrusc7ReSJ3PW3f9rP4pIyjcA8ikUi2bc7m+Ti1qQQtbVRwJV2 + wJLCHqszIOhyZpq4Ni92auK9Gqvx3W3wSQQ74od0odkeCuHmsTOHOy5ug+0TTDf/ + ss+mmo8BFsOeAxVmVQoM0B3rbJeDiMiLX2BLFMHIqGKlTwLV3DtAotJhrRWpM3Ej + +iUHrAgh64P3m1x0t/yYy6HH3FuARLI8S9m7vCQPTOM67gF8A0sQfTVbrbM9VJ9Z + WrOL/ffwbkIakDXi4gEr1ednMyIyNwvbh9K+aLoHAzO1ZXGBqTZnb2eyjv6C/3zd + tHOWSHtgiH0VFeckpZc4UzOXzbcsDZk9xKWIxhFSqPcOZxhZLLBSXB9VZfkFAOcE + h01onBl0rqaFtkwb7gyz7h2+V04E3+YWS75I8GfiUi5EDgtEErY5AN6RgmP+nNoS + 26M7EEhpxkSJvoxyzyor2T+7SlIdoerMi4A0zHZ2M3tQP0nOoSbeJiz5QK72hcC5 + 4zi0 + -----END CERTIFICATE----- + -----BEGIN CERTIFICATE----- + MIIE5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhDZXJ0 + QXV0aDAeFw0yMjAyMjMwMjMzMjdaFw0yMzA4MjMwMjQzMTZaMBMxETAPBgNVBAMT + CENlcnRBdXRoMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvHQKjraI + FiUqfq3PHOuBYd5kDhFigiKMhgM5irokpdPA6ptZZ4fHXNRZnFt8JQDDPtIPSwph + OLRiVzj+y50SHdHTTZoVmtHJrsSMgIjUCGJnAYS77H+axE7bmHwzIJRc6Xo5ekGT + Jp83GuXPocLZ/9TH7SsrR8zFQhyfHnCM4TN0EMpHAe6TlW1GWUG/WKCc3uDSav5o + 2KdtN+Y/D5Ca1gpO0gu7RMCXveu/1Gf3eMDIHV0rUwOrs87nuTGD8zt9JpDP0UzU + q48xa14Wr9nM5q9sCuuHqzOD+o9zGoyTChnJLjzuVze7fY4J7n3U9bv1l30OGcAb + DGB9HuMvqwk7HSpG2ZqibCrGXcCjxaGaiHY6IIjfHgbeiXeG46xRAynTx0gLMcah + mWAbhC5fFsQvEWb8f6WO1UvhAmNVq7+No9RXM3ilEMHfLc/Q7l7OfP8Gw3x24mpS + nFUexOQJ3z3p3wP2nDX6q2dXJRNilqnny4A2xCDnzRK8o7hdo8tzXkNwE31jpAWz + 2+cGyHhoKWgwmm7XYJa/vAskQ3/9VCD9X+BvodWmTn6SqU+Q4yN0Vh051xRRbGAJ + QZjYbF1L+LOyfuB4PkHkiK7k314istCFFLqe/nz8QKtq0oBXPKAizV3MyFEz+uUD + IerMMo05QjiN+TR2Wbd2Dx+EwcJqoPhozDsCAwEAAaNFMEMwDgYDVR0PAQH/BAQD + AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFORkXyaCKMO0xcDCJ/P0 + GM0X/FPoMA0GCSqGSIb3DQEBCwUAA4ICAQAQV90RHcoS4HCaSbXwYOBZ0JDjlEPK + oZG1PMFsOP8J3YJPshybsLP6L+JxQ7tQbnswYdJO7YaDUkP91n+O5w4menfdfdY5 + A+QJvib18KGzurLSn+QU5uAUaT0TMfU7O906J1H4hUr9S/cQB9nvWLZbrtkIFo30 + RRocu8zt2/Q0C50rTSWD96Vgy8uHUThHhfpCbQCnFc4czm9SDhaEpgOyCBAqOZ4D + 9OeB/T+a13k/G8JZr3GhtS3Im7WFB1PLjrbbRHK03vVQMPoeg+/XjJclM8CtV34k + 0f1vTONmP4PX8wk8pqh9eyK0kIDf9bmxe4AEyycs49piT4lgToFEAsK+QrnWNsqR + 7R6RTg4lWviIdgm8/yHQz/15TyfuNk6cSNaEDPkEKx71cYjDjda3JtlrAgXeJ84x + Ox8+zQEuBummlvxvEhk2Cs9QHbL4DcgXbHijakuzOHKonzRiSDEBkm/JFizBB8+k + d6hgvaH2UkavFPq64s7/+lBw1akQ3AiT1CTq7pta5Eru352OqDdUS/iew8n5cZHi + PPGjoAhvUU+Ij8kFMe7ICuDy25jn/hxGbCbjuJHQikZJssX983cLd96/7d6dcqRU + 6hRqpe+kXdFNpxj/83JGXGLpU6obNBGg27n4o2SINsIIHci6mDGi0mbs08eEkyqL + 2GbYHPp6z2n/UQ== + -----END CERTIFICATE----- + -----BEGIN PRIVATE KEY----- + MIIEowIBAAKCAQEAvHeFpNHWCsjV47fwXvmV5HpKdoPqm6j1UlfUFJyXxmxY0KoT + pdXoWP5DktZZiO6L2plb64t0UKxh/KyHOO8nv7bE7BMBsAc/oYmMmqou5oDVyEWA + Ud6llVN7TN/3o8DVMORwIgt54TDqqCiLylp9DETd4uUsg9hhAwLRjtAyTQH/lQVO + hMDU8IyOy0F75BGODMAMYJuafSZm6W9n39pUK4sa5jyaFITInDqrEbAGuRs5tmFW + Pj59t8LSLQegwE8cYhrkrbElIIGWJXKdcK10bOkWMfri4uf5KHNA9SKvWWlEIW3h + Q+Ck/WVbi5JaDdaIX5ceiRWOaUakuNBZlm0izQIDAQABAoIBAEGv/tqVcF7N5Q67 + e4H+x6mcnft0uv6KAwcyKW8NrTCxbrs7rCFuzs7FwFObdhVt3zzPmuQb9OxxSK3C + jFbhtB7z2urVLQ9nV1w8Ds+RZUtduCVXZAQk7919/Umr/ioK+cNSu2qCSXadkAwQ + JbjflRoDnrqIWd2SOy3Le7KlCgMgiAqyRaEcvt9Gnc3vqKHEh3XA4z2sYBBECy29 + xzzWyq9U1Lzhf1xf0PrPQsxfeuxROFn7WZR2iP+SxI1N/mot2ne9dZRLY3pZjLl4 + 7SdNx9DJrfltJHHCIHDtGumpKe4Ob15uO4WQ86a/sMcmWW71h9Clpmue9tFYKM3a + A3NwZMECgYEA1/Fix/WaOkcU8+8ggSqjVS8Bg17U27RDi0n+1Kh6j41CGuUThrJC + tePmVs/gIT+o2v9iVcvB2hTun2NwLjAUXt4Fo49aAmzcW66uNxFmHVO7+h0xRNw5 + 67L94TjOwHGu1THbgWCVj/gOrlkYwYPxBKlN+IPqUNK1k/IUUJxlL1UCgYEA321d + cHzJ8Ps4SxRItu0EOyB95us7NzwkYfrWNybPJxuW74hotXHSvu0i127RZ/QZZd/F + paWRq51RRZe8HxDuuWsolWavRfaWSb1JyJ0n1balbI9/ESN/vcMhi1LusJ+A5p8V + ou7U5bqXqZnzo19umFTr74P0RkJdk7OJye4KdZkCgYBoBpWyhCM23dU/Kbv73WFv + gMR217Es4asEJ7JGGZ9pFgB5Wk9MvQUcAFyPB3cOLU+XqB1j/VM2To0hZVK+PVUi + 2kvXHhCbSHvjAsRULOKHUDYm5/c7F+gjHkflPmuDE4DInUsECVYjU7kmzi750ijC + ORkhldLD+q2URrL4nk60PQKBgHMXI/3Q2jlfP0U1gqtv9jD68L/lxlASk+9Axd4N + CMJtbNegncdxhYzCHKN6uzXgQMEAfxBv9FTBqd6+ZbJfB4nN0E79YSYZ+pqrfflw + MtfcyOPeGydZ8PBwNrRNGRU0ZLLnmb6fZl2cO4mq+xzaCN9BR3POtiMHBqsR3dV9 + 4DdpAoGBALFruy/DW2urx5oFyppFv0xVLuRHzwW5gFyVSoa2/7TElBBQ7luXOVvX + QulcA8LTBbp9ZlJ6O5SrNKZW3QpSWeuRoGaxsfs6Yq1sGDbyiWtuufDknAqEiZg6 + LGdAI9LSB35HihR3AzNW+FsQ3p1aiEuWETFH9BaNLE2CdVJ7mLlT + -----END PRIVATE KEY-----