Refactor many common flags into openssl.pod
[openssl.git] / doc / man1 / openssl-req.pod
1 =pod
2
3 =head1 NAME
4
5 openssl-req - PKCS#10 certificate request and certificate generating utility
6
7 =head1 SYNOPSIS
8
9 B<openssl> B<req>
10 [B<-help>]
11 [B<-inform> B<DER>|B<PEM>]
12 [B<-outform> B<DER>|B<PEM>]
13 [B<-in> I<filename>]
14 [B<-passin> I<arg>]
15 [B<-out> I<filename>]
16 [B<-passout> I<arg>]
17 [B<-text>]
18 [B<-pubkey>]
19 [B<-noout>]
20 [B<-verify>]
21 [B<-modulus>]
22 [B<-new>]
23 [B<-rand> I<files>]
24 [B<-writerand> I<file>]
25 [B<-newkey> I<arg>]
26 [B<-nodes>]
27 [B<-key> I<filename>]
28 [B<-keyform> B<DER>|B<PEM>]
29 [B<-keyout> I<filename>]
30 [B<-keygen_engine> I<id>]
31 [B<-I<digest>>]
32 [B<-config> I<filename>]
33 [B<-multivalue-rdn>]
34 [B<-x509>]
35 [B<-days> I<n>]
36 [B<-set_serial> I<n>]
37 [B<-newhdr>]
38 [B<-addext> I<ext>]
39 [B<-extensions> I<section>]
40 [B<-reqexts> I<section>]
41 [B<-precert>]
42 [B<-utf8>]
43 [B<-nameopt>]
44 [B<-reqopt>]
45 [B<-subject>]
46 [B<-subj> I<arg>]
47 [B<-sigopt> I<nm>:I<v>]
48 [B<-batch>]
49 [B<-verbose>]
50 [B<-engine> I<id>]
51 [B<-sm2-id> I<string>]
52 [B<-sm2-hex-id> I<hex-string>]
53
54 =for openssl ifdef engine keygen_engine sm2-id sm2-hex-id
55
56 =head1 DESCRIPTION
57
58 This command primarily creates and processes certificate requests
59 in PKCS#10 format. It can additionally create self signed certificates
60 for use as root CAs for example.
61
62 =head1 OPTIONS
63
64 =over 4
65
66 =item B<-help>
67
68 Print out a usage message.
69
70 =item B<-inform> B<DER>|B<PEM>
71
72 This specifies the input format. The B<DER> option uses an ASN1 DER encoded
73 form compatible with the PKCS#10. The B<PEM> form is the default format: it
74 consists of the B<DER> format base64 encoded with additional header and
75 footer lines.
76
77 =item B<-outform> B<DER>|B<PEM>
78
79 This specifies the output format, the options have the same meaning and default
80 as the B<-inform> option.
81
82 =item B<-in> I<filename>
83
84 This specifies the input filename to read a request from or standard input
85 if this option is not specified. A request is only read if the creation
86 options (B<-new> and B<-newkey>) are not specified.
87
88 =item B<-sigopt> I<nm>:I<v>
89
90 Pass options to the signature algorithm during sign or verify operations.
91 Names and values of these options are algorithm-specific.
92
93 =item B<-passin> I<arg>, B<-passout> I<arg>
94
95 The password source for the input and output file.
96 For more information about the format of B<arg>
97 see L<openssl(1)/Pass Phrase Options>.
98
99 =item B<-out> I<filename>
100
101 This specifies the output filename to write to or standard output by
102 default.
103
104 =item B<-text>
105
106 Prints out the certificate request in text form.
107
108 =item B<-subject>
109
110 Prints out the request subject (or certificate subject if B<-x509> is
111 specified)
112
113 =item B<-pubkey>
114
115 Outputs the public key.
116
117 =item B<-noout>
118
119 This option prevents output of the encoded version of the request.
120
121 =item B<-modulus>
122
123 This option prints out the value of the modulus of the public key
124 contained in the request.
125
126 =item B<-verify>
127
128 Verifies the signature on the request.
129
130 =item B<-new>
131
132 This option generates a new certificate request. It will prompt
133 the user for the relevant field values. The actual fields
134 prompted for and their maximum and minimum sizes are specified
135 in the configuration file and any requested extensions.
136
137 If the B<-key> option is not used it will generate a new RSA private
138 key using information specified in the configuration file.
139
140 =item B<-rand> I<files>, B<-writerand> I<file>
141
142 See L<openssl(1)/Random State Options> for more information.
143
144 =item B<-newkey> I<arg>
145
146 This option creates a new certificate request and a new private
147 key. The argument takes one of several forms.
148
149 B<rsa:>I<nbits>, where
150 I<nbits> is the number of bits, generates an RSA key I<nbits>
151 in size. If I<nbits> is omitted, i.e. B<-newkey> I<rsa> specified,
152 the default key size, specified in the configuration file is used.
153
154 All other algorithms support the B<-newkey> I<alg>:I<file> form, where file
155 may be an algorithm parameter file, created with C<openssl genpkey -genparam>
156 or an X.509 certificate for a key with appropriate algorithm.
157
158 B<param:>I<file> generates a key using the parameter file or certificate
159 I<file>, the algorithm is determined by the parameters. I<algname>:I<file>
160 use algorithm I<algname> and parameter file I<file>: the two algorithms must
161 match or an error occurs. I<algname> just uses algorithm I<algname>, and
162 parameters, if necessary should be specified via B<-pkeyopt> parameter.
163
164 B<dsa:>I<filename> generates a DSA key using the parameters
165 in the file I<filename>. B<ec:>I<filename> generates EC key (usable both with
166 ECDSA or ECDH algorithms), B<gost2001:>I<filename> generates GOST R
167 34.10-2001 key (requires B<gost> engine configured in the configuration
168 file). If just B<gost2001> is specified a parameter set should be
169 specified by B<-pkeyopt> I<paramset:X>
170
171 =item B<-pkeyopt> I<opt>:I<value>
172
173 Set the public key algorithm option I<opt> to I<value>. The precise set of
174 options supported depends on the public key algorithm used and its
175 implementation.
176 See L<openssl-genpkey(1)/KEY GENERATION OPTIONS> for more details.
177
178 =item B<-key> I<filename>
179
180 This specifies the file to read the private key from. It also
181 accepts PKCS#8 format private keys for PEM format files.
182
183 =item B<-keyform> B<DER>|B<PEM>
184
185 The format of the private key file specified in the B<-key>
186 argument. PEM is the default.
187
188 =item B<-keyout> I<filename>
189
190 This gives the filename to write the newly created private key to.
191 If this option is not specified then the filename present in the
192 configuration file is used.
193
194 =item B<-nodes>
195
196 If this option is specified then if a private key is created it
197 will not be encrypted.
198
199 =item B<-I<digest>>
200
201 This specifies the message digest to sign the request.
202 Any digest supported by the OpenSSL B<dgst> command can be used.
203 This overrides the digest algorithm specified in
204 the configuration file.
205
206 Some public key algorithms may override this choice. For instance, DSA
207 signatures always use SHA1, GOST R 34.10 signatures always use
208 GOST R 34.11-94 (B<-md_gost94>), Ed25519 and Ed448 never use any digest.
209
210 =item B<-config> I<filename>
211
212 This allows an alternative configuration file to be specified.
213 Optional; for a description of the default value,
214 see L<openssl(1)/COMMAND SUMMARY>.
215
216 =item B<-subj> I<arg>
217
218 Sets subject name for new request or supersedes the subject name
219 when processing a request.
220 The arg must be formatted as C</type0=value0/type1=value1/type2=...>.
221 Keyword characters may be escaped by \ (backslash), and whitespace is retained.
222 Empty values are permitted, but the corresponding type will not be included
223 in the request.
224
225 =item B<-multivalue-rdn>
226
227 This option causes the -subj argument to be interpreted with full
228 support for multivalued RDNs. Example:
229
230 C</DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe>
231
232 If -multi-rdn is not used then the UID value is C<123456+CN=John Doe>.
233
234 =item B<-x509>
235
236 This option outputs a self signed certificate instead of a certificate
237 request. This is typically used to generate a test certificate or
238 a self signed root CA. The extensions added to the certificate
239 (if any) are specified in the configuration file. Unless specified
240 using the B<-set_serial> option, a large random number will be used for
241 the serial number.
242
243 If existing request is specified with the B<-in> option, it is converted
244 to the self signed certificate otherwise new request is created.
245
246 =item B<-days> I<n>
247
248 When the B<-x509> option is being used this specifies the number of
249 days to certify the certificate for, otherwise it is ignored. I<n> should
250 be a positive integer. The default is 30 days.
251
252 =item B<-set_serial> I<n>
253
254 Serial number to use when outputting a self signed certificate. This
255 may be specified as a decimal value or a hex value if preceded by C<0x>.
256
257 =item B<-addext> I<ext>
258
259 Add a specific extension to the certificate (if the B<-x509> option is
260 present) or certificate request.  The argument must have the form of
261 a key=value pair as it would appear in a config file.
262
263 This option can be given multiple times.
264
265 =item B<-extensions> I<section>
266
267 =item B<-reqexts> I<section>
268
269 These options specify alternative sections to include certificate
270 extensions (if the B<-x509> option is present) or certificate
271 request extensions. This allows several different sections to
272 be used in the same configuration file to specify requests for
273 a variety of purposes.
274
275 =item B<-precert>
276
277 A poison extension will be added to the certificate, making it a
278 "pre-certificate" (see RFC6962). This can be submitted to Certificate
279 Transparency logs in order to obtain signed certificate timestamps (SCTs).
280 These SCTs can then be embedded into the pre-certificate as an extension, before
281 removing the poison and signing the certificate.
282
283 This implies the B<-new> flag.
284
285 =item B<-utf8>
286
287 This option causes field values to be interpreted as UTF8 strings, by
288 default they are interpreted as ASCII. This means that the field
289 values, whether prompted from a terminal or obtained from a
290 configuration file, must be valid UTF8 strings.
291
292 =item B<-nameopt> I<option>
293
294 Option which determines how the subject or issuer names are displayed. The
295 I<option> argument can be a single option or multiple options separated by
296 commas.  Alternatively the B<-nameopt> switch may be used more than once to
297 set multiple options. See the L<openssl-x509(1)> manual page for details.
298
299 =item B<-reqopt> I<option>
300
301 Customise the output format used with B<-text>. The I<option> argument can be
302 a single option or multiple options separated by commas.
303
304 See discussion of the  B<-certopt> parameter in the L<openssl-x509(1)>
305 command.
306
307 =item B<-newhdr>
308
309 Adds the word B<NEW> to the PEM file header and footer lines on the outputted
310 request. Some software (Netscape certificate server) and some CAs need this.
311
312 =item B<-batch>
313
314 Non-interactive mode.
315
316 =item B<-verbose>
317
318 Print extra details about the operations being performed.
319
320 =item B<-engine> I<id>
321
322 Specifying an engine (by its unique I<id> string) will cause this command
323 to attempt to obtain a functional reference to the specified engine,
324 thus initialising it if needed. The engine will then be set as the default
325 for all available algorithms.
326
327 =item B<-keygen_engine> I<id>
328
329 Specifies an engine (by its unique I<id> string) which would be used
330 for key generation operations.
331
332 =item B<-sm2-id>
333
334 Specify the ID string to use when verifying an SM2 certificate request. The ID
335 string is required by the SM2 signature algorithm for signing and verification.
336
337 =item B<-sm2-hex-id>
338
339 Specify a binary ID string to use when verifying an SM2 certificate request. The
340 argument for this option is string of hexadecimal digits.
341
342 =back
343
344 =head1 CONFIGURATION FILE FORMAT
345
346 The configuration options are specified in the B<req> section of
347 the configuration file. As with all configuration files if no
348 value is specified in the specific section (i.e. B<req>) then
349 the initial unnamed or B<default> section is searched too.
350
351 The options available are described in detail below.
352
353 =over 4
354
355 =item B<input_password output_password>
356
357 The passwords for the input private key file (if present) and
358 the output private key file (if one will be created). The
359 command line options B<passin> and B<passout> override the
360 configuration file values.
361
362 =item B<default_bits>
363
364 Specifies the default key size in bits.
365
366 This option is used in conjunction with the B<-new> option to generate
367 a new key. It can be overridden by specifying an explicit key size in
368 the B<-newkey> option. The smallest accepted key size is 512 bits. If
369 no key size is specified then 2048 bits is used.
370
371 =item B<default_keyfile>
372
373 This is the default filename to write a private key to. If not
374 specified the key is written to standard output. This can be
375 overridden by the B<-keyout> option.
376
377 =item B<oid_file>
378
379 This specifies a file containing additional B<OBJECT IDENTIFIERS>.
380 Each line of the file should consist of the numerical form of the
381 object identifier followed by white space then the short name followed
382 by white space and finally the long name.
383
384 =item B<oid_section>
385
386 This specifies a section in the configuration file containing extra
387 object identifiers. Each line should consist of the short name of the
388 object identifier followed by B<=> and the numerical form. The short
389 and long names are the same when this option is used.
390
391 =item B<RANDFILE>
392
393 At startup the specified file is loaded into the random number generator,
394 and at exit 256 bytes will be written to it.
395 It is used for private key generation.
396
397 =item B<encrypt_key>
398
399 If this is set to B<no> then if a private key is generated it is
400 B<not> encrypted. This is equivalent to the B<-nodes> command line
401 option. For compatibility B<encrypt_rsa_key> is an equivalent option.
402
403 =item B<default_md>
404
405 This option specifies the digest algorithm to use. Any digest supported by the
406 OpenSSL B<dgst> command can be used. This option can be overridden on the
407 command line. Certain signing algorithms (i.e. Ed25519 and Ed448) will ignore
408 any digest that has been set.
409
410 =item B<string_mask>
411
412 This option masks out the use of certain string types in certain
413 fields. Most users will not need to change this option.
414
415 It can be set to several values B<default> which is also the default
416 option uses PrintableStrings, T61Strings and BMPStrings if the
417 B<pkix> value is used then only PrintableStrings and BMPStrings will
418 be used. This follows the PKIX recommendation in RFC2459. If the
419 B<utf8only> option is used then only UTF8Strings will be used: this
420 is the PKIX recommendation in RFC2459 after 2003. Finally the B<nombstr>
421 option just uses PrintableStrings and T61Strings: certain software has
422 problems with BMPStrings and UTF8Strings: in particular Netscape.
423
424 =item B<req_extensions>
425
426 This specifies the configuration file section containing a list of
427 extensions to add to the certificate request. It can be overridden
428 by the B<-reqexts> command line switch. See the
429 L<x509v3_config(5)> manual page for details of the
430 extension section format.
431
432 =item B<x509_extensions>
433
434 This specifies the configuration file section containing a list of
435 extensions to add to certificate generated when the B<-x509> switch
436 is used. It can be overridden by the B<-extensions> command line switch.
437
438 =item B<prompt>
439
440 If set to the value B<no> this disables prompting of certificate fields
441 and just takes values from the config file directly. It also changes the
442 expected format of the B<distinguished_name> and B<attributes> sections.
443
444 =item B<utf8>
445
446 If set to the value B<yes> then field values to be interpreted as UTF8
447 strings, by default they are interpreted as ASCII. This means that
448 the field values, whether prompted from a terminal or obtained from a
449 configuration file, must be valid UTF8 strings.
450
451 =item B<attributes>
452
453 This specifies the section containing any request attributes: its format
454 is the same as B<distinguished_name>. Typically these may contain the
455 challengePassword or unstructuredName types. They are currently ignored
456 by OpenSSL's request signing utilities but some CAs might want them.
457
458 =item B<distinguished_name>
459
460 This specifies the section containing the distinguished name fields to
461 prompt for when generating a certificate or certificate request. The format
462 is described in the next section.
463
464 =back
465
466 =head1 DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT
467
468 There are two separate formats for the distinguished name and attribute
469 sections. If the B<prompt> option is set to B<no> then these sections
470 just consist of field names and values: for example,
471
472  CN=My Name
473  OU=My Organization
474  emailAddress=someone@somewhere.org
475
476 This allows external programs (e.g. GUI based) to generate a template file with
477 all the field names and values and just pass it to this command. An example
478 of this kind of configuration file is contained in the B<EXAMPLES> section.
479
480 Alternatively if the B<prompt> option is absent or not set to B<no> then the
481 file contains field prompting information. It consists of lines of the form:
482
483  fieldName="prompt"
484  fieldName_default="default field value"
485  fieldName_min= 2
486  fieldName_max= 4
487
488 "fieldName" is the field name being used, for example commonName (or CN).
489 The "prompt" string is used to ask the user to enter the relevant
490 details. If the user enters nothing then the default value is used if no
491 default value is present then the field is omitted. A field can
492 still be omitted if a default value is present if the user just
493 enters the '.' character.
494
495 The number of characters entered must be between the fieldName_min and
496 fieldName_max limits: there may be additional restrictions based
497 on the field being used (for example countryName can only ever be
498 two characters long and must fit in a PrintableString).
499
500 Some fields (such as organizationName) can be used more than once
501 in a DN. This presents a problem because configuration files will
502 not recognize the same name occurring twice. To avoid this problem
503 if the fieldName contains some characters followed by a full stop
504 they will be ignored. So for example a second organizationName can
505 be input by calling it "1.organizationName".
506
507 The actual permitted field names are any object identifier short or
508 long names. These are compiled into OpenSSL and include the usual
509 values such as commonName, countryName, localityName, organizationName,
510 organizationalUnitName, stateOrProvinceName. Additionally emailAddress
511 is included as well as name, surname, givenName, initials, and dnQualifier.
512
513 Additional object identifiers can be defined with the B<oid_file> or
514 B<oid_section> options in the configuration file. Any additional fields
515 will be treated as though they were a DirectoryString.
516
517
518 =head1 EXAMPLES
519
520 Examine and verify certificate request:
521
522  openssl req -in req.pem -text -verify -noout
523
524 Create a private key and then generate a certificate request from it:
525
526  openssl genrsa -out key.pem 2048
527  openssl req -new -key key.pem -out req.pem
528
529 The same but just using req:
530
531  openssl req -newkey rsa:2048 -keyout key.pem -out req.pem
532
533 Generate a self signed root certificate:
534
535  openssl req -x509 -newkey rsa:2048 -keyout key.pem -out req.pem
536
537 Create an SM2 private key and then generate a certificate request from it:
538
539  openssl ecparam -genkey -name SM2 -out sm2.key
540  openssl req -new -key sm2.key -out sm2.csr -sm3 -sigopt "sm2_id:1234567812345678"
541
542 Examine and verify an SM2 certificate request:
543
544  openssl req -verify -in sm2.csr -sm3 -sm2-id 1234567812345678
545
546 Example of a file pointed to by the B<oid_file> option:
547
548  1.2.3.4        shortName       A longer Name
549  1.2.3.6        otherName       Other longer Name
550
551 Example of a section pointed to by B<oid_section> making use of variable
552 expansion:
553
554  testoid1=1.2.3.5
555  testoid2=${testoid1}.6
556
557 Sample configuration file prompting for field values:
558
559  [ req ]
560  default_bits           = 2048
561  default_keyfile        = privkey.pem
562  distinguished_name     = req_distinguished_name
563  attributes             = req_attributes
564  req_extensions         = v3_ca
565
566  dirstring_type = nobmp
567
568  [ req_distinguished_name ]
569  countryName                    = Country Name (2 letter code)
570  countryName_default            = AU
571  countryName_min                = 2
572  countryName_max                = 2
573
574  localityName                   = Locality Name (eg, city)
575
576  organizationalUnitName         = Organizational Unit Name (eg, section)
577
578  commonName                     = Common Name (eg, YOUR name)
579  commonName_max                 = 64
580
581  emailAddress                   = Email Address
582  emailAddress_max               = 40
583
584  [ req_attributes ]
585  challengePassword              = A challenge password
586  challengePassword_min          = 4
587  challengePassword_max          = 20
588
589  [ v3_ca ]
590
591  subjectKeyIdentifier=hash
592  authorityKeyIdentifier=keyid:always,issuer:always
593  basicConstraints = critical, CA:true
594
595 Sample configuration containing all field values:
596
597
598  RANDFILE               = $ENV::HOME/.rnd
599
600  [ req ]
601  default_bits           = 2048
602  default_keyfile        = keyfile.pem
603  distinguished_name     = req_distinguished_name
604  attributes             = req_attributes
605  prompt                 = no
606  output_password        = mypass
607
608  [ req_distinguished_name ]
609  C                      = GB
610  ST                     = Test State or Province
611  L                      = Test Locality
612  O                      = Organization Name
613  OU                     = Organizational Unit Name
614  CN                     = Common Name
615  emailAddress           = test@email.address
616
617  [ req_attributes ]
618  challengePassword              = A challenge password
619
620 Example of giving the most common attributes (subject and extensions)
621 on the command line:
622
623  openssl req -new -subj "/C=GB/CN=foo" \
624                   -addext "subjectAltName = DNS:foo.co.uk" \
625                   -addext "certificatePolicies = 1.2.3.4" \
626                   -newkey rsa:2048 -keyout key.pem -out req.pem
627
628
629 =head1 NOTES
630
631 The header and footer lines in the B<PEM> format are normally:
632
633  -----BEGIN CERTIFICATE REQUEST-----
634  -----END CERTIFICATE REQUEST-----
635
636 some software (some versions of Netscape certificate server) instead needs:
637
638  -----BEGIN NEW CERTIFICATE REQUEST-----
639  -----END NEW CERTIFICATE REQUEST-----
640
641 which is produced with the B<-newhdr> option but is otherwise compatible.
642 Either form is accepted transparently on input.
643
644 The certificate requests generated by B<Xenroll> with MSIE have extensions
645 added. It includes the B<keyUsage> extension which determines the type of
646 key (signature only or general purpose) and any additional OIDs entered
647 by the script in an extendedKeyUsage extension.
648
649 =head1 DIAGNOSTICS
650
651 The following messages are frequently asked about:
652
653         Using configuration from /some/path/openssl.cnf
654         Unable to load config info
655
656 This is followed some time later by:
657
658         unable to find 'distinguished_name' in config
659         problems making Certificate Request
660
661 The first error message is the clue: it can't find the configuration
662 file! Certain operations (like examining a certificate request) don't
663 need a configuration file so its use isn't enforced. Generation of
664 certificates or requests however does need a configuration file. This
665 could be regarded as a bug.
666
667 Another puzzling message is this:
668
669         Attributes:
670             a0:00
671
672 this is displayed when no attributes are present and the request includes
673 the correct empty B<SET OF> structure (the DER encoding of which is 0xa0
674 0x00). If you just see:
675
676         Attributes:
677
678 then the B<SET OF> is missing and the encoding is technically invalid (but
679 it is tolerated). See the description of the command line option B<-asn1-kludge>
680 for more information.
681
682 =head1 BUGS
683
684 OpenSSL's handling of T61Strings (aka TeletexStrings) is broken: it effectively
685 treats them as ISO-8859-1 (Latin 1), Netscape and MSIE have similar behaviour.
686 This can cause problems if you need characters that aren't available in
687 PrintableStrings and you don't want to or can't use BMPStrings.
688
689 As a consequence of the T61String handling the only correct way to represent
690 accented characters in OpenSSL is to use a BMPString: unfortunately Netscape
691 currently chokes on these. If you have to use accented characters with Netscape
692 and MSIE then you currently need to use the invalid T61String form.
693
694 The current prompting is not very friendly. It doesn't allow you to confirm what
695 you've just entered. Other things like extensions in certificate requests are
696 statically defined in the configuration file. Some of these: like an email
697 address in subjectAltName should be input by the user.
698
699 =head1 SEE ALSO
700
701 L<openssl(1)>,
702 L<openssl-x509(1)>,
703 L<openssl-ca(1)>,
704 L<openssl-genrsa(1)>,
705 L<openssl-gendsa(1)>,
706 L<config(5)>,
707 L<x509v3_config(5)>
708
709 =head1 COPYRIGHT
710
711 Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
712
713 Licensed under the Apache License 2.0 (the "License").  You may not use
714 this file except in compliance with the License.  You can obtain a copy
715 in the file LICENSE in the source distribution or at
716 L<https://www.openssl.org/source/license.html>.
717
718 =cut