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