@@ -43,6 +43,15 @@ class SSLCertificates
4343
4444 enum keyTypes { KeyNone=-1 , KeyRSA=1 , KeyDSA=2 , KeyEC = 3 };
4545 enum certType { NoCert=-1 , Certificate=0 , CSR=1 };
46+ static const size_t subjectElmntMaxSize=100 ;
47+ enum certSubjectList {
48+ CN_NID = NID_commonName,
49+ C_NID = NID_countryName,
50+ S_NID = NID_stateOrProvinceName,
51+ L_NID = NID_localityName,
52+ O_NID = NID_organizationName,
53+ OU_NID = NID_organizationalUnitName,
54+ email_NID = 0 };
4655
4756 /* *
4857 * @brief set_key_params : set parameters for all keys
@@ -118,6 +127,15 @@ class SSLCertificates
118127 * check ssl errors
119128 */
120129 int get_cert_HUM (char * Skey,size_t maxlength);
130+ /* *
131+ * @brief get_DN_Elmt_from_name
132+ * @param char * CN : returned element name
133+ * @param size_t maxlength
134+ * @param X509_NAME_st* certname
135+ * @param NID int : NID of name element
136+ * @return 0 = OK, 2 overflow, 1 error/not found.
137+ */
138+ int get_DN_Elmt_from_name (char * CN,size_t maxlength, X509_NAME2* certname, int NID);
121139 /* *
122140 * @brief get_CN_from_name
123141 * @param char * CN
@@ -126,6 +144,10 @@ class SSLCertificates
126144 * @return 0 = OK, 2 overflow, 1 error.
127145 */
128146 int get_CN_from_name (char * CN,size_t maxlength, X509_NAME2* certname);
147+
148+ int get_cert_subject_from_name (certType certORcsr,std::string* oCN, std::string* oC, std::string* oS,
149+ std::string* oL, std::string* oO, std::string* oOU,
150+ std::string* omail);
129151 /* *
130152 * @brief get_cert_CN : get CN of certificate (copy of openssl wiki)
131153 * @param CN : CN of certificate
@@ -318,20 +340,70 @@ class SSLCertificates
318340 typedef struct x509Extension {
319341 char name[50 ]; // !< Name of extension
320342 int NID; // !< NID of extension
321- char values[200 ]; // !< possible values, comma separated
343+ char values[500 ]; // !< possible values, comma separated
344+ bool critical; // !< used to get extensions
322345 } x509Extension; // !< Structure for x509 extension array
323346 /* not declared as static if it can be read from openssl in future release */
324347 x509Extension X509ExtensionHelp[9 ] = {
325- {" basicConstraints" ,NID_basic_constraints," CA:TRUE,CA:FALSE,pathlen:<num>" },
326- {" keyUsage" ,NID_key_usage," digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment,keyAgreement,keyCertSign,cRLSign,encipherOnly,decipherOnly" },
327- {" subjectAltName" ,NID_subject_alt_name," URI:http://<site>,email:<mail>,IP:<IP4/6>" },
328- {" crlDistributionPoints" ,NID_crl_distribution_points," URI:http://<site>" },
329- {" extendedKeyUsage" ,NID_ext_key_usage," serverAuth,clientAuth,codeSigning,emailProtection,timeStamping,OCSPSigning,ipsecIKE,msCodeInd,msCodeCom,msCTLSign,msEFS" },
330- {" subjectKeyIdentifier" ,NID_subject_key_identifier," <key>" },
331- {SN_authority_key_identifier,NID_authority_key_identifier," keyid:<key>" },
332- {" certificatePolicies" ,NID_certificate_policies," 1.2.4.5" },
333- {" policyConstraints" ,NID_policy_constraints," requireExplicitPolicy:<num>,inhibitPolicyMapping:<num>" } // !<list of common X509v3 extensions
348+ {" basicConstraints" ,NID_basic_constraints," CA:TRUE,CA:FALSE,pathlen:<num>" , false },
349+ {" keyUsage" ,NID_key_usage," digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment,keyAgreement,keyCertSign,cRLSign,encipherOnly,decipherOnly" , false },
350+ {" subjectAltName" ,NID_subject_alt_name," URI:http://<site>,email:<mail>,IP:<IP4/6>" , false },
351+ {" crlDistributionPoints" ,NID_crl_distribution_points," URI:http://<site>" , false },
352+ {" extendedKeyUsage" ,NID_ext_key_usage," serverAuth,clientAuth,codeSigning,emailProtection,timeStamping,OCSPSigning,ipsecIKE,msCodeInd,msCodeCom,msCTLSign,msEFS" , false },
353+ {" subjectKeyIdentifier" ,NID_subject_key_identifier," <key>" , false },
354+ {SN_authority_key_identifier,NID_authority_key_identifier," keyid:<key>" , false },
355+ {" certificatePolicies" ,NID_certificate_policies," 1.2.4.5" , false },
356+ {" policyConstraints" ,NID_policy_constraints," requireExplicitPolicy:<num>,inhibitPolicyMapping:<num>" , false } // !<list of common X509v3 extensions
334357 };
358+ /* From : https://www.openssl.org/docs/man1.1.0/man3/X509V3_EXT_d2i.html
359+
360+ RFC5280
361+ Basic Constraints NID_basic_constraints
362+ Key Usage NID_key_usage
363+ Extended Key Usage NID_ext_key_usage
364+
365+ Subject Key Identifier NID_subject_key_identifier
366+ Authority Key Identifier NID_authority_key_identifier
367+
368+ Private Key Usage Period NID_private_key_usage_period
369+
370+ Subject Alternative Name NID_subject_alt_name
371+ Issuer Alternative Name NID_issuer_alt_name
372+
373+ Authority Information Access NID_info_access
374+ Subject Information Access NID_sinfo_access
375+
376+ Name Constraints NID_name_constraints
377+
378+ Certificate Policies NID_certificate_policies
379+ Policy Mappings NID_policy_mappings
380+ Policy Constraints NID_policy_constraints
381+ Inhibit Any Policy NID_inhibit_any_policy
382+
383+ TLS Feature NID_tlsfeature
384+
385+ RFC5280
386+ CRL Number NID_crl_number
387+ CRL Distribution Points NID_crl_distribution_points
388+ Delta CRL Indicator NID_delta_crl
389+ Freshest CRL NID_freshest_crl
390+ Invalidity Date NID_invalidity_date
391+ Issuing Distribution Point NID_issuing_distribution_point
392+
393+ OSCP
394+ OCSP Nonce NID_id_pkix_OCSP_Nonce
395+ OCSP CRL ID NID_id_pkix_OCSP_CrlID
396+ Acceptable OCSP Responses NID_id_pkix_OCSP_acceptableResponses
397+ OCSP No Check NID_id_pkix_OCSP_noCheck
398+ OCSP Archive Cutoff NID_id_pkix_OCSP_archiveCutoff
399+ OCSP Service Locator NID_id_pkix_OCSP_serviceLocator
400+ Hold Instruction Code NID_hold_instruction_code
401+
402+ RFC6962
403+ CT Precertificate SCTs NID_ct_precert_scts
404+ CT Certificate SCTs NID_ct_cert_scts
405+ */
406+
335407 int X509ExtensionHelpNum=8 ; // !< Number of X509ExtensionHelp
336408
337409 /* *
@@ -343,7 +415,12 @@ class SSLCertificates
343415 */
344416 int x509_extension_add (std::string extensionNameI, std::string extensionValI, int extensionCriticalI);
345417
346-
418+ /* *
419+ * @brief x509_extension_get : get all X509v3 extensions from cert
420+ * @param extensions vector<x509Extension> * : values returned
421+ * @return 0 : success, 1 : error
422+ */
423+ int x509_extension_get (std::vector<x509Extension>* extensions);
347424private:
348425
349426 EVP_MD* useDigest; // !< Digest to use
0 commit comments