1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | x509v3_config - X509 V3 certificate extension configuration format
|
---|
6 |
|
---|
7 | =head1 DESCRIPTION
|
---|
8 |
|
---|
9 | Several of the OpenSSL utilities can add extensions to a certificate or
|
---|
10 | certificate request based on the contents of a configuration file.
|
---|
11 |
|
---|
12 | Typically the application will contain an option to point to an extension
|
---|
13 | section. Each line of the extension section takes the form:
|
---|
14 |
|
---|
15 | extension_name=[critical,] extension_options
|
---|
16 |
|
---|
17 | If B<critical> is present then the extension will be critical.
|
---|
18 |
|
---|
19 | The format of B<extension_options> depends on the value of B<extension_name>.
|
---|
20 |
|
---|
21 | There are four main types of extension: I<string> extensions, I<multi-valued>
|
---|
22 | extensions, I<raw> and I<arbitrary> extensions.
|
---|
23 |
|
---|
24 | String extensions simply have a string which contains either the value itself
|
---|
25 | or how it is obtained.
|
---|
26 |
|
---|
27 | For example:
|
---|
28 |
|
---|
29 | nsComment="This is a Comment"
|
---|
30 |
|
---|
31 | Multi-valued extensions have a short form and a long form. The short form
|
---|
32 | is a list of names and values:
|
---|
33 |
|
---|
34 | basicConstraints=critical,CA:true,pathlen:1
|
---|
35 |
|
---|
36 | The long form allows the values to be placed in a separate section:
|
---|
37 |
|
---|
38 | basicConstraints=critical,@bs_section
|
---|
39 |
|
---|
40 | [bs_section]
|
---|
41 |
|
---|
42 | CA=true
|
---|
43 | pathlen=1
|
---|
44 |
|
---|
45 | Both forms are equivalent.
|
---|
46 |
|
---|
47 | The syntax of raw extensions is governed by the extension code: it can
|
---|
48 | for example contain data in multiple sections. The correct syntax to
|
---|
49 | use is defined by the extension code itself: check out the certificate
|
---|
50 | policies extension for an example.
|
---|
51 |
|
---|
52 | If an extension type is unsupported then the I<arbitrary> extension syntax
|
---|
53 | must be used, see the L<ARBITRARY EXTENSIONS|/"ARBITRARY EXTENSIONS"> section for more details.
|
---|
54 |
|
---|
55 | =head1 STANDARD EXTENSIONS
|
---|
56 |
|
---|
57 | The following sections describe each supported extension in detail.
|
---|
58 |
|
---|
59 | =head2 Basic Constraints.
|
---|
60 |
|
---|
61 | This is a multi valued extension which indicates whether a certificate is
|
---|
62 | a CA certificate. The first (mandatory) name is B<CA> followed by B<TRUE> or
|
---|
63 | B<FALSE>. If B<CA> is B<TRUE> then an optional B<pathlen> name followed by an
|
---|
64 | non-negative value can be included.
|
---|
65 |
|
---|
66 | For example:
|
---|
67 |
|
---|
68 | basicConstraints=CA:TRUE
|
---|
69 |
|
---|
70 | basicConstraints=CA:FALSE
|
---|
71 |
|
---|
72 | basicConstraints=critical,CA:TRUE, pathlen:0
|
---|
73 |
|
---|
74 | A CA certificate B<must> include the basicConstraints value with the CA field
|
---|
75 | set to TRUE. An end user certificate must either set CA to FALSE or exclude the
|
---|
76 | extension entirely. Some software may require the inclusion of basicConstraints
|
---|
77 | with CA set to FALSE for end entity certificates.
|
---|
78 |
|
---|
79 | The pathlen parameter indicates the maximum number of CAs that can appear
|
---|
80 | below this one in a chain. So if you have a CA with a pathlen of zero it can
|
---|
81 | only be used to sign end user certificates and not further CAs.
|
---|
82 |
|
---|
83 |
|
---|
84 | =head2 Key Usage.
|
---|
85 |
|
---|
86 | Key usage is a multi valued extension consisting of a list of names of the
|
---|
87 | permitted key usages.
|
---|
88 |
|
---|
89 | The supported names are: digitalSignature, nonRepudiation, keyEncipherment,
|
---|
90 | dataEncipherment, keyAgreement, keyCertSign, cRLSign, encipherOnly
|
---|
91 | and decipherOnly.
|
---|
92 |
|
---|
93 | Examples:
|
---|
94 |
|
---|
95 | keyUsage=digitalSignature, nonRepudiation
|
---|
96 |
|
---|
97 | keyUsage=critical, keyCertSign
|
---|
98 |
|
---|
99 |
|
---|
100 | =head2 Extended Key Usage.
|
---|
101 |
|
---|
102 | This extensions consists of a list of usages indicating purposes for which
|
---|
103 | the certificate public key can be used for,
|
---|
104 |
|
---|
105 | These can either be object short names or the dotted numerical form of OIDs.
|
---|
106 | While any OID can be used only certain values make sense. In particular the
|
---|
107 | following PKIX, NS and MS values are meaningful:
|
---|
108 |
|
---|
109 | Value Meaning
|
---|
110 | ----- -------
|
---|
111 | serverAuth SSL/TLS Web Server Authentication.
|
---|
112 | clientAuth SSL/TLS Web Client Authentication.
|
---|
113 | codeSigning Code signing.
|
---|
114 | emailProtection E-mail Protection (S/MIME).
|
---|
115 | timeStamping Trusted Timestamping
|
---|
116 | OCSPSigning OCSP Signing
|
---|
117 | ipsecIKE ipsec Internet Key Exchange
|
---|
118 | msCodeInd Microsoft Individual Code Signing (authenticode)
|
---|
119 | msCodeCom Microsoft Commercial Code Signing (authenticode)
|
---|
120 | msCTLSign Microsoft Trust List Signing
|
---|
121 | msEFS Microsoft Encrypted File System
|
---|
122 |
|
---|
123 | Examples:
|
---|
124 |
|
---|
125 | extendedKeyUsage=critical,codeSigning,1.2.3.4
|
---|
126 | extendedKeyUsage=serverAuth,clientAuth
|
---|
127 |
|
---|
128 |
|
---|
129 | =head2 Subject Key Identifier.
|
---|
130 |
|
---|
131 | This is really a string extension and can take two possible values. Either
|
---|
132 | the word B<hash> which will automatically follow the guidelines in RFC3280
|
---|
133 | or a hex string giving the extension value to include. The use of the hex
|
---|
134 | string is strongly discouraged.
|
---|
135 |
|
---|
136 | Example:
|
---|
137 |
|
---|
138 | subjectKeyIdentifier=hash
|
---|
139 |
|
---|
140 |
|
---|
141 | =head2 Authority Key Identifier.
|
---|
142 |
|
---|
143 | The authority key identifier extension permits two options. keyid and issuer:
|
---|
144 | both can take the optional value "always".
|
---|
145 |
|
---|
146 | If the keyid option is present an attempt is made to copy the subject key
|
---|
147 | identifier from the parent certificate. If the value "always" is present
|
---|
148 | then an error is returned if the option fails.
|
---|
149 |
|
---|
150 | The issuer option copies the issuer and serial number from the issuer
|
---|
151 | certificate. This will only be done if the keyid option fails or
|
---|
152 | is not included unless the "always" flag will always include the value.
|
---|
153 |
|
---|
154 | Example:
|
---|
155 |
|
---|
156 | authorityKeyIdentifier=keyid,issuer
|
---|
157 |
|
---|
158 |
|
---|
159 | =head2 Subject Alternative Name.
|
---|
160 |
|
---|
161 | The subject alternative name extension allows various literal values to be
|
---|
162 | included in the configuration file. These include B<email> (an email address)
|
---|
163 | B<URI> a uniform resource indicator, B<DNS> (a DNS domain name), B<RID> (a
|
---|
164 | registered ID: OBJECT IDENTIFIER), B<IP> (an IP address), B<dirName>
|
---|
165 | (a distinguished name) and otherName.
|
---|
166 |
|
---|
167 | The email option include a special 'copy' value. This will automatically
|
---|
168 | include any email addresses contained in the certificate subject name in
|
---|
169 | the extension.
|
---|
170 |
|
---|
171 | The IP address used in the B<IP> options can be in either IPv4 or IPv6 format.
|
---|
172 |
|
---|
173 | The value of B<dirName> should point to a section containing the distinguished
|
---|
174 | name to use as a set of name value pairs. Multi values AVAs can be formed by
|
---|
175 | prefacing the name with a B<+> character.
|
---|
176 |
|
---|
177 | otherName can include arbitrary data associated with an OID: the value
|
---|
178 | should be the OID followed by a semicolon and the content in standard
|
---|
179 | L<ASN1_generate_nconf(3)> format.
|
---|
180 |
|
---|
181 | Examples:
|
---|
182 |
|
---|
183 | subjectAltName=email:copy,email:[email protected],URI:http://my.url.here/
|
---|
184 | subjectAltName=IP:192.168.7.1
|
---|
185 | subjectAltName=IP:13::17
|
---|
186 | subjectAltName=email:[email protected],RID:1.2.3.4
|
---|
187 | subjectAltName=otherName:1.2.3.4;UTF8:some other identifier
|
---|
188 |
|
---|
189 | subjectAltName=dirName:dir_sect
|
---|
190 |
|
---|
191 | [dir_sect]
|
---|
192 | C=UK
|
---|
193 | O=My Organization
|
---|
194 | OU=My Unit
|
---|
195 | CN=My Name
|
---|
196 |
|
---|
197 |
|
---|
198 | =head2 Issuer Alternative Name.
|
---|
199 |
|
---|
200 | The issuer alternative name option supports all the literal options of
|
---|
201 | subject alternative name. It does B<not> support the email:copy option because
|
---|
202 | that would not make sense. It does support an additional issuer:copy option
|
---|
203 | that will copy all the subject alternative name values from the issuer
|
---|
204 | certificate (if possible).
|
---|
205 |
|
---|
206 | Example:
|
---|
207 |
|
---|
208 | issuerAltName = issuer:copy
|
---|
209 |
|
---|
210 |
|
---|
211 | =head2 Authority Info Access.
|
---|
212 |
|
---|
213 | The authority information access extension gives details about how to access
|
---|
214 | certain information relating to the CA. Its syntax is accessOID;location
|
---|
215 | where I<location> has the same syntax as subject alternative name (except
|
---|
216 | that email:copy is not supported). accessOID can be any valid OID but only
|
---|
217 | certain values are meaningful, for example OCSP and caIssuers.
|
---|
218 |
|
---|
219 | Example:
|
---|
220 |
|
---|
221 | authorityInfoAccess = OCSP;URI:http://ocsp.my.host/
|
---|
222 | authorityInfoAccess = caIssuers;URI:http://my.ca/ca.html
|
---|
223 |
|
---|
224 |
|
---|
225 | =head2 CRL distribution points
|
---|
226 |
|
---|
227 | This is a multi-valued extension whose options can be either in name:value pair
|
---|
228 | using the same form as subject alternative name or a single value representing
|
---|
229 | a section name containing all the distribution point fields.
|
---|
230 |
|
---|
231 | For a name:value pair a new DistributionPoint with the fullName field set to
|
---|
232 | the given value both the cRLissuer and reasons fields are omitted in this case.
|
---|
233 |
|
---|
234 | In the single option case the section indicated contains values for each
|
---|
235 | field. In this section:
|
---|
236 |
|
---|
237 | If the name is "fullname" the value field should contain the full name
|
---|
238 | of the distribution point in the same format as subject alternative name.
|
---|
239 |
|
---|
240 | If the name is "relativename" then the value field should contain a section
|
---|
241 | name whose contents represent a DN fragment to be placed in this field.
|
---|
242 |
|
---|
243 | The name "CRLIssuer" if present should contain a value for this field in
|
---|
244 | subject alternative name format.
|
---|
245 |
|
---|
246 | If the name is "reasons" the value field should consist of a comma
|
---|
247 | separated field containing the reasons. Valid reasons are: "keyCompromise",
|
---|
248 | "CACompromise", "affiliationChanged", "superseded", "cessationOfOperation",
|
---|
249 | "certificateHold", "privilegeWithdrawn" and "AACompromise".
|
---|
250 |
|
---|
251 |
|
---|
252 | Simple examples:
|
---|
253 |
|
---|
254 | crlDistributionPoints=URI:http://myhost.com/myca.crl
|
---|
255 | crlDistributionPoints=URI:http://my.com/my.crl,URI:http://oth.com/my.crl
|
---|
256 |
|
---|
257 | Full distribution point example:
|
---|
258 |
|
---|
259 | crlDistributionPoints=crldp1_section
|
---|
260 |
|
---|
261 | [crldp1_section]
|
---|
262 |
|
---|
263 | fullname=URI:http://myhost.com/myca.crl
|
---|
264 | CRLissuer=dirName:issuer_sect
|
---|
265 | reasons=keyCompromise, CACompromise
|
---|
266 |
|
---|
267 | [issuer_sect]
|
---|
268 | C=UK
|
---|
269 | O=Organisation
|
---|
270 | CN=Some Name
|
---|
271 |
|
---|
272 | =head2 Issuing Distribution Point
|
---|
273 |
|
---|
274 | This extension should only appear in CRLs. It is a multi valued extension
|
---|
275 | whose syntax is similar to the "section" pointed to by the CRL distribution
|
---|
276 | points extension with a few differences.
|
---|
277 |
|
---|
278 | The names "reasons" and "CRLissuer" are not recognized.
|
---|
279 |
|
---|
280 | The name "onlysomereasons" is accepted which sets this field. The value is
|
---|
281 | in the same format as the CRL distribution point "reasons" field.
|
---|
282 |
|
---|
283 | The names "onlyuser", "onlyCA", "onlyAA" and "indirectCRL" are also accepted
|
---|
284 | the values should be a boolean value (TRUE or FALSE) to indicate the value of
|
---|
285 | the corresponding field.
|
---|
286 |
|
---|
287 | Example:
|
---|
288 |
|
---|
289 | issuingDistributionPoint=critical, @idp_section
|
---|
290 |
|
---|
291 | [idp_section]
|
---|
292 |
|
---|
293 | fullname=URI:http://myhost.com/myca.crl
|
---|
294 | indirectCRL=TRUE
|
---|
295 | onlysomereasons=keyCompromise, CACompromise
|
---|
296 |
|
---|
297 | [issuer_sect]
|
---|
298 | C=UK
|
---|
299 | O=Organisation
|
---|
300 | CN=Some Name
|
---|
301 |
|
---|
302 |
|
---|
303 | =head2 Certificate Policies.
|
---|
304 |
|
---|
305 | This is a I<raw> extension. All the fields of this extension can be set by
|
---|
306 | using the appropriate syntax.
|
---|
307 |
|
---|
308 | If you follow the PKIX recommendations and just using one OID then you just
|
---|
309 | include the value of that OID. Multiple OIDs can be set separated by commas,
|
---|
310 | for example:
|
---|
311 |
|
---|
312 | certificatePolicies= 1.2.4.5, 1.1.3.4
|
---|
313 |
|
---|
314 | If you wish to include qualifiers then the policy OID and qualifiers need to
|
---|
315 | be specified in a separate section: this is done by using the @section syntax
|
---|
316 | instead of a literal OID value.
|
---|
317 |
|
---|
318 | The section referred to must include the policy OID using the name
|
---|
319 | policyIdentifier, cPSuri qualifiers can be included using the syntax:
|
---|
320 |
|
---|
321 | CPS.nnn=value
|
---|
322 |
|
---|
323 | userNotice qualifiers can be set using the syntax:
|
---|
324 |
|
---|
325 | userNotice.nnn=@notice
|
---|
326 |
|
---|
327 | The value of the userNotice qualifier is specified in the relevant section.
|
---|
328 | This section can include explicitText, organization and noticeNumbers
|
---|
329 | options. explicitText and organization are text strings, noticeNumbers is a
|
---|
330 | comma separated list of numbers. The organization and noticeNumbers options
|
---|
331 | (if included) must BOTH be present. If you use the userNotice option with IE5
|
---|
332 | then you need the 'ia5org' option at the top level to modify the encoding:
|
---|
333 | otherwise it will not be interpreted properly.
|
---|
334 |
|
---|
335 | Example:
|
---|
336 |
|
---|
337 | certificatePolicies=ia5org,1.2.3.4,1.5.6.7.8,@polsect
|
---|
338 |
|
---|
339 | [polsect]
|
---|
340 |
|
---|
341 | policyIdentifier = 1.3.5.8
|
---|
342 | CPS.1="http://my.host.name/"
|
---|
343 | CPS.2="http://my.your.name/"
|
---|
344 | userNotice.1=@notice
|
---|
345 |
|
---|
346 | [notice]
|
---|
347 |
|
---|
348 | explicitText="Explicit Text Here"
|
---|
349 | organization="Organisation Name"
|
---|
350 | noticeNumbers=1,2,3,4
|
---|
351 |
|
---|
352 | The B<ia5org> option changes the type of the I<organization> field. In RFC2459
|
---|
353 | it can only be of type DisplayText. In RFC3280 IA5String is also permissible.
|
---|
354 | Some software (for example some versions of MSIE) may require ia5org.
|
---|
355 |
|
---|
356 | ASN1 type of explicitText can be specified by prepending B<UTF8>,
|
---|
357 | B<BMP> or B<VISIBLE> prefix followed by colon. For example:
|
---|
358 |
|
---|
359 | [notice]
|
---|
360 | explicitText="UTF8:Explicit Text Here"
|
---|
361 |
|
---|
362 | =head2 Policy Constraints
|
---|
363 |
|
---|
364 | This is a multi-valued extension which consisting of the names
|
---|
365 | B<requireExplicitPolicy> or B<inhibitPolicyMapping> and a non negative integer
|
---|
366 | value. At least one component must be present.
|
---|
367 |
|
---|
368 | Example:
|
---|
369 |
|
---|
370 | policyConstraints = requireExplicitPolicy:3
|
---|
371 |
|
---|
372 |
|
---|
373 | =head2 Inhibit Any Policy
|
---|
374 |
|
---|
375 | This is a string extension whose value must be a non negative integer.
|
---|
376 |
|
---|
377 | Example:
|
---|
378 |
|
---|
379 | inhibitAnyPolicy = 2
|
---|
380 |
|
---|
381 |
|
---|
382 | =head2 Name Constraints
|
---|
383 |
|
---|
384 | The name constraints extension is a multi-valued extension. The name should
|
---|
385 | begin with the word B<permitted> or B<excluded> followed by a B<;>. The rest of
|
---|
386 | the name and the value follows the syntax of subjectAltName except email:copy
|
---|
387 | is not supported and the B<IP> form should consist of an IP addresses and
|
---|
388 | subnet mask separated by a B</>.
|
---|
389 |
|
---|
390 | Examples:
|
---|
391 |
|
---|
392 | nameConstraints=permitted;IP:192.168.0.0/255.255.0.0
|
---|
393 |
|
---|
394 | nameConstraints=permitted;email:.somedomain.com
|
---|
395 |
|
---|
396 | nameConstraints=excluded;email:.com
|
---|
397 |
|
---|
398 |
|
---|
399 | =head2 OCSP No Check
|
---|
400 |
|
---|
401 | The OCSP No Check extension is a string extension but its value is ignored.
|
---|
402 |
|
---|
403 | Example:
|
---|
404 |
|
---|
405 | noCheck = ignored
|
---|
406 |
|
---|
407 |
|
---|
408 | =head2 TLS Feature (aka Must Staple)
|
---|
409 |
|
---|
410 | This is a multi-valued extension consisting of a list of TLS extension
|
---|
411 | identifiers. Each identifier may be a number (0..65535) or a supported name.
|
---|
412 | When a TLS client sends a listed extension, the TLS server is expected to
|
---|
413 | include that extension in its reply.
|
---|
414 |
|
---|
415 | The supported names are: B<status_request> and B<status_request_v2>.
|
---|
416 |
|
---|
417 | Example:
|
---|
418 |
|
---|
419 | tlsfeature = status_request
|
---|
420 |
|
---|
421 |
|
---|
422 | =head1 DEPRECATED EXTENSIONS
|
---|
423 |
|
---|
424 | The following extensions are non standard, Netscape specific and largely
|
---|
425 | obsolete. Their use in new applications is discouraged.
|
---|
426 |
|
---|
427 | =head2 Netscape String extensions.
|
---|
428 |
|
---|
429 | Netscape Comment (B<nsComment>) is a string extension containing a comment
|
---|
430 | which will be displayed when the certificate is viewed in some browsers.
|
---|
431 |
|
---|
432 | Example:
|
---|
433 |
|
---|
434 | nsComment = "Some Random Comment"
|
---|
435 |
|
---|
436 | Other supported extensions in this category are: B<nsBaseUrl>,
|
---|
437 | B<nsRevocationUrl>, B<nsCaRevocationUrl>, B<nsRenewalUrl>, B<nsCaPolicyUrl>
|
---|
438 | and B<nsSslServerName>.
|
---|
439 |
|
---|
440 |
|
---|
441 | =head2 Netscape Certificate Type
|
---|
442 |
|
---|
443 | This is a multi-valued extensions which consists of a list of flags to be
|
---|
444 | included. It was used to indicate the purposes for which a certificate could
|
---|
445 | be used. The basicConstraints, keyUsage and extended key usage extensions are
|
---|
446 | now used instead.
|
---|
447 |
|
---|
448 | Acceptable values for nsCertType are: B<client>, B<server>, B<email>,
|
---|
449 | B<objsign>, B<reserved>, B<sslCA>, B<emailCA>, B<objCA>.
|
---|
450 |
|
---|
451 |
|
---|
452 | =head1 ARBITRARY EXTENSIONS
|
---|
453 |
|
---|
454 | If an extension is not supported by the OpenSSL code then it must be encoded
|
---|
455 | using the arbitrary extension format. It is also possible to use the arbitrary
|
---|
456 | format for supported extensions. Extreme care should be taken to ensure that
|
---|
457 | the data is formatted correctly for the given extension type.
|
---|
458 |
|
---|
459 | There are two ways to encode arbitrary extensions.
|
---|
460 |
|
---|
461 | The first way is to use the word ASN1 followed by the extension content
|
---|
462 | using the same syntax as L<ASN1_generate_nconf(3)>.
|
---|
463 | For example:
|
---|
464 |
|
---|
465 | 1.2.3.4=critical,ASN1:UTF8String:Some random data
|
---|
466 |
|
---|
467 | 1.2.3.4=ASN1:SEQUENCE:seq_sect
|
---|
468 |
|
---|
469 | [seq_sect]
|
---|
470 |
|
---|
471 | field1 = UTF8:field1
|
---|
472 | field2 = UTF8:field2
|
---|
473 |
|
---|
474 | It is also possible to use the word DER to include the raw encoded data in any
|
---|
475 | extension.
|
---|
476 |
|
---|
477 | 1.2.3.4=critical,DER:01:02:03:04
|
---|
478 | 1.2.3.4=DER:01020304
|
---|
479 |
|
---|
480 | The value following DER is a hex dump of the DER encoding of the extension
|
---|
481 | Any extension can be placed in this form to override the default behaviour.
|
---|
482 | For example:
|
---|
483 |
|
---|
484 | basicConstraints=critical,DER:00:01:02:03
|
---|
485 |
|
---|
486 | =head1 WARNINGS
|
---|
487 |
|
---|
488 | There is no guarantee that a specific implementation will process a given
|
---|
489 | extension. It may therefore be sometimes possible to use certificates for
|
---|
490 | purposes prohibited by their extensions because a specific application does
|
---|
491 | not recognize or honour the values of the relevant extensions.
|
---|
492 |
|
---|
493 | The DER and ASN1 options should be used with caution. It is possible to create
|
---|
494 | totally invalid extensions if they are not used carefully.
|
---|
495 |
|
---|
496 | =head1 NOTES
|
---|
497 |
|
---|
498 | If an extension is multi-value and a field value must contain a comma the long
|
---|
499 | form must be used otherwise the comma would be misinterpreted as a field
|
---|
500 | separator. For example:
|
---|
501 |
|
---|
502 | subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar
|
---|
503 |
|
---|
504 | will produce an error but the equivalent form:
|
---|
505 |
|
---|
506 | subjectAltName=@subject_alt_section
|
---|
507 |
|
---|
508 | [subject_alt_section]
|
---|
509 | subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar
|
---|
510 |
|
---|
511 | is valid.
|
---|
512 |
|
---|
513 | Due to the behaviour of the OpenSSL B<conf> library the same field name
|
---|
514 | can only occur once in a section. This means that:
|
---|
515 |
|
---|
516 | subjectAltName=@alt_section
|
---|
517 |
|
---|
518 | [alt_section]
|
---|
519 |
|
---|
520 | email=steve@here
|
---|
521 | email=steve@there
|
---|
522 |
|
---|
523 | will only recognize the last value. This can be worked around by using the form:
|
---|
524 |
|
---|
525 | [alt_section]
|
---|
526 |
|
---|
527 | email.1=steve@here
|
---|
528 | email.2=steve@there
|
---|
529 |
|
---|
530 | =head1 SEE ALSO
|
---|
531 |
|
---|
532 | L<req(1)>, L<ca(1)>, L<x509(1)>,
|
---|
533 | L<ASN1_generate_nconf(3)>
|
---|
534 |
|
---|
535 | =head1 COPYRIGHT
|
---|
536 |
|
---|
537 | Copyright 2004-2019 The OpenSSL Project Authors. All Rights Reserved.
|
---|
538 |
|
---|
539 | Licensed under the OpenSSL license (the "License"). You may not use
|
---|
540 | this file except in compliance with the License. You can obtain a copy
|
---|
541 | in the file LICENSE in the source distribution or at
|
---|
542 | L<https://www.openssl.org/source/license.html>.
|
---|
543 |
|
---|
544 | =cut
|
---|