req.pod 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. =pod
  2. =head1 NAME
  3. req - PKCS#10 certificate request and certificate generating utility.
  4. =head1 SYNOPSIS
  5. B<openssl> B<req>
  6. [B<-inform PEM|DER>]
  7. [B<-outform PEM|DER>]
  8. [B<-in filename>]
  9. [B<-passin arg>]
  10. [B<-out filename>]
  11. [B<-passout arg>]
  12. [B<-text>]
  13. [B<-noout>]
  14. [B<-verify>]
  15. [B<-modulus>]
  16. [B<-new>]
  17. [B<-rand file(s)>]
  18. [B<-newkey rsa:bits>]
  19. [B<-newkey dsa:file>]
  20. [B<-nodes>]
  21. [B<-key filename>]
  22. [B<-keyform PEM|DER>]
  23. [B<-keyout filename>]
  24. [B<-[md5|sha1|md2|mdc2]>]
  25. [B<-config filename>]
  26. [B<-subj arg>]
  27. [B<-x509>]
  28. [B<-days n>]
  29. [B<-set_serial n>]
  30. [B<-asn1-kludge>]
  31. [B<-newhdr>]
  32. [B<-extensions section>]
  33. [B<-reqexts section>]
  34. [B<-batch>]
  35. [B<-verbose>]
  36. =head1 DESCRIPTION
  37. The B<req> command primarily creates and processes certificate requests
  38. in PKCS#10 format. It can additionally create self signed certificates
  39. for use as root CAs for example.
  40. =head1 COMMAND OPTIONS
  41. =over 4
  42. =item B<-inform DER|PEM>
  43. This specifies the input format. The B<DER> option uses an ASN1 DER encoded
  44. form compatible with the PKCS#10. The B<PEM> form is the default format: it
  45. consists of the B<DER> format base64 encoded with additional header and
  46. footer lines.
  47. =item B<-outform DER|PEM>
  48. This specifies the output format, the options have the same meaning as the
  49. B<-inform> option.
  50. =item B<-in filename>
  51. This specifies the input filename to read a request from or standard input
  52. if this option is not specified. A request is only read if the creation
  53. options (B<-new> and B<-newkey>) are not specified.
  54. =item B<-passin arg>
  55. the input file password source. For more information about the format of B<arg>
  56. see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
  57. =item B<-out filename>
  58. This specifies the output filename to write to or standard output by
  59. default.
  60. =item B<-passout arg>
  61. the output file password source. For more information about the format of B<arg>
  62. see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
  63. =item B<-text>
  64. prints out the certificate request in text form.
  65. =item B<-noout>
  66. this option prevents output of the encoded version of the request.
  67. =item B<-modulus>
  68. this option prints out the value of the modulus of the public key
  69. contained in the request.
  70. =item B<-verify>
  71. verifies the signature on the request.
  72. =item B<-new>
  73. this option generates a new certificate request. It will prompt
  74. the user for the relevant field values. The actual fields
  75. prompted for and their maximum and minimum sizes are specified
  76. in the configuration file and any requested extensions.
  77. If the B<-key> option is not used it will generate a new RSA private
  78. key using information specified in the configuration file.
  79. =item B<-rand file(s)>
  80. a file or files containing random data used to seed the random number
  81. generator, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>).
  82. Multiple files can be specified separated by a OS-dependent character.
  83. The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
  84. all others.
  85. =item B<-newkey arg>
  86. this option creates a new certificate request and a new private
  87. key. The argument takes one of two forms. B<rsa:nbits>, where
  88. B<nbits> is the number of bits, generates an RSA key B<nbits>
  89. in size. B<dsa:filename> generates a DSA key using the parameters
  90. in the file B<filename>.
  91. =item B<-key filename>
  92. This specifies the file to read the private key from. It also
  93. accepts PKCS#8 format private keys for PEM format files.
  94. =item B<-keyform PEM|DER>
  95. the format of the private key file specified in the B<-key>
  96. argument. PEM is the default.
  97. =item B<-keyout filename>
  98. this gives the filename to write the newly created private key to.
  99. If this option is not specified then the filename present in the
  100. configuration file is used.
  101. =item B<-nodes>
  102. if this option is specified then if a private key is created it
  103. will not be encrypted.
  104. =item B<-[md5|sha1|md2|mdc2]>
  105. this specifies the message digest to sign the request with. This
  106. overrides the digest algorithm specified in the configuration file.
  107. This option is ignored for DSA requests: they always use SHA1.
  108. =item B<-config filename>
  109. this allows an alternative configuration file to be specified,
  110. this overrides the compile time filename or any specified in
  111. the B<OPENSSL_CONF> environment variable.
  112. =item B<-subj arg>
  113. sets subject name for new request or supersedes the subject name
  114. when processing a request.
  115. =item B<-x509>
  116. this option outputs a self signed certificate instead of a certificate
  117. request. This is typically used to generate a test certificate or
  118. a self signed root CA. The extensions added to the certificate
  119. (if any) are specified in the configuration file. Unless specified
  120. using the B<set_serial> option B<0> will be used for the serial
  121. number.
  122. =item B<-days n>
  123. when the B<-x509> option is being used this specifies the number of
  124. days to certify the certificate for. The default is 30 days.
  125. =item B<-set_serial n>
  126. serial number to use when outputting a self signed certificate. This
  127. may be specified as a decimal value or a hex value if preceded by B<0x>.
  128. It is possible to use negative serial numbers but this is not recommended.
  129. =item B<-extensions section>
  130. =item B<-reqexts section>
  131. these options specify alternative sections to include certificate
  132. extensions (if the B<-x509> option is present) or certificate
  133. request extensions. This allows several different sections to
  134. be used in the same configuration file to specify requests for
  135. a variety of purposes.
  136. =item B<-asn1-kludge>
  137. by default the B<req> command outputs certificate requests containing
  138. no attributes in the correct PKCS#10 format. However certain CAs will only
  139. accept requests containing no attributes in an invalid form: this
  140. option produces this invalid format.
  141. More precisely the B<Attributes> in a PKCS#10 certificate request
  142. are defined as a B<SET OF Attribute>. They are B<not OPTIONAL> so
  143. if no attributes are present then they should be encoded as an
  144. empty B<SET OF>. The invalid form does not include the empty
  145. B<SET OF> whereas the correct form does.
  146. It should be noted that very few CAs still require the use of this option.
  147. =item B<-newhdr>
  148. Adds the word B<NEW> to the PEM file header and footer lines on the outputed
  149. request. Some software (Netscape certificate server) and some CAs need this.
  150. =item B<-batch>
  151. non-interactive mode.
  152. =item B<-verbose>
  153. print extra details about the operations being performed.
  154. =back
  155. =head1 CONFIGURATION FILE FORMAT
  156. The configuration options are specified in the B<req> section of
  157. the configuration file. As with all configuration files if no
  158. value is specified in the specific section (i.e. B<req>) then
  159. the initial unnamed or B<default> section is searched too.
  160. The options available are described in detail below.
  161. =over 4
  162. =item B<input_password output_password>
  163. The passwords for the input private key file (if present) and
  164. the output private key file (if one will be created). The
  165. command line options B<passin> and B<passout> override the
  166. configuration file values.
  167. =item B<default_bits>
  168. This specifies the default key size in bits. If not specified then
  169. 512 is used. It is used if the B<-new> option is used. It can be
  170. overridden by using the B<-newkey> option.
  171. =item B<default_keyfile>
  172. This is the default filename to write a private key to. If not
  173. specified the key is written to standard output. This can be
  174. overridden by the B<-keyout> option.
  175. =item B<oid_file>
  176. This specifies a file containing additional B<OBJECT IDENTIFIERS>.
  177. Each line of the file should consist of the numerical form of the
  178. object identifier followed by white space then the short name followed
  179. by white space and finally the long name.
  180. =item B<oid_section>
  181. This specifies a section in the configuration file containing extra
  182. object identifiers. Each line should consist of the short name of the
  183. object identifier followed by B<=> and the numerical form. The short
  184. and long names are the same when this option is used.
  185. =item B<RANDFILE>
  186. This specifies a filename in which random number seed information is
  187. placed and read from, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>).
  188. It is used for private key generation.
  189. =item B<encrypt_key>
  190. If this is set to B<no> then if a private key is generated it is
  191. B<not> encrypted. This is equivalent to the B<-nodes> command line
  192. option. For compatibility B<encrypt_rsa_key> is an equivalent option.
  193. =item B<default_md>
  194. This option specifies the digest algorithm to use. Possible values
  195. include B<md5 sha1 mdc2>. If not present then MD5 is used. This
  196. option can be overridden on the command line.
  197. =item B<string_mask>
  198. This option masks out the use of certain string types in certain
  199. fields. Most users will not need to change this option.
  200. It can be set to several values B<default> which is also the default
  201. option uses PrintableStrings, T61Strings and BMPStrings if the
  202. B<pkix> value is used then only PrintableStrings and BMPStrings will
  203. be used. This follows the PKIX recommendation in RFC2459. If the
  204. B<utf8only> option is used then only UTF8Strings will be used: this
  205. is the PKIX recommendation in RFC2459 after 2003. Finally the B<nombstr>
  206. option just uses PrintableStrings and T61Strings: certain software has
  207. problems with BMPStrings and UTF8Strings: in particular Netscape.
  208. =item B<req_extensions>
  209. this specifies the configuration file section containing a list of
  210. extensions to add to the certificate request. It can be overridden
  211. by the B<-reqexts> command line switch.
  212. =item B<x509_extensions>
  213. this specifies the configuration file section containing a list of
  214. extensions to add to certificate generated when the B<-x509> switch
  215. is used. It can be overridden by the B<-extensions> command line switch.
  216. =item B<prompt>
  217. if set to the value B<no> this disables prompting of certificate fields
  218. and just takes values from the config file directly. It also changes the
  219. expected format of the B<distinguished_name> and B<attributes> sections.
  220. =item B<attributes>
  221. this specifies the section containing any request attributes: its format
  222. is the same as B<distinguished_name>. Typically these may contain the
  223. challengePassword or unstructuredName types. They are currently ignored
  224. by OpenSSL's request signing utilities but some CAs might want them.
  225. =item B<distinguished_name>
  226. This specifies the section containing the distinguished name fields to
  227. prompt for when generating a certificate or certificate request. The format
  228. is described in the next section.
  229. =back
  230. =head1 DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT
  231. There are two separate formats for the distinguished name and attribute
  232. sections. If the B<prompt> option is set to B<no> then these sections
  233. just consist of field names and values: for example,
  234. CN=My Name
  235. OU=My Organization
  236. emailAddress=someone@somewhere.org
  237. This allows external programs (e.g. GUI based) to generate a template file
  238. with all the field names and values and just pass it to B<req>. An example
  239. of this kind of configuration file is contained in the B<EXAMPLES> section.
  240. Alternatively if the B<prompt> option is absent or not set to B<no> then the
  241. file contains field prompting information. It consists of lines of the form:
  242. fieldName="prompt"
  243. fieldName_default="default field value"
  244. fieldName_min= 2
  245. fieldName_max= 4
  246. "fieldName" is the field name being used, for example commonName (or CN).
  247. The "prompt" string is used to ask the user to enter the relevant
  248. details. If the user enters nothing then the default value is used if no
  249. default value is present then the field is omitted. A field can
  250. still be omitted if a default value is present if the user just
  251. enters the '.' character.
  252. The number of characters entered must be between the fieldName_min and
  253. fieldName_max limits: there may be additional restrictions based
  254. on the field being used (for example countryName can only ever be
  255. two characters long and must fit in a PrintableString).
  256. Some fields (such as organizationName) can be used more than once
  257. in a DN. This presents a problem because configuration files will
  258. not recognize the same name occurring twice. To avoid this problem
  259. if the fieldName contains some characters followed by a full stop
  260. they will be ignored. So for example a second organizationName can
  261. be input by calling it "1.organizationName".
  262. The actual permitted field names are any object identifier short or
  263. long names. These are compiled into OpenSSL and include the usual
  264. values such as commonName, countryName, localityName, organizationName,
  265. organizationUnitName, stateOrPrivinceName. Additionally emailAddress
  266. is include as well as name, surname, givenName initials and dnQualifier.
  267. Additional object identifiers can be defined with the B<oid_file> or
  268. B<oid_section> options in the configuration file. Any additional fields
  269. will be treated as though they were a DirectoryString.
  270. =head1 EXAMPLES
  271. Examine and verify certificate request:
  272. openssl req -in req.pem -text -verify -noout
  273. Create a private key and then generate a certificate request from it:
  274. openssl genrsa -out key.pem 1024
  275. openssl req -new -key key.pem -out req.pem
  276. The same but just using req:
  277. openssl req -newkey rsa:1024 -keyout key.pem -out req.pem
  278. Generate a self signed root certificate:
  279. openssl req -x509 -newkey rsa:1024 -keyout key.pem -out req.pem
  280. Example of a file pointed to by the B<oid_file> option:
  281. 1.2.3.4 shortName A longer Name
  282. 1.2.3.6 otherName Other longer Name
  283. Example of a section pointed to by B<oid_section> making use of variable
  284. expansion:
  285. testoid1=1.2.3.5
  286. testoid2=${testoid1}.6
  287. Sample configuration file prompting for field values:
  288. [ req ]
  289. default_bits = 1024
  290. default_keyfile = privkey.pem
  291. distinguished_name = req_distinguished_name
  292. attributes = req_attributes
  293. x509_extensions = v3_ca
  294. dirstring_type = nobmp
  295. [ req_distinguished_name ]
  296. countryName = Country Name (2 letter code)
  297. countryName_default = AU
  298. countryName_min = 2
  299. countryName_max = 2
  300. localityName = Locality Name (eg, city)
  301. organizationalUnitName = Organizational Unit Name (eg, section)
  302. commonName = Common Name (eg, YOUR name)
  303. commonName_max = 64
  304. emailAddress = Email Address
  305. emailAddress_max = 40
  306. [ req_attributes ]
  307. challengePassword = A challenge password
  308. challengePassword_min = 4
  309. challengePassword_max = 20
  310. [ v3_ca ]
  311. subjectKeyIdentifier=hash
  312. authorityKeyIdentifier=keyid:always,issuer:always
  313. basicConstraints = CA:true
  314. Sample configuration containing all field values:
  315. RANDFILE = $ENV::HOME/.rnd
  316. [ req ]
  317. default_bits = 1024
  318. default_keyfile = keyfile.pem
  319. distinguished_name = req_distinguished_name
  320. attributes = req_attributes
  321. prompt = no
  322. output_password = mypass
  323. [ req_distinguished_name ]
  324. C = GB
  325. ST = Test State or Province
  326. L = Test Locality
  327. O = Organization Name
  328. OU = Organizational Unit Name
  329. CN = Common Name
  330. emailAddress = test@email.address
  331. [ req_attributes ]
  332. challengePassword = A challenge password
  333. =head1 NOTES
  334. The header and footer lines in the B<PEM> format are normally:
  335. -----BEGIN CERTIFICATE REQUEST----
  336. -----END CERTIFICATE REQUEST----
  337. some software (some versions of Netscape certificate server) instead needs:
  338. -----BEGIN NEW CERTIFICATE REQUEST----
  339. -----END NEW CERTIFICATE REQUEST----
  340. which is produced with the B<-newhdr> option but is otherwise compatible.
  341. Either form is accepted transparently on input.
  342. The certificate requests generated by B<Xenroll> with MSIE have extensions
  343. added. It includes the B<keyUsage> extension which determines the type of
  344. key (signature only or general purpose) and any additional OIDs entered
  345. by the script in an extendedKeyUsage extension.
  346. =head1 DIAGNOSTICS
  347. The following messages are frequently asked about:
  348. Using configuration from /some/path/openssl.cnf
  349. Unable to load config info
  350. This is followed some time later by...
  351. unable to find 'distinguished_name' in config
  352. problems making Certificate Request
  353. The first error message is the clue: it can't find the configuration
  354. file! Certain operations (like examining a certificate request) don't
  355. need a configuration file so its use isn't enforced. Generation of
  356. certificates or requests however does need a configuration file. This
  357. could be regarded as a bug.
  358. Another puzzling message is this:
  359. Attributes:
  360. a0:00
  361. this is displayed when no attributes are present and the request includes
  362. the correct empty B<SET OF> structure (the DER encoding of which is 0xa0
  363. 0x00). If you just see:
  364. Attributes:
  365. then the B<SET OF> is missing and the encoding is technically invalid (but
  366. it is tolerated). See the description of the command line option B<-asn1-kludge>
  367. for more information.
  368. =head1 ENVIRONMENT VARIABLES
  369. The variable B<OPENSSL_CONF> if defined allows an alternative configuration
  370. file location to be specified, it will be overridden by the B<-config> command
  371. line switch if it is present. For compatibility reasons the B<SSLEAY_CONF>
  372. environment variable serves the same purpose but its use is discouraged.
  373. =head1 BUGS
  374. OpenSSL's handling of T61Strings (aka TeletexStrings) is broken: it effectively
  375. treats them as ISO-8859-1 (Latin 1), Netscape and MSIE have similar behaviour.
  376. This can cause problems if you need characters that aren't available in
  377. PrintableStrings and you don't want to or can't use BMPStrings.
  378. As a consequence of the T61String handling the only correct way to represent
  379. accented characters in OpenSSL is to use a BMPString: unfortunately Netscape
  380. currently chokes on these. If you have to use accented characters with Netscape
  381. and MSIE then you currently need to use the invalid T61String form.
  382. The current prompting is not very friendly. It doesn't allow you to confirm what
  383. you've just entered. Other things like extensions in certificate requests are
  384. statically defined in the configuration file. Some of these: like an email
  385. address in subjectAltName should be input by the user.
  386. =head1 SEE ALSO
  387. L<x509(1)|x509(1)>, L<ca(1)|ca(1)>, L<genrsa(1)|genrsa(1)>,
  388. L<gendsa(1)|gendsa(1)>, L<config(5)|config(5)>
  389. =cut