Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //g++ parse_cert.cpp -lssl -lcrypto
- #include <openssl/x509.h>
- #include <openssl/pem.h>
- #include <openssl/x509v3.h>
- void load_pem(const char* pem_c_str)
- {
- BIO *bio_mem = BIO_new(BIO_s_mem());
- BIO_puts(bio_mem, pem_c_str);
- X509 * x509 = PEM_read_bio_X509(bio_mem, NULL, NULL, NULL);
- X509 * x = x509;
- BIO *bio_out = BIO_new_fp(stdout, BIO_NOCLOSE);
- //PEM_write_bio_X509(bio_out, x509);//STD OUT the PEM
- //X509_print(bio_out, x509);//STD OUT the details
- //X509_print_ex(bio_out, x509, XN_FLAG_COMPAT, X509_FLAG_COMPAT);//STD OUT the details
- //Version
- //long l = X509_get_version(x509);
- //BIO_printf(bio_out, "Version: %ld\n", l+1);
- //Serial Number
- //int i=0;
- //ASN1_INTEGER *bs = X509_get_serialNumber(x);
- //BIO_printf(bio_out,"Serial: ");
- //for(i=0; i<bs->length; i++)
- //{
- // BIO_printf(bio_out,"%02x",bs->data[i] );
- //}
- //BIO_printf(bio_out,"\n");
- //Signature Algorithm
- //X509_signature_print(bio_out, x->sig_alg, NULL);
- //Issuer
- //BIO_printf(bio_out,"Issuer: ");
- //X509_NAME_print(bio_out,X509_get_issuer_name(x),0);
- //BIO_printf(bio_out,"\n");
- //Validity Dates
- //BIO_printf(bio_out,"Valid From: ");
- //ASN1_TIME_print(bio_out,X509_get_notBefore(x));
- //BIO_printf(bio_out,"\n");
- //
- //BIO_printf(bio_out,"Valid Until: ");
- //ASN1_TIME_print(bio_out,X509_get_notAfter(x));
- //BIO_printf(bio_out,"\n");
- //Subject
- BIO_printf(bio_out,"Subject: ");
- X509_NAME_print(bio_out, X509_get_subject_name(x) ,0);
- BIO_printf(bio_out,"\n");
- int i, nid;
- X509_NAME_ENTRY * ne;
- ASN1_STRING * str = NULL;
- ASN1_OBJECT * obj;
- char *sname;
- int qq= X509_NAME_entry_count( X509_get_subject_name(x) );
- printf("parse %d\n", qq);
- X509_NAME * name = X509_get_subject_name(x);
- for (i = 0; i < X509_NAME_entry_count(name); i++)
- {
- unsigned char *to_add;
- int to_add_len;
- ne = X509_NAME_get_entry(name, i);
- obj = X509_NAME_ENTRY_get_object(ne);
- nid = OBJ_obj2nid(obj);//number indicating type, CN, C, L etc
- sname = (char *) OBJ_nid2sn(nid);
- //sname = (char *) OBJ_nid2ln(nid);
- str = X509_NAME_ENTRY_get_data(ne);
- if (ASN1_STRING_type(str) != V_ASN1_UTF8STRING) {
- to_add_len = ASN1_STRING_to_UTF8(&to_add, str);
- } else {
- to_add = ASN1_STRING_data(str);
- to_add_len = ASN1_STRING_length(str);
- }
- printf(": %s : ", sname);
- for(int j=0; j<to_add_len; j++)
- {
- printf("%c", to_add[j]);
- }
- printf("\n");
- }
- printf("\n");
- //Public Key
- //EVP_PKEY *pkey=X509_get_pubkey(x);
- //EVP_PKEY_print_public(bio_out, pkey, 0, NULL);
- //EVP_PKEY_free(pkey);
- //Extensions
- //X509_CINF *ci=x->cert_info;
- // X509V3_extensions_print(bio_out, "X509v3 extensions", ci->extensions, X509_FLAG_COMPAT, 0);
- //Signature
- //X509_signature_print(bio_out, x->sig_alg, x->signature);
- BIO_free(bio_out);
- BIO_free(bio_mem);
- X509_free(x509);
- }
- //----------------------------------------------------------------------
- int main(int argc, char **argv)
- {
- const char c0[] = "-----BEGIN CERTIFICATE-----" "\n"
- "MIIGfzCCBWegAwIBAgIQSVCinGH6MkvjJZjRyjK9nTANBgkqhkiG9w0BAQUFADCB" "\n"
- "jjELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G" "\n"
- "A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxNDAyBgNV" "\n"
- "BAMTK0NPTU9ETyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIgQ0Ew" "\n"
- "HhcNMTIwMjI5MDAwMDAwWhcNMTQwMjI4MjM1OTU5WjCCAW8xEjAQBgNVBAMTCXd3" "\n"
- "dy5yZC5pbzERMA8GA1UEAxMIcmRpby5jb20xDjAMBgNVBAMTBXJkLmlvMRUwEwYD" "\n"
- "VQQDEwxhcGkucmRpby5jb20xEjAQBgNVBAMTCWFwaS5yZC5pbzEQMA4GA1UEBRMH" "\n"
- "NDU4NjAwNzETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgECEwhE" "\n"
- "ZWxhd2FyZTEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdhbml6YXRpb24xCzAJBgNVBAYT" "\n"
- "AlVTMQ4wDAYDVQQREwU5NDEwMzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBG" "\n"
- "cmFuY2lzY28xFzAVBgNVBAkTDjE1NTAgQnJ5YW50IHN0MRMwEQYDVQQKEwpSZGlv" "\n"
- "LCBJbmMuMSMwIQYDVQQLExpDT01PRE8gRVYgTXVsdGktRG9tYWluIFNTTDEVMBMG" "\n"
- "A1UEAxMMd3d3LnJkaW8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC" "\n"
- "AQEAt0AgYOe8EBJNVBAuSJFLKHRKZn0/ObCLBFG4xVH/5fb1rfYHBT1XSjjOqR3t" "\n"
- "iGC/A3esF8YC7TuHQcTLVephx0DtJv1ASxRg3zPM8ebBRsuul18N0W+sY1aNXpkd" "\n"
- "36quxvjg5UdBrAweuekJ7OTSZcCe2Ry/SKBeZSWWtkWsI4krCLv7JaKUwxw2h+Hn" "\n"
- "TAZSBLVxz/mixF0WYdepYwnq2Hm7XvvVEIQ7wxOQ9bA7iCevLojZOnb39BT2QII7" "\n"
- "cy8AB47RZdfYg7UwaO3bST2rauA4MKar7/Ozqc0aemNFpLatJfgv07cydiuj9fsd" "\n"
- "5aE/c8is8C9M9+7MmSMkcNEgGwIDAQABo4IB8zCCAe8wHwYDVR0jBBgwFoAUiERR" "\n"
- "/1AqaV4tiPQhutkM8s7L6nwwHQYDVR0OBBYEFCrYw8bfrYJ61NS2yYx6/CnhjzT4" "\n"
- "MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF" "\n"
- "BwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgEFATArMCkGCCsG" "\n"
- "AQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzBTBgNVHR8ETDBK" "\n"
- "MEigRqBEhkJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9FeHRlbmRlZFZh" "\n"
- "bGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5jcmwwgYQGCCsGAQUFBwEBBHgwdjBOBggr" "\n"
- "BgEFBQcwAoZCaHR0cDovL2NydC5jb21vZG9jYS5jb20vQ09NT0RPRXh0ZW5kZWRW" "\n"
- "YWxpZGF0aW9uU2VjdXJlU2VydmVyQ0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8v" "\n"
- "b2NzcC5jb21vZG9jYS5jb20wTAYDVR0RBEUwQ4IMd3d3LnJkaW8uY29tgglhcGku" "\n"
- "cmQuaW+CDGFwaS5yZGlvLmNvbYIFcmQuaW+CCHJkaW8uY29tggl3d3cucmQuaW8w" "\n"
- "DQYJKoZIhvcNAQEFBQADggEBAKFd4bPVFRyrlqIKPtrtMuqGqid6685ohxf0cv52" "\n"
- "sjdRYwLVTjnZOrmkDdNaF3R2A1ZlVMRN+67rK+qfY5sTeijFcudV3/i0PDtOFRwP" "\n"
- "6yYVD2uZmYkxfPiW309HPmDF+EzhxpVjWlTQEOwkfFLTmJmwl3Qu2Kffp8F1ENXW" "\n"
- "OTVNvj5VtMghvzu68PpzKl1VjlOR4Ej9NCwh1dUjNKEoTPzvpehXsIZ7jHSpX/T1" "\n"
- "wSSt9ckiechDdpgZXTzHgbxHNibK0Uhh+QhkBgYMj5F8qj5BlBhWAWqQa/VnEdmr" "\n"
- "Pfo7U+QmadoqQd7qt06hE2hG1nfZ0vPJDbWV3oVSwG2Yt7I=" "\n"
- "-----END CERTIFICATE-----" "\n";
- /*
- const char c0[] = "-----BEGIN CERTIFICATE-----" "\n"
- "MIIFcDCCBFigAwIBAgIQIq/8wTgL/ZGwfN2wLvD1GjANBgkqhkiG9w0BAQUFADCB" "\n"
- "vDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL" "\n"
- "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug" "\n"
- "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDE2MDQGA1UEAxMt" "\n"
- "VmVyaVNpZ24gQ2xhc3MgMyBJbnRlcm5hdGlvbmFsIFNlcnZlciBDQSAtIEczMB4X" "\n"
- "DTExMTEyMzAwMDAwMFoXDTEzMTEyMzIzNTk1OVowdDELMAkGA1UEBhMCVVMxDjAM" "\n"
- "BgNVBAgTBVRleGFzMRIwEAYDVQQHFAlTb3V0aGxha2UxEzARBgNVBAoUClNhYnJl" "\n"
- "IEluYy4xDDAKBgNVBAsUA1BTRDEeMBwGA1UEAxQVbXVsdGlyZXBvcnQuc2FicmUu" "\n"
- "Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqbnMxIO76upjtb7F" "\n"
- "H/y1wxN9XjZ91aNPjfCpkKeEl4kIyxGE9D+CSCRGMY4mVSf98XAK+KWzd6fUEQTv" "\n"
- "akD8E0x1r8r7ImDlwr6rY+EMCjEfG6EeQxD1gj3ApAZwtAjNbAywuaeq6lRexLyd" "\n"
- "slZVQak6qE4Uu1jslPiiJqFsmxFRfMzKEQLI0o94wXfYEkYX+SZWPvlYg0K5/fvG" "\n"
- "yoYx4MDSAV434q0xkNd1sMwC0i+FoCoDEYFKKjvOA83Tl49tjBfO11vKHhk6adLo" "\n"
- "P3yQvlnZKiKKJsdruX3WQyEYdLeMBVlc7Jn0WxWUVsWVcVuG1746ucrnXIm5ZNC+" "\n"
- "mTMlDwIDAQABo4IBszCCAa8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwQQYDVR0f" "\n"
- "BDowODA2oDSgMoYwaHR0cDovL1NWUkludGwtRzMtY3JsLnZlcmlzaWduLmNvbS9T" "\n"
- "VlJJbnRsRzMuY3JsMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwMwKjAoBggrBgEF" "\n"
- "BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTAoBgNVHSUEITAfBglg" "\n"
- "hkgBhvhCBAEGCCsGAQUFBwMBBggrBgEFBQcDAjByBggrBgEFBQcBAQRmMGQwJAYI" "\n"
- "KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTA8BggrBgEFBQcwAoYw" "\n"
- "aHR0cDovL1NWUkludGwtRzMtYWlhLnZlcmlzaWduLmNvbS9TVlJJbnRsRzMuY2Vy" "\n"
- "MG4GCCsGAQUFBwEMBGIwYKFeoFwwWjBYMFYWCWltYWdlL2dpZjAhMB8wBwYFKw4D" "\n"
- "AhoEFEtruSiWBgy70FI4mymsSweLIQUYMCYWJGh0dHA6Ly9sb2dvLnZlcmlzaWdu" "\n"
- "LmNvbS92c2xvZ28xLmdpZjANBgkqhkiG9w0BAQUFAAOCAQEAY6Dch6dlHNNF0PgM" "\n"
- "yDyD23R5Xr21C8LUSH+Y9dJ05VTgoxWlfkuNJ0xQEGR5smbr3QFbeM/8CT4oy4r7" "\n"
- "1wJkIVmw/C0kPhR7aIP1K9xZxkocMG+Ngk6zo8vfxRt9JuX+l1QV6KKc3CG4DaUf" "\n"
- "uBbn03xR7l+lZy0J7GNjlFx+JqEWagQyyceNqlSV+XQCx8K0v+SXLJsf3RdH3H2q" "\n"
- "fEoz7OuECmEGikIpKOKS8YqqFLft9BDNFgpaKHin2xKArN++VoxiBrEky4TgilYs" "\n"
- "1tQzP3UwWWsP3wCiG4O+QPhUmyfuSr6ynSyaSxTety6+634ypWirZIVNnJqxwfLu" "\n"
- "WZLGQQ==" "\n"
- "-----END CERTIFICATE-----";
- */
- load_pem(c0);
- }
Advertisement
Add Comment
Please, Sign In to add comment