(linenum→info "unix/slp.c:2238")

openssl/0.9.8g/doc/openssl.txt

    1: 
    2: This is some preliminary documentation for OpenSSL.
    3: 
    4: Contents:
    5: 
    6:  OpenSSL X509V3 extension configuration
    7:  X509V3 Extension code: programmers guide
    8:  PKCS#12 Library
    9: 
   10: 
   11: ==============================================================================
   12:                OpenSSL X509V3 extension configuration
   13: ==============================================================================
   14: 
   15: OpenSSL X509V3 extension configuration: preliminary documentation.
   16: 
   17: INTRODUCTION.
   18: 
   19: For OpenSSL 0.9.2 the extension code has be considerably enhanced. It is now
   20: possible to add and print out common X509 V3 certificate and CRL extensions.
   21: 
   22: BEGINNERS NOTE
   23: 
   24: For most simple applications you don't need to know too much about extensions:
   25: the default openssl.cnf values will usually do sensible things.
   26: 
   27: If you want to know more you can initially quickly look through the sections
   28: describing how the standard OpenSSL utilities display and add extensions and
   29: then the list of supported extensions.
   30: 
   31: For more technical information about the meaning of extensions see:
   32: 
   33: http://www.imc.org/ietf-pkix/
   34: http://home.netscape.com/eng/security/certs.html
   35: 
   36: PRINTING EXTENSIONS.
   37: 
   38: Extension values are automatically printed out for supported extensions.
   39: 
   40: openssl x509 -in cert.pem -text
   41: openssl crl -in crl.pem -text
   42: 
   43: will give information in the extension printout, for example:
   44: 
   45:         X509v3 extensions:
   46:             X509v3 Basic Constraints: 
   47:                 CA:TRUE
   48:             X509v3 Subject Key Identifier: 
   49:                 73:FE:F7:59:A7:E1:26:84:44:D6:44:36:EE:79:1A:95:7C:B1:4B:15
   50:             X509v3 Authority Key Identifier: 
   51:                 keyid:73:FE:F7:59:A7:E1:26:84:44:D6:44:36:EE:79:1A:95:7C:B1:4B:15, DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/Email=email@1.address/Email=email@2.address, serial:00
   52:             X509v3 Key Usage: 
   53:                 Certificate Sign, CRL Sign
   54:             X509v3 Subject Alternative Name: 
   55:                 email:email@1.address, email:email@2.address
   56: 
   57: CONFIGURATION FILES.
   58: 
   59: The OpenSSL utilities 'ca' and 'req' can now have extension sections listing
   60: which certificate extensions to include. In each case a line:
   61: 
   62: x509_extensions = extension_section
   63: 
   64: indicates which section contains the extensions. In the case of 'req' the
   65: extension section is used when the -x509 option is present to create a
   66: self signed root certificate.
   67: 
   68: The 'x509' utility also supports extensions when it signs a certificate.
   69: The -extfile option is used to set the configuration file containing the
   70: extensions. In this case a line with:
   71: 
   72: extensions = extension_section
   73: 
   74: in the nameless (default) section is used. If no such line is included then
   75: it uses the default section.
   76: 
   77: You can also add extensions to CRLs: a line
   78: 
   79: crl_extensions = crl_extension_section
   80: 
   81: will include extensions when the -gencrl option is used with the 'ca' utility.
   82: You can add any extension to a CRL but of the supported extensions only
   83: issuerAltName and authorityKeyIdentifier make any real sense. Note: these are
   84: CRL extensions NOT CRL *entry* extensions which cannot currently be generated.
   85: CRL entry extensions can be displayed.
   86: 
   87: NB. At this time Netscape Communicator rejects V2 CRLs: to get an old V1 CRL
   88: you should not include a crl_extensions line in the configuration file.
   89: 
   90: As with all configuration files you can use the inbuilt environment expansion
   91: to allow the values to be passed in the environment. Therefore if you have
   92: several extension sections used for different purposes you can have a line:
   93: 
   94: x509_extensions = $ENV::ENV_EXT
   95: 
   96: and set the ENV_EXT environment variable before calling the relevant utility.
   97: 
   98: EXTENSION SYNTAX.
   99: 
  100: Extensions have the basic form:
  101: 
  102: extension_name=[critical,] extension_options
  103: 
  104: the use of the critical option makes the extension critical. Extreme caution
  105: should be made when using the critical flag. If an extension is marked
  106: as critical then any client that does not understand the extension should
  107: reject it as invalid. Some broken software will reject certificates which
  108: have *any* critical extensions (these violates PKIX but we have to live
  109: with it).
  110: 
  111: There are three main types of extension: string extensions, multi-valued
  112: extensions, and raw extensions.
  113: 
  114: String extensions simply have a string which contains either the value itself
  115: or how it is obtained.
  116: 
  117: For example:
  118: 
  119: nsComment="This is a Comment"
  120: 
  121: Multi-valued extensions have a short form and a long form. The short form
  122: is a list of names and values:
  123: 
  124: basicConstraints=critical,CA:true,pathlen:1
  125: 
  126: The long form allows the values to be placed in a separate section:
  127: 
  128: basicConstraints=critical,@bs_section
  129: 
  130: [bs_section]
  131: 
  132: CA=true
  133: pathlen=1
  134: 
  135: Both forms are equivalent. However it should be noted that in some cases the
  136: same name can appear multiple times, for example,
  137: 
  138: subjectAltName=email:steve@here,email:steve@there
  139: 
  140: in this case an equivalent long form is:
  141: 
  142: subjectAltName=@alt_section
  143: 
  144: [alt_section]
  145: 
  146: email.1=steve@here
  147: email.2=steve@there
  148: 
  149: This is because the configuration file code cannot handle the same name
  150: occurring twice in the same section.
  151: 
  152: The syntax of raw extensions is governed by the extension code: it can
  153: for example contain data in multiple sections. The correct syntax to
  154: use is defined by the extension code itself: check out the certificate
  155: policies extension for an example.
  156: 
  157: There are two ways to encode arbitrary extensions.
  158: 
  159: The first way is to use the word ASN1 followed by the extension content
  160: using the same syntax as ASN1_generate_nconf(). For example:
  161: 
  162: 1.2.3.4=critical,ASN1:UTF8String:Some random data
  163: 
  164: 1.2.3.4=ASN1:SEQUENCE:seq_sect
  165: 
  166: [seq_sect]
  167: 
  168: field1 = UTF8:field1
  169: field2 = UTF8:field2
  170: 
  171: It is also possible to use the word DER to include arbitrary data in any
  172: extension.
  173: 
  174: 1.2.3.4=critical,DER:01:02:03:04
  175: 1.2.3.4=DER:01020304
  176: 
  177: The value following DER is a hex dump of the DER encoding of the extension
  178: Any extension can be placed in this form to override the default behaviour.
  179: For example:
  180: 
  181: basicConstraints=critical,DER:00:01:02:03
  182: 
  183: WARNING: DER should be used with caution. It is possible to create totally
  184: invalid extensions unless care is taken.
  185: 
  186: CURRENTLY SUPPORTED EXTENSIONS.
  187: 
  188: If you aren't sure about extensions then they can be largely ignored: its only
  189: when you want to do things like restrict certificate usage when you need to
  190: worry about them. 
  191: 
  192: The only extension that a beginner might want to look at is Basic Constraints.
  193: If in addition you want to try Netscape object signing the you should also
  194: look at Netscape Certificate Type.
  195: 
  196: Literal String extensions.
  197: 
  198: In each case the 'value' of the extension is placed directly in the
  199: extension. Currently supported extensions in this category are: nsBaseUrl,
  200: nsRevocationUrl, nsCaRevocationUrl, nsRenewalUrl, nsCaPolicyUrl,
  201: nsSslServerName and nsComment.
  202: 
  203: For example:
  204: 
  205: nsComment="This is a test comment"
  206: 
  207: Bit Strings.
  208: 
  209: Bit string extensions just consist of a list of supported bits, currently
  210: two extensions are in this category: PKIX keyUsage and the Netscape specific
  211: nsCertType.
  212: 
  213: nsCertType (netscape certificate type) takes the flags: client, server, email,
  214: objsign, reserved, sslCA, emailCA, objCA.
  215: 
  216: keyUsage (PKIX key usage) takes the flags: digitalSignature, nonRepudiation,
  217: keyEncipherment, dataEncipherment, keyAgreement, keyCertSign, cRLSign,
  218: encipherOnly, decipherOnly.
  219: 
  220: For example:
  221: 
  222: nsCertType=server
  223: 
  224: keyUsage=digitalSignature, nonRepudiation
  225: 
  226: Hints on Netscape Certificate Type.
  227: 
  228: Other than Basic Constraints this is the only extension a beginner might
  229: want to use, if you want to try Netscape object signing, otherwise it can
  230: be ignored.
  231: 
  232: If you want a certificate that can be used just for object signing then:
  233: 
  234: nsCertType=objsign
  235: 
  236: will do the job. If you want to use it as a normal end user and server
  237: certificate as well then
  238: 
  239: nsCertType=objsign,email,server
  240: 
  241: is more appropriate. You cannot use a self signed certificate for object
  242: signing (well Netscape signtool can but it cheats!) so you need to create
  243: a CA certificate and sign an end user certificate with it.
  244: 
  245: Side note: If you want to conform to the Netscape specifications then you
  246: should really also set:
  247: 
  248: nsCertType=objCA
  249: 
  250: in the *CA* certificate for just an object signing CA and
  251: 
  252: nsCertType=objCA,emailCA,sslCA
  253: 
  254: for everything. Current Netscape software doesn't enforce this so it can
  255: be omitted.
  256: 
  257: Basic Constraints.
  258: 
  259: This is generally the only extension you need to worry about for simple
  260: applications. If you want your certificate to be usable as a CA certificate
  261: (in addition to an end user certificate) then you set this to:
  262: 
  263: basicConstraints=CA:TRUE
  264: 
  265: if you want to be certain the certificate cannot be used as a CA then do:
  266: 
  267: basicConstraints=CA:FALSE
  268: 
  269: The rest of this section describes more advanced usage.
  270: 
  271: Basic constraints is a multi-valued extension that supports a CA and an
  272: optional pathlen option. The CA option takes the values true and false and
  273: pathlen takes an integer. Note if the CA option is false the pathlen option
  274: should be omitted. 
  275: 
  276: The pathlen parameter indicates the maximum number of CAs that can appear
  277: below this one in a chain. So if you have a CA with a pathlen of zero it can
  278: only be used to sign end user certificates and not further CAs. This all
  279: assumes that the software correctly interprets this extension of course.
  280: 
  281: Examples:
  282: 
  283: basicConstraints=CA:TRUE
  284: basicConstraints=critical,CA:TRUE, pathlen:0
  285: 
  286: NOTE: for a CA to be considered valid it must have the CA option set to
  287: TRUE. An end user certificate MUST NOT have the CA value set to true.
  288: According to PKIX recommendations it should exclude the extension entirely,
  289: however some software may require CA set to FALSE for end entity certificates.
  290: 
  291: Extended Key Usage.
  292: 
  293: This extensions consists of a list of usages.
  294: 
  295: These can either be object short names of the dotted numerical form of OIDs.
  296: While any OID can be used only certain values make sense. In particular the
  297: following PKIX, NS and MS values are meaningful:
  298: 
  299: Value                   Meaning
  300: -----                   -------
  301: serverAuth              SSL/TLS Web Server Authentication.
  302: clientAuth              SSL/TLS Web Client Authentication.
  303: codeSigning             Code signing.
  304: emailProtection         E-mail Protection (S/MIME).
  305: timeStamping            Trusted Timestamping
  306: msCodeInd               Microsoft Individual Code Signing (authenticode)
  307: msCodeCom               Microsoft Commercial Code Signing (authenticode)
  308: msCTLSign               Microsoft Trust List Signing
  309: msSGC                   Microsoft Server Gated Crypto
  310: msEFS                   Microsoft Encrypted File System
  311: nsSGC                   Netscape Server Gated Crypto
  312: 
  313: For example, under IE5 a CA can be used for any purpose: by including a list
  314: of the above usages the CA can be restricted to only authorised uses.
  315: 
  316: Note: software packages may place additional interpretations on certificate 
  317: use, in particular some usages may only work for selected CAs. Don't for example
  318: expect just including msSGC or nsSGC will automatically mean that a certificate
  319: can be used for SGC ("step up" encryption) otherwise anyone could use it.
  320: 
  321: Examples:
  322: 
  323: extendedKeyUsage=critical,codeSigning,1.2.3.4
  324: extendedKeyUsage=nsSGC,msSGC
  325: 
  326: Subject Key Identifier.
  327: 
  328: This is really a string extension and can take two possible values. Either
  329: a hex string giving details of the extension value to include or the word
  330: 'hash' which then automatically follow PKIX guidelines in selecting and
  331: appropriate key identifier. The use of the hex string is strongly discouraged.
  332: 
  333: Example: subjectKeyIdentifier=hash
  334: 
  335: Authority Key Identifier.
  336: 
  337: The authority key identifier extension permits two options. keyid and issuer:
  338: both can take the optional value "always".
  339: 
  340: If the keyid option is present an attempt is made to copy the subject key
  341: identifier from the parent certificate. If the value "always" is present
  342: then an error is returned if the option fails.
  343: 
  344: The issuer option copies the issuer and serial number from the issuer
  345: certificate. Normally this will only be done if the keyid option fails or
  346: is not included: the "always" flag will always include the value.
  347: 
  348: Subject Alternative Name.
  349: 
  350: The subject alternative name extension allows various literal values to be
  351: included in the configuration file. These include "email" (an email address)
  352: "URI" a uniform resource indicator, "DNS" (a DNS domain name), RID (a
  353: registered ID: OBJECT IDENTIFIER), IP (and IP address) and otherName.
  354: 
  355: Also the email option include a special 'copy' value. This will automatically
  356: include and email addresses contained in the certificate subject name in
  357: the extension.
  358: 
  359: otherName can include arbitrary data associated with an OID: the value
  360: should be the OID followed by a semicolon and the content in standard
  361: ASN1_generate_nconf() format.
  362: 
  363: Examples:
  364: 
  365: subjectAltName=email:copy,email:my@other.address,URI:http://my.url.here/
  366: subjectAltName=email:my@other.address,RID:1.2.3.4
  367: subjectAltName=otherName:1.2.3.4;UTF8:some other identifier
  368: 
  369: Issuer Alternative Name.
  370: 
  371: The issuer alternative name option supports all the literal options of
  372: subject alternative name. It does *not* support the email:copy option because
  373: that would not make sense. It does support an additional issuer:copy option
  374: that will copy all the subject alternative name values from the issuer 
  375: certificate (if possible).
  376: 
  377: Example:
  378: 
  379: issuserAltName = issuer:copy
  380: 
  381: Authority Info Access.
  382: 
  383: The authority information access extension gives details about how to access
  384: certain information relating to the CA. Its syntax is accessOID;location
  385: where 'location' has the same syntax as subject alternative name (except
  386: that email:copy is not supported). accessOID can be any valid OID but only
  387: certain values are meaningful for example OCSP and caIssuers. OCSP gives the
  388: location of an OCSP responder: this is used by Netscape PSM and other software.
  389: 
  390: Example:
  391: 
  392: authorityInfoAccess = OCSP;URI:http://ocsp.my.host/
  393: authorityInfoAccess = caIssuers;URI:http://my.ca/ca.html
  394: 
  395: CRL distribution points.
  396: 
  397: This is a multi-valued extension that supports all the literal options of
  398: subject alternative name. Of the few software packages that currently interpret
  399: this extension most only interpret the URI option.
  400: 
  401: Currently each option will set a new DistributionPoint with the fullName
  402: field set to the given value.
  403: 
  404: Other fields like cRLissuer and reasons cannot currently be set or displayed:
  405: at this time no examples were available that used these fields.
  406: 
  407: If you see this extension with <UNSUPPORTED> when you attempt to print it out
  408: or it doesn't appear to display correctly then let me know, including the
  409: certificate (mail me at steve@openssl.org) .
  410: 
  411: Examples:
  412: 
  413: crlDistributionPoints=URI:http://www.myhost.com/myca.crl
  414: crlDistributionPoints=URI:http://www.my.com/my.crl,URI:http://www.oth.com/my.crl
  415: 
  416: Certificate Policies.
  417: 
  418: This is a RAW extension. It attempts to display the contents of this extension:
  419: unfortunately this extension is often improperly encoded.
  420: 
  421: The certificate policies extension will rarely be used in practice: few
  422: software packages interpret it correctly or at all. IE5 does partially
  423: support this extension: but it needs the 'ia5org' option because it will
  424: only correctly support a broken encoding. Of the options below only the
  425: policy OID, explicitText and CPS options are displayed with IE5.
  426: 
  427: All the fields of this extension can be set by using the appropriate syntax.
  428: 
  429: If you follow the PKIX recommendations of not including any qualifiers and just
  430: using only one OID then you just include the value of that OID. Multiple OIDs
  431: can be set separated by commas, for example:
  432: 
  433: certificatePolicies= 1.2.4.5, 1.1.3.4
  434: 
  435: If you wish to include qualifiers then the policy OID and qualifiers need to
  436: be specified in a separate section: this is done by using the @section syntax
  437: instead of a literal OID value.
  438: 
  439: The section referred to must include the policy OID using the name
  440: policyIdentifier, cPSuri qualifiers can be included using the syntax:
  441: 
  442: CPS.nnn=value
  443: 
  444: userNotice qualifiers can be set using the syntax:
  445: 
  446: userNotice.nnn=@notice
  447: 
  448: The value of the userNotice qualifier is specified in the relevant section.
  449: This section can include explicitText, organization and noticeNumbers
  450: options. explicitText and organization are text strings, noticeNumbers is a
  451: comma separated list of numbers. The organization and noticeNumbers options
  452: (if included) must BOTH be present. If you use the userNotice option with IE5
  453: then you need the 'ia5org' option at the top level to modify the encoding:
  454: otherwise it will not be interpreted properly.
  455: 
  456: Example:
  457: 
  458: certificatePolicies=ia5org,1.2.3.4,1.5.6.7.8,@polsect
  459: 
  460: [polsect]
  461: 
  462: policyIdentifier = 1.3.5.8
  463: CPS.1="http://my.host.name/"
  464: CPS.2="http://my.your.name/"
  465: userNotice.1=@notice
  466: 
  467: [notice]
  468: 
  469: explicitText="Explicit Text Here"
  470: organization="Organisation Name"
  471: noticeNumbers=1,2,3,4
  472: 
  473: TECHNICAL NOTE: the ia5org option changes the type of the 'organization' field,
  474: according to PKIX it should be of type DisplayText but Verisign uses an 
  475: IA5STRING and IE5 needs this too.
  476: 
  477: Display only extensions.
  478: 
  479: Some extensions are only partially supported and currently are only displayed
  480: but cannot be set. These include private key usage period, CRL number, and
  481: CRL reason.
  482: 
  483: ==============================================================================
  484:                 X509V3 Extension code: programmers guide
  485: ==============================================================================
  486: 
  487: The purpose of the extension code is twofold. It allows an extension to be
  488: created from a string or structure describing its contents and it prints out an
  489: extension in a human or machine readable form.
  490: 
  491: 1. Initialisation and cleanup.
  492: 
  493: No special initialisation is needed before calling the extension functions.
  494: You used to have to call X509V3_add_standard_extensions(); but this is no longer
  495: required and this function no longer does anything.
  496: 
  497: void X509V3_EXT_cleanup(void);
  498: 
  499: This function should be called to cleanup the extension code if any custom
  500: extensions have been added. If no custom extensions have been added then this
  501: call does nothing. After this call all custom extension code is freed up but
  502: you can still use the standard extensions.
  503: 
  504: 2. Printing and parsing extensions.
  505: 
  506: The simplest way to print out extensions is via the standard X509 printing
  507: routines: if you use the standard X509_print() function, the supported
  508: extensions will be printed out automatically.
  509: 
  510: The following functions allow finer control over extension display:
  511: 
  512: int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, int flag, int indent);
  513: int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
  514: 
  515: These two functions print out an individual extension to a BIO or FILE pointer.
  516: Currently the flag argument is unused and should be set to 0. The 'indent'
  517: argument is the number of spaces to indent each line.
  518: 
  519: void *X509V3_EXT_d2i(X509_EXTENSION *ext);
  520: 
  521: This function parses an extension and returns its internal structure. The
  522: precise structure you get back depends on the extension being parsed. If the
  523: extension if basicConstraints you will get back a pointer to a
  524: BASIC_CONSTRAINTS structure. Check out the source in crypto/x509v3 for more
  525: details about the structures returned. The returned structure should be freed
  526: after use using the relevant free function, BASIC_CONSTRAINTS_free() for 
  527: example.
  528: 
  529: void    *  X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx);
  530: void    *  X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx);
  531: void    *  X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx);
  532: void    * X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx);
  533: 
  534: These functions combine the operations of searching for extensions and
  535: parsing them. They search a certificate, a CRL a CRL entry or a stack
  536: of extensions respectively for extension whose NID is 'nid' and return
  537: the parsed result of NULL if an error occurred. For example:
  538: 
  539: BASIC_CONSTRAINTS *bs;
  540: bs = X509_get_ext_d2i(cert, NID_basic_constraints, NULL, NULL);
  541: 
  542: This will search for the basicConstraints extension and either return
  543: it value or NULL. NULL can mean either the extension was not found, it
  544: occurred more than once or it could not be parsed.
  545: 
  546: If 'idx' is NULL then an extension is only parsed if it occurs precisely
  547: once. This is standard behaviour because extensions normally cannot occur
  548: more than once. If however more than one extension of the same type can
  549: occur it can be used to parse successive extensions for example:
  550: 
  551: int i;
  552: void *ext;
  553: 
  554: i = -1;
  555: for(;;) {
  556:         ext = X509_get_ext_d2i(x, nid, crit, &idx);
  557:         if(ext == NULL) break;
  558:          /* Do something with ext */
  559: }
  560: 
  561: If 'crit' is not NULL and the extension was found then the int it points to
  562: is set to 1 for critical extensions and 0 for non critical. Therefore if the
  563: function returns NULL but 'crit' is set to 0 or 1 then the extension was
  564: found but it could not be parsed.
  565: 
  566: The int pointed to by crit will be set to -1 if the extension was not found
  567: and -2 if the extension occurred more than once (this will only happen if
  568: idx is NULL). In both cases the function will return NULL.
  569: 
  570: 3. Generating extensions.
  571: 
  572: An extension will typically be generated from a configuration file, or some
  573: other kind of configuration database.
  574: 
  575: int X509V3_EXT_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section,
  576:                                                                  X509 *cert);
  577: int X509V3_EXT_CRL_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section,
  578:                                                                  X509_CRL *crl);
  579: 
  580: These functions add all the extensions in the given section to the given
  581: certificate or CRL. They will normally be called just before the certificate
  582: or CRL is due to be signed. Both return 0 on error on non zero for success.
  583: 
  584: In each case 'conf' is the LHASH pointer of the configuration file to use
  585: and 'section' is the section containing the extension details.
  586: 
  587: See the 'context functions' section for a description of the ctx parameter.
  588: 
  589: 
  590: X509_EXTENSION *X509V3_EXT_conf(LHASH *conf, X509V3_CTX *ctx, char *name,
  591:                                                                  char *value);
  592: 
  593: This function returns an extension based on a name and value pair, if the
  594: pair will not need to access other sections in a config file (or there is no
  595: config file) then the 'conf' parameter can be set to NULL.
  596: 
  597: X509_EXTENSION *X509V3_EXT_conf_nid(char *conf, X509V3_CTX *ctx, int nid,
  598:                                                                  char *value);
  599: 
  600: This function creates an extension in the same way as X509V3_EXT_conf() but
  601: takes the NID of the extension rather than its name.
  602: 
  603: For example to produce basicConstraints with the CA flag and a path length of
  604: 10:
  605: 
  606: x = X509V3_EXT_conf_nid(NULL, NULL, NID_basic_constraints,"CA:TRUE,pathlen:10");
  607: 
  608: 
  609: X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
  610: 
  611: This function sets up an extension from its internal structure. The ext_nid
  612: parameter is the NID of the extension and 'crit' is the critical flag.
  613: 
  614: 4. Context functions.
  615: 
  616: The following functions set and manipulate an extension context structure.
  617: The purpose of the extension context is to allow the extension code to
  618: access various structures relating to the "environment" of the certificate:
  619: for example the issuers certificate or the certificate request.
  620: 
  621: void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
  622:                                  X509_REQ *req, X509_CRL *crl, int flags);
  623: 
  624: This function sets up an X509V3_CTX structure with details of the certificate
  625: environment: specifically the issuers certificate, the subject certificate,
  626: the certificate request and the CRL: if these are not relevant or not
  627: available then they can be set to NULL. The 'flags' parameter should be set
  628: to zero.
  629: 
  630: X509V3_set_ctx_test(ctx)
  631: 
  632: This macro is used to set the 'ctx' structure to a 'test' value: this is to
  633: allow the syntax of an extension (or configuration file) to be tested.
  634: 
  635: X509V3_set_ctx_nodb(ctx)
  636: 
  637: This macro is used when no configuration database is present.
  638: 
  639: void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH *lhash);
  640: 
  641: This function is used to set the configuration database when it is an LHASH
  642: structure: typically a configuration file.
  643: 
  644: The following functions are used to access a configuration database: they
  645: should only be used in RAW extensions.
  646: 
  647: char * X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
  648: 
  649: This function returns the value of the parameter "name" in "section", or NULL
  650: if there has been an error.
  651: 
  652: void X509V3_string_free(X509V3_CTX *ctx, char *str);