Document -engine where missing.
[openssl.git] / doc / apps / req.pod
1
2 =pod
3
4 =head1 NAME
5
6 req - PKCS#10 certificate request and certificate generating utility.
7
8 =head1 SYNOPSIS
9
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>]
45
46 =head1 DESCRIPTION
47
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.
51
52 =head1 COMMAND OPTIONS
53
54 =over 4
55
56 =item B<-inform DER|PEM>
57
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.
62
63 =item B<-outform DER|PEM>
64
65 This specifies the output format, the options have the same meaning as the 
66 B<-inform> option.
67
68 =item B<-in filename>
69
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.
73
74 =item B<-passin arg>
75
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)>.
78
79 =item B<-out filename>
80
81 This specifies the output filename to write to or standard output by
82 default.
83
84 =item B<-passout arg>
85
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)>.
88
89 =item B<-text>
90
91 prints out the certificate request in text form.
92
93 =item B<-pubkey>
94
95 outputs the public key.
96
97 =item B<-noout>
98
99 this option prevents output of the encoded version of the request.
100
101 =item B<-modulus>
102
103 this option prints out the value of the modulus of the public key
104 contained in the request.
105
106 =item B<-verify>
107
108 verifies the signature on the request.
109
110 =item B<-new>
111
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.
116
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.
119
120 =item B<-rand file(s)>
121
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.
127
128 =item B<-newkey arg>
129
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>.
135
136 =item B<-key filename>
137
138 This specifies the file to read the private key from. It also
139 accepts PKCS#8 format private keys for PEM format files.
140
141 =item B<-keyform PEM|DER>
142
143 the format of the private key file specified in the B<-key>
144 argument. PEM is the default.
145
146 =item B<-keyout filename>
147
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.
151
152 =item B<-nodes>
153
154 if this option is specified then if a private key is created it
155 will not be encrypted.
156
157 =item B<-[md5|sha1|md2|mdc2]>
158
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.
162
163 =item B<-config filename>
164
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.
168
169 =item B<-subj arg>
170
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.
175
176 =item B<-x509>
177
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.
184
185 =item B<-days n>
186
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.
189
190 =item B<-set_serial n>
191
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.
195
196 =item B<-extensions section>
197
198 =item B<-reqexts section>
199
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.
205
206 =item B<-utf8>
207
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.
212
213 =item B<-nameopt option>
214
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.
219
220 =item B<-asn1-kludge>
221
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.
226
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.
232
233 It should be noted that very few CAs still require the use of this option.
234
235 =item B<-newhdr>
236
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.
239
240 =item B<-batch>
241
242 non-interactive mode.
243
244 =item B<-verbose>
245
246 print extra details about the operations being performed.
247
248 =item B<-engine id>
249
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.
254
255 =back
256
257 =head1 CONFIGURATION FILE FORMAT
258
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.
263
264 The options available are described in detail below.
265
266 =over 4
267
268 =item B<input_password output_password>
269
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.
274
275 =item B<default_bits>
276
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.
280
281 =item B<default_keyfile>
282
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.
286
287 =item B<oid_file>
288
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. 
293
294 =item B<oid_section>
295
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.
300
301 =item B<RANDFILE>
302
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.
306
307 =item B<encrypt_key>
308
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.
312
313 =item B<default_md>
314
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.
318
319 =item B<string_mask>
320
321 This option masks out the use of certain string types in certain
322 fields. Most users will not need to change this option.
323
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.
332
333 =item B<req_extensions>
334
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.
338
339 =item B<x509_extensions>
340
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.
344
345 =item B<prompt>
346
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.
350
351 =item B<utf8>
352
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.
357
358 =item B<attributes>
359
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.
364
365 =item B<distinguished_name>
366
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.
370
371 =back
372
373 =head1 DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT
374
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,
378
379  CN=My Name
380  OU=My Organization
381  emailAddress=someone@somewhere.org
382
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.
386
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:
389
390  fieldName="prompt"
391  fieldName_default="default field value"
392  fieldName_min= 2
393  fieldName_max= 4
394
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.
401
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).
406
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".
413
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.
419
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.
423
424
425 =head1 EXAMPLES
426
427 Examine and verify certificate request:
428
429  openssl req -in req.pem -text -verify -noout
430
431 Create a private key and then generate a certificate request from it:
432
433  openssl genrsa -out key.pem 1024
434  openssl req -new -key key.pem -out req.pem
435
436 The same but just using req:
437
438  openssl req -newkey rsa:1024 -keyout key.pem -out req.pem
439
440 Generate a self signed root certificate:
441
442  openssl req -x509 -newkey rsa:1024 -keyout key.pem -out req.pem
443
444 Example of a file pointed to by the B<oid_file> option:
445
446  1.2.3.4        shortName       A longer Name
447  1.2.3.6        otherName       Other longer Name
448
449 Example of a section pointed to by B<oid_section> making use of variable
450 expansion:
451
452  testoid1=1.2.3.5
453  testoid2=${testoid1}.6
454
455 Sample configuration file prompting for field values:
456
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
463
464  dirstring_type = nobmp
465
466  [ req_distinguished_name ]
467  countryName                    = Country Name (2 letter code)
468  countryName_default            = AU
469  countryName_min                = 2
470  countryName_max                = 2
471
472  localityName                   = Locality Name (eg, city)
473
474  organizationalUnitName         = Organizational Unit Name (eg, section)
475
476  commonName                     = Common Name (eg, YOUR name)
477  commonName_max                 = 64
478
479  emailAddress                   = Email Address
480  emailAddress_max               = 40
481
482  [ req_attributes ]
483  challengePassword              = A challenge password
484  challengePassword_min          = 4
485  challengePassword_max          = 20
486
487  [ v3_ca ]
488
489  subjectKeyIdentifier=hash
490  authorityKeyIdentifier=keyid:always,issuer:always
491  basicConstraints = CA:true
492
493 Sample configuration containing all field values:
494
495
496  RANDFILE               = $ENV::HOME/.rnd
497
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
505
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
514
515  [ req_attributes ]
516  challengePassword              = A challenge password
517
518
519 =head1 NOTES
520
521 The header and footer lines in the B<PEM> format are normally:
522
523  -----BEGIN CERTIFICATE REQUEST-----
524  -----END CERTIFICATE REQUEST-----
525
526 some software (some versions of Netscape certificate server) instead needs:
527
528  -----BEGIN NEW CERTIFICATE REQUEST-----
529  -----END NEW CERTIFICATE REQUEST-----
530
531 which is produced with the B<-newhdr> option but is otherwise compatible.
532 Either form is accepted transparently on input.
533
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.
538
539 =head1 DIAGNOSTICS
540
541 The following messages are frequently asked about:
542
543         Using configuration from /some/path/openssl.cnf
544         Unable to load config info
545
546 This is followed some time later by...
547
548         unable to find 'distinguished_name' in config
549         problems making Certificate Request
550
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.
556
557 Another puzzling message is this:
558
559         Attributes:
560             a0:00
561
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:
565
566         Attributes:
567
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.
571
572 =head1 ENVIRONMENT VARIABLES
573
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.
578
579 =head1 BUGS
580
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.
585
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.
590
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.
595
596 =head1 SEE ALSO
597
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)>
600
601 =cut