zedwood

parse x509 cert subject openssl

Aug 6th, 2013
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.90 KB | None | 0 0
  1. //g++ parse_cert.cpp -lssl -lcrypto
  2. #include <openssl/x509.h>
  3. #include <openssl/pem.h>
  4. #include <openssl/x509v3.h>
  5.  
  6.  
  7. void load_pem(const char* pem_c_str)
  8. {
  9.     BIO *bio_mem = BIO_new(BIO_s_mem());
  10.     BIO_puts(bio_mem, pem_c_str);
  11.     X509 * x509 = PEM_read_bio_X509(bio_mem, NULL, NULL, NULL);
  12.     X509 * x = x509;
  13.  
  14.     BIO *bio_out = BIO_new_fp(stdout, BIO_NOCLOSE);
  15.  
  16.     //PEM_write_bio_X509(bio_out, x509);//STD OUT the PEM
  17.     //X509_print(bio_out, x509);//STD OUT the details
  18.     //X509_print_ex(bio_out, x509, XN_FLAG_COMPAT, X509_FLAG_COMPAT);//STD OUT the details
  19.  
  20.     //Version
  21.     //long l = X509_get_version(x509);
  22.     //BIO_printf(bio_out, "Version: %ld\n", l+1);
  23.  
  24.     //Serial Number
  25.     //int i=0;
  26.     //ASN1_INTEGER *bs = X509_get_serialNumber(x);
  27.     //BIO_printf(bio_out,"Serial: ");
  28.     //for(i=0; i<bs->length; i++)
  29.     //{
  30.     //    BIO_printf(bio_out,"%02x",bs->data[i] );
  31.     //}
  32.     //BIO_printf(bio_out,"\n");
  33.  
  34.     //Signature Algorithm
  35.     //X509_signature_print(bio_out, x->sig_alg, NULL);
  36.  
  37.     //Issuer
  38.     //BIO_printf(bio_out,"Issuer: ");
  39.     //X509_NAME_print(bio_out,X509_get_issuer_name(x),0);
  40.     //BIO_printf(bio_out,"\n");
  41.  
  42.     //Validity Dates
  43.     //BIO_printf(bio_out,"Valid From: ");
  44.     //ASN1_TIME_print(bio_out,X509_get_notBefore(x));
  45.     //BIO_printf(bio_out,"\n");
  46.     //
  47.     //BIO_printf(bio_out,"Valid Until: ");
  48.     //ASN1_TIME_print(bio_out,X509_get_notAfter(x));
  49.     //BIO_printf(bio_out,"\n");
  50.  
  51.     //Subject
  52.    
  53.     BIO_printf(bio_out,"Subject: ");
  54.     X509_NAME_print(bio_out, X509_get_subject_name(x) ,0);
  55.     BIO_printf(bio_out,"\n");
  56.  
  57.     int i, nid;
  58.     X509_NAME_ENTRY * ne;
  59.     ASN1_STRING * str = NULL;
  60.     ASN1_OBJECT * obj;
  61.     char *sname;
  62.  
  63.     int qq= X509_NAME_entry_count( X509_get_subject_name(x) );
  64.     printf("parse %d\n", qq);
  65.  
  66.     X509_NAME * name = X509_get_subject_name(x);
  67.     for (i = 0; i < X509_NAME_entry_count(name); i++)
  68.     {
  69.         unsigned char *to_add;
  70.         int to_add_len;
  71.  
  72.         ne  = X509_NAME_get_entry(name, i);
  73.         obj = X509_NAME_ENTRY_get_object(ne);
  74.         nid = OBJ_obj2nid(obj);//number indicating type, CN, C, L etc
  75.         sname = (char *) OBJ_nid2sn(nid);
  76.         //sname = (char *) OBJ_nid2ln(nid);
  77.  
  78.         str = X509_NAME_ENTRY_get_data(ne);
  79.         if (ASN1_STRING_type(str) != V_ASN1_UTF8STRING) {
  80.             to_add_len = ASN1_STRING_to_UTF8(&to_add, str);
  81.         } else {
  82.             to_add = ASN1_STRING_data(str);
  83.             to_add_len = ASN1_STRING_length(str);
  84.         }
  85.  
  86.         printf(": %s : ", sname);
  87.         for(int j=0; j<to_add_len; j++)
  88.         {
  89.             printf("%c", to_add[j]);
  90.         }
  91.         printf("\n");
  92.     }
  93.     printf("\n");
  94.  
  95.     //Public Key
  96.     //EVP_PKEY *pkey=X509_get_pubkey(x);
  97.     //EVP_PKEY_print_public(bio_out, pkey, 0, NULL);
  98.     //EVP_PKEY_free(pkey);
  99.  
  100.     //Extensions
  101.     //X509_CINF *ci=x->cert_info;
  102. //    X509V3_extensions_print(bio_out, "X509v3 extensions", ci->extensions, X509_FLAG_COMPAT, 0);
  103.  
  104.     //Signature
  105.     //X509_signature_print(bio_out, x->sig_alg, x->signature);
  106.  
  107.  
  108.     BIO_free(bio_out);
  109.     BIO_free(bio_mem);
  110.     X509_free(x509);
  111. }
  112.  
  113. //----------------------------------------------------------------------
  114.  
  115. int main(int argc, char **argv)
  116. {
  117.     const char c0[] = "-----BEGIN CERTIFICATE-----" "\n"
  118. "MIIGfzCCBWegAwIBAgIQSVCinGH6MkvjJZjRyjK9nTANBgkqhkiG9w0BAQUFADCB" "\n"
  119. "jjELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G" "\n"
  120. "A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxNDAyBgNV" "\n"
  121. "BAMTK0NPTU9ETyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIgQ0Ew" "\n"
  122. "HhcNMTIwMjI5MDAwMDAwWhcNMTQwMjI4MjM1OTU5WjCCAW8xEjAQBgNVBAMTCXd3" "\n"
  123. "dy5yZC5pbzERMA8GA1UEAxMIcmRpby5jb20xDjAMBgNVBAMTBXJkLmlvMRUwEwYD" "\n"
  124. "VQQDEwxhcGkucmRpby5jb20xEjAQBgNVBAMTCWFwaS5yZC5pbzEQMA4GA1UEBRMH" "\n"
  125. "NDU4NjAwNzETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgECEwhE" "\n"
  126. "ZWxhd2FyZTEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdhbml6YXRpb24xCzAJBgNVBAYT" "\n"
  127. "AlVTMQ4wDAYDVQQREwU5NDEwMzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBG" "\n"
  128. "cmFuY2lzY28xFzAVBgNVBAkTDjE1NTAgQnJ5YW50IHN0MRMwEQYDVQQKEwpSZGlv" "\n"
  129. "LCBJbmMuMSMwIQYDVQQLExpDT01PRE8gRVYgTXVsdGktRG9tYWluIFNTTDEVMBMG" "\n"
  130. "A1UEAxMMd3d3LnJkaW8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC" "\n"
  131. "AQEAt0AgYOe8EBJNVBAuSJFLKHRKZn0/ObCLBFG4xVH/5fb1rfYHBT1XSjjOqR3t" "\n"
  132. "iGC/A3esF8YC7TuHQcTLVephx0DtJv1ASxRg3zPM8ebBRsuul18N0W+sY1aNXpkd" "\n"
  133. "36quxvjg5UdBrAweuekJ7OTSZcCe2Ry/SKBeZSWWtkWsI4krCLv7JaKUwxw2h+Hn" "\n"
  134. "TAZSBLVxz/mixF0WYdepYwnq2Hm7XvvVEIQ7wxOQ9bA7iCevLojZOnb39BT2QII7" "\n"
  135. "cy8AB47RZdfYg7UwaO3bST2rauA4MKar7/Ozqc0aemNFpLatJfgv07cydiuj9fsd" "\n"
  136. "5aE/c8is8C9M9+7MmSMkcNEgGwIDAQABo4IB8zCCAe8wHwYDVR0jBBgwFoAUiERR" "\n"
  137. "/1AqaV4tiPQhutkM8s7L6nwwHQYDVR0OBBYEFCrYw8bfrYJ61NS2yYx6/CnhjzT4" "\n"
  138. "MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF" "\n"
  139. "BwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgEFATArMCkGCCsG" "\n"
  140. "AQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzBTBgNVHR8ETDBK" "\n"
  141. "MEigRqBEhkJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9FeHRlbmRlZFZh" "\n"
  142. "bGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5jcmwwgYQGCCsGAQUFBwEBBHgwdjBOBggr" "\n"
  143. "BgEFBQcwAoZCaHR0cDovL2NydC5jb21vZG9jYS5jb20vQ09NT0RPRXh0ZW5kZWRW" "\n"
  144. "YWxpZGF0aW9uU2VjdXJlU2VydmVyQ0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8v" "\n"
  145. "b2NzcC5jb21vZG9jYS5jb20wTAYDVR0RBEUwQ4IMd3d3LnJkaW8uY29tgglhcGku" "\n"
  146. "cmQuaW+CDGFwaS5yZGlvLmNvbYIFcmQuaW+CCHJkaW8uY29tggl3d3cucmQuaW8w" "\n"
  147. "DQYJKoZIhvcNAQEFBQADggEBAKFd4bPVFRyrlqIKPtrtMuqGqid6685ohxf0cv52" "\n"
  148. "sjdRYwLVTjnZOrmkDdNaF3R2A1ZlVMRN+67rK+qfY5sTeijFcudV3/i0PDtOFRwP" "\n"
  149. "6yYVD2uZmYkxfPiW309HPmDF+EzhxpVjWlTQEOwkfFLTmJmwl3Qu2Kffp8F1ENXW" "\n"
  150. "OTVNvj5VtMghvzu68PpzKl1VjlOR4Ej9NCwh1dUjNKEoTPzvpehXsIZ7jHSpX/T1" "\n"
  151. "wSSt9ckiechDdpgZXTzHgbxHNibK0Uhh+QhkBgYMj5F8qj5BlBhWAWqQa/VnEdmr" "\n"
  152. "Pfo7U+QmadoqQd7qt06hE2hG1nfZ0vPJDbWV3oVSwG2Yt7I=" "\n"
  153. "-----END CERTIFICATE-----" "\n";
  154.  
  155. /*
  156.     const char c0[] = "-----BEGIN CERTIFICATE-----" "\n"
  157. "MIIFcDCCBFigAwIBAgIQIq/8wTgL/ZGwfN2wLvD1GjANBgkqhkiG9w0BAQUFADCB" "\n"
  158. "vDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL" "\n"
  159. "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug" "\n"
  160. "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDE2MDQGA1UEAxMt" "\n"
  161. "VmVyaVNpZ24gQ2xhc3MgMyBJbnRlcm5hdGlvbmFsIFNlcnZlciBDQSAtIEczMB4X" "\n"
  162. "DTExMTEyMzAwMDAwMFoXDTEzMTEyMzIzNTk1OVowdDELMAkGA1UEBhMCVVMxDjAM" "\n"
  163. "BgNVBAgTBVRleGFzMRIwEAYDVQQHFAlTb3V0aGxha2UxEzARBgNVBAoUClNhYnJl" "\n"
  164. "IEluYy4xDDAKBgNVBAsUA1BTRDEeMBwGA1UEAxQVbXVsdGlyZXBvcnQuc2FicmUu" "\n"
  165. "Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqbnMxIO76upjtb7F" "\n"
  166. "H/y1wxN9XjZ91aNPjfCpkKeEl4kIyxGE9D+CSCRGMY4mVSf98XAK+KWzd6fUEQTv" "\n"
  167. "akD8E0x1r8r7ImDlwr6rY+EMCjEfG6EeQxD1gj3ApAZwtAjNbAywuaeq6lRexLyd" "\n"
  168. "slZVQak6qE4Uu1jslPiiJqFsmxFRfMzKEQLI0o94wXfYEkYX+SZWPvlYg0K5/fvG" "\n"
  169. "yoYx4MDSAV434q0xkNd1sMwC0i+FoCoDEYFKKjvOA83Tl49tjBfO11vKHhk6adLo" "\n"
  170. "P3yQvlnZKiKKJsdruX3WQyEYdLeMBVlc7Jn0WxWUVsWVcVuG1746ucrnXIm5ZNC+" "\n"
  171. "mTMlDwIDAQABo4IBszCCAa8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwQQYDVR0f" "\n"
  172. "BDowODA2oDSgMoYwaHR0cDovL1NWUkludGwtRzMtY3JsLnZlcmlzaWduLmNvbS9T" "\n"
  173. "VlJJbnRsRzMuY3JsMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwMwKjAoBggrBgEF" "\n"
  174. "BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTAoBgNVHSUEITAfBglg" "\n"
  175. "hkgBhvhCBAEGCCsGAQUFBwMBBggrBgEFBQcDAjByBggrBgEFBQcBAQRmMGQwJAYI" "\n"
  176. "KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTA8BggrBgEFBQcwAoYw" "\n"
  177. "aHR0cDovL1NWUkludGwtRzMtYWlhLnZlcmlzaWduLmNvbS9TVlJJbnRsRzMuY2Vy" "\n"
  178. "MG4GCCsGAQUFBwEMBGIwYKFeoFwwWjBYMFYWCWltYWdlL2dpZjAhMB8wBwYFKw4D" "\n"
  179. "AhoEFEtruSiWBgy70FI4mymsSweLIQUYMCYWJGh0dHA6Ly9sb2dvLnZlcmlzaWdu" "\n"
  180. "LmNvbS92c2xvZ28xLmdpZjANBgkqhkiG9w0BAQUFAAOCAQEAY6Dch6dlHNNF0PgM" "\n"
  181. "yDyD23R5Xr21C8LUSH+Y9dJ05VTgoxWlfkuNJ0xQEGR5smbr3QFbeM/8CT4oy4r7" "\n"
  182. "1wJkIVmw/C0kPhR7aIP1K9xZxkocMG+Ngk6zo8vfxRt9JuX+l1QV6KKc3CG4DaUf" "\n"
  183. "uBbn03xR7l+lZy0J7GNjlFx+JqEWagQyyceNqlSV+XQCx8K0v+SXLJsf3RdH3H2q" "\n"
  184. "fEoz7OuECmEGikIpKOKS8YqqFLft9BDNFgpaKHin2xKArN++VoxiBrEky4TgilYs" "\n"
  185. "1tQzP3UwWWsP3wCiG4O+QPhUmyfuSr6ynSyaSxTety6+634ypWirZIVNnJqxwfLu" "\n"
  186. "WZLGQQ==" "\n"
  187. "-----END CERTIFICATE-----";
  188. */
  189.     load_pem(c0);
  190. }
Advertisement
Add Comment
Please, Sign In to add comment