~ubuntu-branches/ubuntu/hardy/openssl/hardy-security

« back to all changes in this revision

Viewing changes to doc/apps/req.pod

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Martin
  • Date: 2004-05-24 17:02:29 UTC
  • Revision ID: james.westby@ubuntu.com-20040524170229-ixlo08bbbly0xied
Tags: upstream-0.9.7d
ImportĀ upstreamĀ versionĀ 0.9.7d

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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