Import OpenSSL-0.9.8i.
[dragonfly.git] / crypto / openssl-0.9.7d / doc / apps / req.pod
blobe2b5d0d8ec222b10aba824393fe29137f9114f9c
2 =pod
4 =head1 NAME
6 req - PKCS#10 certificate request and certificate generating utility.
8 =head1 SYNOPSIS
10 B<openssl> B<req>
11 [B<-inform PEM|DER>]
12 [B<-outform PEM|DER>]
13 [B<-in filename>]
14 [B<-passin arg>]
15 [B<-out filename>]
16 [B<-passout arg>]
17 [B<-text>]
18 [B<-pubkey>]
19 [B<-noout>]
20 [B<-verify>]
21 [B<-modulus>]
22 [B<-new>]
23 [B<-rand file(s)>]
24 [B<-newkey rsa:bits>]
25 [B<-newkey dsa:file>]
26 [B<-nodes>]
27 [B<-key filename>]
28 [B<-keyform PEM|DER>]
29 [B<-keyout filename>]
30 [B<-[md5|sha1|md2|mdc2]>]
31 [B<-config filename>]
32 [B<-subj arg>]
33 [B<-x509>]
34 [B<-days n>]
35 [B<-set_serial n>]
36 [B<-asn1-kludge>]
37 [B<-newhdr>]
38 [B<-extensions section>]
39 [B<-reqexts section>]
40 [B<-utf8>]
41 [B<-nameopt>]
42 [B<-batch>]
43 [B<-verbose>]
44 [B<-engine id>]
46 =head1 DESCRIPTION
48 The B<req> command primarily creates and processes certificate requests
49 in PKCS#10 format. It can additionally create self signed certificates
50 for use as root CAs for example.
52 =head1 COMMAND OPTIONS
54 =over 4
56 =item B<-inform DER|PEM>
58 This specifies the input format. The B<DER> option uses an ASN1 DER encoded
59 form compatible with the PKCS#10. The B<PEM> form is the default format: it
60 consists of the B<DER> format base64 encoded with additional header and
61 footer lines.
63 =item B<-outform DER|PEM>
65 This specifies the output format, the options have the same meaning as the 
66 B<-inform> option.
68 =item B<-in filename>
70 This specifies the input filename to read a request from or standard input
71 if this option is not specified. A request is only read if the creation
72 options (B<-new> and B<-newkey>) are not specified.
74 =item B<-passin arg>
76 the input file password source. For more information about the format of B<arg>
77 see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
79 =item B<-out filename>
81 This specifies the output filename to write to or standard output by
82 default.
84 =item B<-passout arg>
86 the output file password source. For more information about the format of B<arg>
87 see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
89 =item B<-text>
91 prints out the certificate request in text form.
93 =item B<-pubkey>
95 outputs the public key.
97 =item B<-noout>
99 this option prevents output of the encoded version of the request.
101 =item B<-modulus>
103 this option prints out the value of the modulus of the public key
104 contained in the request.
106 =item B<-verify>
108 verifies the signature on the request.
110 =item B<-new>
112 this option generates a new certificate request. It will prompt
113 the user for the relevant field values. The actual fields
114 prompted for and their maximum and minimum sizes are specified
115 in the configuration file and any requested extensions.
117 If the B<-key> option is not used it will generate a new RSA private
118 key using information specified in the configuration file.
120 =item B<-rand file(s)>
122 a file or files containing random data used to seed the random number
123 generator, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>).
124 Multiple files can be specified separated by a OS-dependent character.
125 The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
126 all others.
128 =item B<-newkey arg>
130 this option creates a new certificate request and a new private
131 key. The argument takes one of two forms. B<rsa:nbits>, where
132 B<nbits> is the number of bits, generates an RSA key B<nbits>
133 in size. B<dsa:filename> generates a DSA key using the parameters
134 in the file B<filename>.
136 =item B<-key filename>
138 This specifies the file to read the private key from. It also
139 accepts PKCS#8 format private keys for PEM format files.
141 =item B<-keyform PEM|DER>
143 the format of the private key file specified in the B<-key>
144 argument. PEM is the default.
146 =item B<-keyout filename>
148 this gives the filename to write the newly created private key to.
149 If this option is not specified then the filename present in the
150 configuration file is used.
152 =item B<-nodes>
154 if this option is specified then if a private key is created it
155 will not be encrypted.
157 =item B<-[md5|sha1|md2|mdc2]>
159 this specifies the message digest to sign the request with. This
160 overrides the digest algorithm specified in the configuration file.
161 This option is ignored for DSA requests: they always use SHA1.
163 =item B<-config filename>
165 this allows an alternative configuration file to be specified,
166 this overrides the compile time filename or any specified in
167 the B<OPENSSL_CONF> environment variable.
169 =item B<-subj arg>
171 sets subject name for new request or supersedes the subject name
172 when processing a request.
173 The arg must be formatted as I</type0=value0/type1=value1/type2=...>,
174 characters may be escaped by \ (backslash), no spaces are skipped.
176 =item B<-x509>
178 this option outputs a self signed certificate instead of a certificate
179 request. This is typically used to generate a test certificate or
180 a self signed root CA. The extensions added to the certificate
181 (if any) are specified in the configuration file. Unless specified
182 using the B<set_serial> option B<0> will be used for the serial
183 number.
185 =item B<-days n>
187 when the B<-x509> option is being used this specifies the number of
188 days to certify the certificate for. The default is 30 days.
190 =item B<-set_serial n>
192 serial number to use when outputting a self signed certificate. This
193 may be specified as a decimal value or a hex value if preceded by B<0x>.
194 It is possible to use negative serial numbers but this is not recommended.
196 =item B<-extensions section>
198 =item B<-reqexts section>
200 these options specify alternative sections to include certificate
201 extensions (if the B<-x509> option is present) or certificate
202 request extensions. This allows several different sections to
203 be used in the same configuration file to specify requests for
204 a variety of purposes.
206 =item B<-utf8>
208 this option causes field values to be interpreted as UTF8 strings, by 
209 default they are interpreted as ASCII. This means that the field
210 values, whether prompted from a terminal or obtained from a
211 configuration file, must be valid UTF8 strings.
213 =item B<-nameopt option>
215 option which determines how the subject or issuer names are displayed. The
216 B<option> argument can be a single option or multiple options separated by
217 commas.  Alternatively the B<-nameopt> switch may be used more than once to
218 set multiple options. See the L<x509(1)|x509(1)> manual page for details.
220 =item B<-asn1-kludge>
222 by default the B<req> command outputs certificate requests containing
223 no attributes in the correct PKCS#10 format. However certain CAs will only
224 accept requests containing no attributes in an invalid form: this
225 option produces this invalid format.
227 More precisely the B<Attributes> in a PKCS#10 certificate request
228 are defined as a B<SET OF Attribute>. They are B<not OPTIONAL> so
229 if no attributes are present then they should be encoded as an
230 empty B<SET OF>. The invalid form does not include the empty
231 B<SET OF> whereas the correct form does.
233 It should be noted that very few CAs still require the use of this option.
235 =item B<-newhdr>
237 Adds the word B<NEW> to the PEM file header and footer lines on the outputed
238 request. Some software (Netscape certificate server) and some CAs need this.
240 =item B<-batch>
242 non-interactive mode.
244 =item B<-verbose>
246 print extra details about the operations being performed.
248 =item B<-engine id>
250 specifying an engine (by it's unique B<id> string) will cause B<req>
251 to attempt to obtain a functional reference to the specified engine,
252 thus initialising it if needed. The engine will then be set as the default
253 for all available algorithms.
255 =back
257 =head1 CONFIGURATION FILE FORMAT
259 The configuration options are specified in the B<req> section of
260 the configuration file. As with all configuration files if no
261 value is specified in the specific section (i.e. B<req>) then
262 the initial unnamed or B<default> section is searched too.
264 The options available are described in detail below.
266 =over 4
268 =item B<input_password output_password>
270 The passwords for the input private key file (if present) and
271 the output private key file (if one will be created). The
272 command line options B<passin> and B<passout> override the
273 configuration file values.
275 =item B<default_bits>
277 This specifies the default key size in bits. If not specified then
278 512 is used. It is used if the B<-new> option is used. It can be
279 overridden by using the B<-newkey> option.
281 =item B<default_keyfile>
283 This is the default filename to write a private key to. If not
284 specified the key is written to standard output. This can be
285 overridden by the B<-keyout> option.
287 =item B<oid_file>
289 This specifies a file containing additional B<OBJECT IDENTIFIERS>.
290 Each line of the file should consist of the numerical form of the
291 object identifier followed by white space then the short name followed
292 by white space and finally the long name. 
294 =item B<oid_section>
296 This specifies a section in the configuration file containing extra
297 object identifiers. Each line should consist of the short name of the
298 object identifier followed by B<=> and the numerical form. The short
299 and long names are the same when this option is used.
301 =item B<RANDFILE>
303 This specifies a filename in which random number seed information is
304 placed and read from, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>).
305 It is used for private key generation.
307 =item B<encrypt_key>
309 If this is set to B<no> then if a private key is generated it is
310 B<not> encrypted. This is equivalent to the B<-nodes> command line
311 option. For compatibility B<encrypt_rsa_key> is an equivalent option.
313 =item B<default_md>
315 This option specifies the digest algorithm to use. Possible values
316 include B<md5 sha1 mdc2>. If not present then MD5 is used. This
317 option can be overridden on the command line.
319 =item B<string_mask>
321 This option masks out the use of certain string types in certain
322 fields. Most users will not need to change this option.
324 It can be set to several values B<default> which is also the default
325 option uses PrintableStrings, T61Strings and BMPStrings if the 
326 B<pkix> value is used then only PrintableStrings and BMPStrings will
327 be used. This follows the PKIX recommendation in RFC2459. If the
328 B<utf8only> option is used then only UTF8Strings will be used: this
329 is the PKIX recommendation in RFC2459 after 2003. Finally the B<nombstr>
330 option just uses PrintableStrings and T61Strings: certain software has
331 problems with BMPStrings and UTF8Strings: in particular Netscape.
333 =item B<req_extensions>
335 this specifies the configuration file section containing a list of
336 extensions to add to the certificate request. It can be overridden
337 by the B<-reqexts> command line switch.
339 =item B<x509_extensions>
341 this specifies the configuration file section containing a list of
342 extensions to add to certificate generated when the B<-x509> switch
343 is used. It can be overridden by the B<-extensions> command line switch.
345 =item B<prompt>
347 if set to the value B<no> this disables prompting of certificate fields
348 and just takes values from the config file directly. It also changes the
349 expected format of the B<distinguished_name> and B<attributes> sections.
351 =item B<utf8>
353 if set to the value B<yes> then field values to be interpreted as UTF8
354 strings, by default they are interpreted as ASCII. This means that
355 the field values, whether prompted from a terminal or obtained from a
356 configuration file, must be valid UTF8 strings.
358 =item B<attributes>
360 this specifies the section containing any request attributes: its format
361 is the same as B<distinguished_name>. Typically these may contain the
362 challengePassword or unstructuredName types. They are currently ignored
363 by OpenSSL's request signing utilities but some CAs might want them.
365 =item B<distinguished_name>
367 This specifies the section containing the distinguished name fields to
368 prompt for when generating a certificate or certificate request. The format
369 is described in the next section.
371 =back
373 =head1 DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT
375 There are two separate formats for the distinguished name and attribute
376 sections. If the B<prompt> option is set to B<no> then these sections
377 just consist of field names and values: for example,
379  CN=My Name
380  OU=My Organization
381  emailAddress=someone@somewhere.org
383 This allows external programs (e.g. GUI based) to generate a template file
384 with all the field names and values and just pass it to B<req>. An example
385 of this kind of configuration file is contained in the B<EXAMPLES> section.
387 Alternatively if the B<prompt> option is absent or not set to B<no> then the
388 file contains field prompting information. It consists of lines of the form:
390  fieldName="prompt"
391  fieldName_default="default field value"
392  fieldName_min= 2
393  fieldName_max= 4
395 "fieldName" is the field name being used, for example commonName (or CN).
396 The "prompt" string is used to ask the user to enter the relevant
397 details. If the user enters nothing then the default value is used if no
398 default value is present then the field is omitted. A field can
399 still be omitted if a default value is present if the user just
400 enters the '.' character.
402 The number of characters entered must be between the fieldName_min and
403 fieldName_max limits: there may be additional restrictions based
404 on the field being used (for example countryName can only ever be
405 two characters long and must fit in a PrintableString).
407 Some fields (such as organizationName) can be used more than once
408 in a DN. This presents a problem because configuration files will
409 not recognize the same name occurring twice. To avoid this problem
410 if the fieldName contains some characters followed by a full stop
411 they will be ignored. So for example a second organizationName can
412 be input by calling it "1.organizationName".
414 The actual permitted field names are any object identifier short or
415 long names. These are compiled into OpenSSL and include the usual
416 values such as commonName, countryName, localityName, organizationName,
417 organizationUnitName, stateOrProvinceName. Additionally emailAddress
418 is include as well as name, surname, givenName initials and dnQualifier.
420 Additional object identifiers can be defined with the B<oid_file> or
421 B<oid_section> options in the configuration file. Any additional fields
422 will be treated as though they were a DirectoryString.
425 =head1 EXAMPLES
427 Examine and verify certificate request:
429  openssl req -in req.pem -text -verify -noout
431 Create a private key and then generate a certificate request from it:
433  openssl genrsa -out key.pem 1024
434  openssl req -new -key key.pem -out req.pem
436 The same but just using req:
438  openssl req -newkey rsa:1024 -keyout key.pem -out req.pem
440 Generate a self signed root certificate:
442  openssl req -x509 -newkey rsa:1024 -keyout key.pem -out req.pem
444 Example of a file pointed to by the B<oid_file> option:
446  1.2.3.4        shortName       A longer Name
447  1.2.3.6        otherName       Other longer Name
449 Example of a section pointed to by B<oid_section> making use of variable
450 expansion:
452  testoid1=1.2.3.5
453  testoid2=${testoid1}.6
455 Sample configuration file prompting for field values:
457  [ req ]
458  default_bits           = 1024
459  default_keyfile        = privkey.pem
460  distinguished_name     = req_distinguished_name
461  attributes             = req_attributes
462  x509_extensions        = v3_ca
464  dirstring_type = nobmp
466  [ req_distinguished_name ]
467  countryName                    = Country Name (2 letter code)
468  countryName_default            = AU
469  countryName_min                = 2
470  countryName_max                = 2
472  localityName                   = Locality Name (eg, city)
474  organizationalUnitName         = Organizational Unit Name (eg, section)
476  commonName                     = Common Name (eg, YOUR name)
477  commonName_max                 = 64
479  emailAddress                   = Email Address
480  emailAddress_max               = 40
482  [ req_attributes ]
483  challengePassword              = A challenge password
484  challengePassword_min          = 4
485  challengePassword_max          = 20
487  [ v3_ca ]
489  subjectKeyIdentifier=hash
490  authorityKeyIdentifier=keyid:always,issuer:always
491  basicConstraints = CA:true
493 Sample configuration containing all field values:
496  RANDFILE               = $ENV::HOME/.rnd
498  [ req ]
499  default_bits           = 1024
500  default_keyfile        = keyfile.pem
501  distinguished_name     = req_distinguished_name
502  attributes             = req_attributes
503  prompt                 = no
504  output_password        = mypass
506  [ req_distinguished_name ]
507  C                      = GB
508  ST                     = Test State or Province
509  L                      = Test Locality
510  O                      = Organization Name
511  OU                     = Organizational Unit Name
512  CN                     = Common Name
513  emailAddress           = test@email.address
515  [ req_attributes ]
516  challengePassword              = A challenge password
519 =head1 NOTES
521 The header and footer lines in the B<PEM> format are normally:
523  -----BEGIN CERTIFICATE REQUEST-----
524  -----END CERTIFICATE REQUEST-----
526 some software (some versions of Netscape certificate server) instead needs:
528  -----BEGIN NEW CERTIFICATE REQUEST-----
529  -----END NEW CERTIFICATE REQUEST-----
531 which is produced with the B<-newhdr> option but is otherwise compatible.
532 Either form is accepted transparently on input.
534 The certificate requests generated by B<Xenroll> with MSIE have extensions
535 added. It includes the B<keyUsage> extension which determines the type of
536 key (signature only or general purpose) and any additional OIDs entered
537 by the script in an extendedKeyUsage extension.
539 =head1 DIAGNOSTICS
541 The following messages are frequently asked about:
543         Using configuration from /some/path/openssl.cnf
544         Unable to load config info
546 This is followed some time later by...
548         unable to find 'distinguished_name' in config
549         problems making Certificate Request
551 The first error message is the clue: it can't find the configuration
552 file! Certain operations (like examining a certificate request) don't
553 need a configuration file so its use isn't enforced. Generation of
554 certificates or requests however does need a configuration file. This
555 could be regarded as a bug.
557 Another puzzling message is this:
559         Attributes:
560             a0:00
562 this is displayed when no attributes are present and the request includes
563 the correct empty B<SET OF> structure (the DER encoding of which is 0xa0
564 0x00). If you just see:
566         Attributes:
568 then the B<SET OF> is missing and the encoding is technically invalid (but
569 it is tolerated). See the description of the command line option B<-asn1-kludge>
570 for more information.
572 =head1 ENVIRONMENT VARIABLES
574 The variable B<OPENSSL_CONF> if defined allows an alternative configuration
575 file location to be specified, it will be overridden by the B<-config> command
576 line switch if it is present. For compatibility reasons the B<SSLEAY_CONF>
577 environment variable serves the same purpose but its use is discouraged.
579 =head1 BUGS
581 OpenSSL's handling of T61Strings (aka TeletexStrings) is broken: it effectively
582 treats them as ISO-8859-1 (Latin 1), Netscape and MSIE have similar behaviour.
583 This can cause problems if you need characters that aren't available in
584 PrintableStrings and you don't want to or can't use BMPStrings.
586 As a consequence of the T61String handling the only correct way to represent
587 accented characters in OpenSSL is to use a BMPString: unfortunately Netscape
588 currently chokes on these. If you have to use accented characters with Netscape
589 and MSIE then you currently need to use the invalid T61String form.
591 The current prompting is not very friendly. It doesn't allow you to confirm what
592 you've just entered. Other things like extensions in certificate requests are
593 statically defined in the configuration file. Some of these: like an email
594 address in subjectAltName should be input by the user.
596 =head1 SEE ALSO
598 L<x509(1)|x509(1)>, L<ca(1)|ca(1)>, L<genrsa(1)|genrsa(1)>,
599 L<gendsa(1)|gendsa(1)>, L<config(5)|config(5)>
601 =cut