|  | 
 | =pod | 
 |  | 
 | =head1 NAME | 
 |  | 
 | req - PKCS#10 certificate request and certificate generating utility. | 
 |  | 
 | =head1 SYNOPSIS | 
 |  | 
 | B<openssl> B<req> | 
 | [B<-inform PEM|DER>] | 
 | [B<-outform PEM|DER>] | 
 | [B<-in filename>] | 
 | [B<-passin arg>] | 
 | [B<-out filename>] | 
 | [B<-passout arg>] | 
 | [B<-text>] | 
 | [B<-noout>] | 
 | [B<-verify>] | 
 | [B<-modulus>] | 
 | [B<-new>] | 
 | [B<-rand file(s)>] | 
 | [B<-newkey rsa:bits>] | 
 | [B<-newkey dsa:file>] | 
 | [B<-nodes>] | 
 | [B<-key filename>] | 
 | [B<-keyform PEM|DER>] | 
 | [B<-keyout filename>] | 
 | [B<-[md5|sha1|md2|mdc2]>] | 
 | [B<-config filename>] | 
 | [B<-subj arg>] | 
 | [B<-x509>] | 
 | [B<-days n>] | 
 | [B<-set_serial n>] | 
 | [B<-asn1-kludge>] | 
 | [B<-newhdr>] | 
 | [B<-extensions section>] | 
 | [B<-reqexts section>] | 
 | [B<-batch>] | 
 | [B<-verbose>] | 
 |  | 
 | =head1 DESCRIPTION | 
 |  | 
 | The B<req> command primarily creates and processes certificate requests | 
 | in PKCS#10 format. It can additionally create self signed certificates | 
 | for use as root CAs for example. | 
 |  | 
 | =head1 COMMAND OPTIONS | 
 |  | 
 | =over 4 | 
 |  | 
 | =item B<-inform DER|PEM> | 
 |  | 
 | This specifies the input format. The B<DER> option uses an ASN1 DER encoded | 
 | form compatible with the PKCS#10. The B<PEM> form is the default format: it | 
 | consists of the B<DER> format base64 encoded with additional header and | 
 | footer lines. | 
 |  | 
 | =item B<-outform DER|PEM> | 
 |  | 
 | This specifies the output format, the options have the same meaning as the  | 
 | B<-inform> option. | 
 |  | 
 | =item B<-in filename> | 
 |  | 
 | This specifies the input filename to read a request from or standard input | 
 | if this option is not specified. A request is only read if the creation | 
 | options (B<-new> and B<-newkey>) are not specified. | 
 |  | 
 | =item B<-passin arg> | 
 |  | 
 | the input file password source. For more information about the format of B<arg> | 
 | see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>. | 
 |  | 
 | =item B<-out filename> | 
 |  | 
 | This specifies the output filename to write to or standard output by | 
 | default. | 
 |  | 
 | =item B<-passout arg> | 
 |  | 
 | the output file password source. For more information about the format of B<arg> | 
 | see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>. | 
 |  | 
 | =item B<-text> | 
 |  | 
 | prints out the certificate request in text form. | 
 |  | 
 | =item B<-noout> | 
 |  | 
 | this option prevents output of the encoded version of the request. | 
 |  | 
 | =item B<-modulus> | 
 |  | 
 | this option prints out the value of the modulus of the public key | 
 | contained in the request. | 
 |  | 
 | =item B<-verify> | 
 |  | 
 | verifies the signature on the request. | 
 |  | 
 | =item B<-new> | 
 |  | 
 | this option generates a new certificate request. It will prompt | 
 | the user for the relevant field values. The actual fields | 
 | prompted for and their maximum and minimum sizes are specified | 
 | in the configuration file and any requested extensions. | 
 |  | 
 | If the B<-key> option is not used it will generate a new RSA private | 
 | key using information specified in the configuration file. | 
 |  | 
 | =item B<-rand file(s)> | 
 |  | 
 | a file or files containing random data used to seed the random number | 
 | generator, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>). | 
 | Multiple files can be specified separated by a OS-dependent character. | 
 | The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for | 
 | all others. | 
 |  | 
 | =item B<-newkey arg> | 
 |  | 
 | this option creates a new certificate request and a new private | 
 | key. The argument takes one of two forms. B<rsa:nbits>, where | 
 | B<nbits> is the number of bits, generates an RSA key B<nbits> | 
 | in size. B<dsa:filename> generates a DSA key using the parameters | 
 | in the file B<filename>. | 
 |  | 
 | =item B<-key filename> | 
 |  | 
 | This specifies the file to read the private key from. It also | 
 | accepts PKCS#8 format private keys for PEM format files. | 
 |  | 
 | =item B<-keyform PEM|DER> | 
 |  | 
 | the format of the private key file specified in the B<-key> | 
 | argument. PEM is the default. | 
 |  | 
 | =item B<-keyout filename> | 
 |  | 
 | this gives the filename to write the newly created private key to. | 
 | If this option is not specified then the filename present in the | 
 | configuration file is used. | 
 |  | 
 | =item B<-nodes> | 
 |  | 
 | if this option is specified then if a private key is created it | 
 | will not be encrypted. | 
 |  | 
 | =item B<-[md5|sha1|md2|mdc2]> | 
 |  | 
 | this specifies the message digest to sign the request with. This | 
 | overrides the digest algorithm specified in the configuration file. | 
 | This option is ignored for DSA requests: they always use SHA1. | 
 |  | 
 | =item B<-config filename> | 
 |  | 
 | this allows an alternative configuration file to be specified, | 
 | this overrides the compile time filename or any specified in | 
 | the B<OPENSSL_CONF> environment variable. | 
 |  | 
 | =item B<-subj arg> | 
 |  | 
 | sets subject name for new request or supersedes the subject name | 
 | when processing a request. | 
 |  | 
 | =item B<-x509> | 
 |  | 
 | this option outputs a self signed certificate instead of a certificate | 
 | request. This is typically used to generate a test certificate or | 
 | a self signed root CA. The extensions added to the certificate | 
 | (if any) are specified in the configuration file. Unless specified | 
 | using the B<set_serial> option B<0> will be used for the serial | 
 | number. | 
 |  | 
 | =item B<-days n> | 
 |  | 
 | when the B<-x509> option is being used this specifies the number of | 
 | days to certify the certificate for. The default is 30 days. | 
 |  | 
 | =item B<-set_serial n> | 
 |  | 
 | serial number to use when outputting a self signed certificate. This | 
 | may be specified as a decimal value or a hex value if preceded by B<0x>. | 
 | It is possible to use negative serial numbers but this is not recommended. | 
 |  | 
 | =item B<-extensions section> | 
 |  | 
 | =item B<-reqexts section> | 
 |  | 
 | these options specify alternative sections to include certificate | 
 | extensions (if the B<-x509> option is present) or certificate | 
 | request extensions. This allows several different sections to | 
 | be used in the same configuration file to specify requests for | 
 | a variety of purposes. | 
 |  | 
 | =item B<-asn1-kludge> | 
 |  | 
 | by default the B<req> command outputs certificate requests containing | 
 | no attributes in the correct PKCS#10 format. However certain CAs will only | 
 | accept requests containing no attributes in an invalid form: this | 
 | option produces this invalid format. | 
 |  | 
 | More precisely the B<Attributes> in a PKCS#10 certificate request | 
 | are defined as a B<SET OF Attribute>. They are B<not OPTIONAL> so | 
 | if no attributes are present then they should be encoded as an | 
 | empty B<SET OF>. The invalid form does not include the empty | 
 | B<SET OF> whereas the correct form does. | 
 |  | 
 | It should be noted that very few CAs still require the use of this option. | 
 |  | 
 | =item B<-newhdr> | 
 |  | 
 | Adds the word B<NEW> to the PEM file header and footer lines on the outputed | 
 | request. Some software (Netscape certificate server) and some CAs need this. | 
 |  | 
 | =item B<-batch> | 
 |  | 
 | non-interactive mode. | 
 |  | 
 | =item B<-verbose> | 
 |  | 
 | print extra details about the operations being performed. | 
 |  | 
 | =back | 
 |  | 
 | =head1 CONFIGURATION FILE FORMAT | 
 |  | 
 | The configuration options are specified in the B<req> section of | 
 | the configuration file. As with all configuration files if no | 
 | value is specified in the specific section (i.e. B<req>) then | 
 | the initial unnamed or B<default> section is searched too. | 
 |  | 
 | The options available are described in detail below. | 
 |  | 
 | =over 4 | 
 |  | 
 | =item B<input_password output_password> | 
 |  | 
 | The passwords for the input private key file (if present) and | 
 | the output private key file (if one will be created). The | 
 | command line options B<passin> and B<passout> override the | 
 | configuration file values. | 
 |  | 
 | =item B<default_bits> | 
 |  | 
 | This specifies the default key size in bits. If not specified then | 
 | 512 is used. It is used if the B<-new> option is used. It can be | 
 | overridden by using the B<-newkey> option. | 
 |  | 
 | =item B<default_keyfile> | 
 |  | 
 | This is the default filename to write a private key to. If not | 
 | specified the key is written to standard output. This can be | 
 | overridden by the B<-keyout> option. | 
 |  | 
 | =item B<oid_file> | 
 |  | 
 | This specifies a file containing additional B<OBJECT IDENTIFIERS>. | 
 | Each line of the file should consist of the numerical form of the | 
 | object identifier followed by white space then the short name followed | 
 | by white space and finally the long name.  | 
 |  | 
 | =item B<oid_section> | 
 |  | 
 | This specifies a section in the configuration file containing extra | 
 | object identifiers. Each line should consist of the short name of the | 
 | object identifier followed by B<=> and the numerical form. The short | 
 | and long names are the same when this option is used. | 
 |  | 
 | =item B<RANDFILE> | 
 |  | 
 | This specifies a filename in which random number seed information is | 
 | placed and read from, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>). | 
 | It is used for private key generation. | 
 |  | 
 | =item B<encrypt_key> | 
 |  | 
 | If this is set to B<no> then if a private key is generated it is | 
 | B<not> encrypted. This is equivalent to the B<-nodes> command line | 
 | option. For compatibility B<encrypt_rsa_key> is an equivalent option. | 
 |  | 
 | =item B<default_md> | 
 |  | 
 | This option specifies the digest algorithm to use. Possible values | 
 | include B<md5 sha1 mdc2>. If not present then MD5 is used. This | 
 | option can be overridden on the command line. | 
 |  | 
 | =item B<string_mask> | 
 |  | 
 | This option masks out the use of certain string types in certain | 
 | fields. Most users will not need to change this option. | 
 |  | 
 | It can be set to several values B<default> which is also the default | 
 | option uses PrintableStrings, T61Strings and BMPStrings if the  | 
 | B<pkix> value is used then only PrintableStrings and BMPStrings will | 
 | be used. This follows the PKIX recommendation in RFC2459. If the | 
 | B<utf8only> option is used then only UTF8Strings will be used: this | 
 | is the PKIX recommendation in RFC2459 after 2003. Finally the B<nombstr> | 
 | option just uses PrintableStrings and T61Strings: certain software has | 
 | problems with BMPStrings and UTF8Strings: in particular Netscape. | 
 |  | 
 | =item B<req_extensions> | 
 |  | 
 | this specifies the configuration file section containing a list of | 
 | extensions to add to the certificate request. It can be overridden | 
 | by the B<-reqexts> command line switch. | 
 |  | 
 | =item B<x509_extensions> | 
 |  | 
 | this specifies the configuration file section containing a list of | 
 | extensions to add to certificate generated when the B<-x509> switch | 
 | is used. It can be overridden by the B<-extensions> command line switch. | 
 |  | 
 | =item B<prompt> | 
 |  | 
 | if set to the value B<no> this disables prompting of certificate fields | 
 | and just takes values from the config file directly. It also changes the | 
 | expected format of the B<distinguished_name> and B<attributes> sections. | 
 |  | 
 | =item B<attributes> | 
 |  | 
 | this specifies the section containing any request attributes: its format | 
 | is the same as B<distinguished_name>. Typically these may contain the | 
 | challengePassword or unstructuredName types. They are currently ignored | 
 | by OpenSSL's request signing utilities but some CAs might want them. | 
 |  | 
 | =item B<distinguished_name> | 
 |  | 
 | This specifies the section containing the distinguished name fields to | 
 | prompt for when generating a certificate or certificate request. The format | 
 | is described in the next section. | 
 |  | 
 | =back | 
 |  | 
 | =head1 DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT | 
 |  | 
 | There are two separate formats for the distinguished name and attribute | 
 | sections. If the B<prompt> option is set to B<no> then these sections | 
 | just consist of field names and values: for example, | 
 |  | 
 |  CN=My Name | 
 |  OU=My Organization | 
 |  emailAddress=someone@somewhere.org | 
 |  | 
 | This allows external programs (e.g. GUI based) to generate a template file | 
 | with all the field names and values and just pass it to B<req>. An example | 
 | of this kind of configuration file is contained in the B<EXAMPLES> section. | 
 |  | 
 | Alternatively if the B<prompt> option is absent or not set to B<no> then the | 
 | file contains field prompting information. It consists of lines of the form: | 
 |  | 
 |  fieldName="prompt" | 
 |  fieldName_default="default field value" | 
 |  fieldName_min= 2 | 
 |  fieldName_max= 4 | 
 |  | 
 | "fieldName" is the field name being used, for example commonName (or CN). | 
 | The "prompt" string is used to ask the user to enter the relevant | 
 | details. If the user enters nothing then the default value is used if no | 
 | default value is present then the field is omitted. A field can | 
 | still be omitted if a default value is present if the user just | 
 | enters the '.' character. | 
 |  | 
 | The number of characters entered must be between the fieldName_min and | 
 | fieldName_max limits: there may be additional restrictions based | 
 | on the field being used (for example countryName can only ever be | 
 | two characters long and must fit in a PrintableString). | 
 |  | 
 | Some fields (such as organizationName) can be used more than once | 
 | in a DN. This presents a problem because configuration files will | 
 | not recognize the same name occurring twice. To avoid this problem | 
 | if the fieldName contains some characters followed by a full stop | 
 | they will be ignored. So for example a second organizationName can | 
 | be input by calling it "1.organizationName". | 
 |  | 
 | The actual permitted field names are any object identifier short or | 
 | long names. These are compiled into OpenSSL and include the usual | 
 | values such as commonName, countryName, localityName, organizationName, | 
 | organizationUnitName, stateOrPrivinceName. Additionally emailAddress | 
 | is include as well as name, surname, givenName initials and dnQualifier. | 
 |  | 
 | Additional object identifiers can be defined with the B<oid_file> or | 
 | B<oid_section> options in the configuration file. Any additional fields | 
 | will be treated as though they were a DirectoryString. | 
 |  | 
 |  | 
 | =head1 EXAMPLES | 
 |  | 
 | Examine and verify certificate request: | 
 |  | 
 |  openssl req -in req.pem -text -verify -noout | 
 |  | 
 | Create a private key and then generate a certificate request from it: | 
 |  | 
 |  openssl genrsa -out key.pem 1024 | 
 |  openssl req -new -key key.pem -out req.pem | 
 |  | 
 | The same but just using req: | 
 |  | 
 |  openssl req -newkey rsa:1024 -keyout key.pem -out req.pem | 
 |  | 
 | Generate a self signed root certificate: | 
 |  | 
 |  openssl req -x509 -newkey rsa:1024 -keyout key.pem -out req.pem | 
 |  | 
 | Example of a file pointed to by the B<oid_file> option: | 
 |  | 
 |  1.2.3.4	shortName	A longer Name | 
 |  1.2.3.6	otherName	Other longer Name | 
 |  | 
 | Example of a section pointed to by B<oid_section> making use of variable | 
 | expansion: | 
 |  | 
 |  testoid1=1.2.3.5 | 
 |  testoid2=${testoid1}.6 | 
 |  | 
 | Sample configuration file prompting for field values: | 
 |  | 
 |  [ req ] | 
 |  default_bits		= 1024 | 
 |  default_keyfile 	= privkey.pem | 
 |  distinguished_name	= req_distinguished_name | 
 |  attributes		= req_attributes | 
 |  x509_extensions	= v3_ca | 
 |  | 
 |  dirstring_type = nobmp | 
 |  | 
 |  [ req_distinguished_name ] | 
 |  countryName			= Country Name (2 letter code) | 
 |  countryName_default		= AU | 
 |  countryName_min		= 2 | 
 |  countryName_max		= 2 | 
 |  | 
 |  localityName			= Locality Name (eg, city) | 
 |  | 
 |  organizationalUnitName		= Organizational Unit Name (eg, section) | 
 |  | 
 |  commonName			= Common Name (eg, YOUR name) | 
 |  commonName_max			= 64 | 
 |  | 
 |  emailAddress			= Email Address | 
 |  emailAddress_max		= 40 | 
 |  | 
 |  [ req_attributes ] | 
 |  challengePassword		= A challenge password | 
 |  challengePassword_min		= 4 | 
 |  challengePassword_max		= 20 | 
 |  | 
 |  [ v3_ca ] | 
 |  | 
 |  subjectKeyIdentifier=hash | 
 |  authorityKeyIdentifier=keyid:always,issuer:always | 
 |  basicConstraints = CA:true | 
 |  | 
 | Sample configuration containing all field values: | 
 |  | 
 |  | 
 |  RANDFILE		= $ENV::HOME/.rnd | 
 |  | 
 |  [ req ] | 
 |  default_bits		= 1024 | 
 |  default_keyfile 	= keyfile.pem | 
 |  distinguished_name	= req_distinguished_name | 
 |  attributes		= req_attributes | 
 |  prompt			= no | 
 |  output_password	= mypass | 
 |  | 
 |  [ req_distinguished_name ] | 
 |  C			= GB | 
 |  ST			= Test State or Province | 
 |  L			= Test Locality | 
 |  O			= Organization Name | 
 |  OU			= Organizational Unit Name | 
 |  CN			= Common Name | 
 |  emailAddress		= test@email.address | 
 |  | 
 |  [ req_attributes ] | 
 |  challengePassword		= A challenge password | 
 |  | 
 |  | 
 | =head1 NOTES | 
 |  | 
 | The header and footer lines in the B<PEM> format are normally: | 
 |  | 
 |  -----BEGIN CERTIFICATE REQUEST---- | 
 |  -----END CERTIFICATE REQUEST---- | 
 |  | 
 | some software (some versions of Netscape certificate server) instead needs: | 
 |  | 
 |  -----BEGIN NEW CERTIFICATE REQUEST---- | 
 |  -----END NEW CERTIFICATE REQUEST---- | 
 |  | 
 | which is produced with the B<-newhdr> option but is otherwise compatible. | 
 | Either form is accepted transparently on input. | 
 |  | 
 | The certificate requests generated by B<Xenroll> with MSIE have extensions | 
 | added. It includes the B<keyUsage> extension which determines the type of | 
 | key (signature only or general purpose) and any additional OIDs entered | 
 | by the script in an extendedKeyUsage extension. | 
 |  | 
 | =head1 DIAGNOSTICS | 
 |  | 
 | The following messages are frequently asked about: | 
 |  | 
 | 	Using configuration from /some/path/openssl.cnf | 
 | 	Unable to load config info | 
 |  | 
 | This is followed some time later by... | 
 |  | 
 | 	unable to find 'distinguished_name' in config | 
 | 	problems making Certificate Request | 
 |  | 
 | The first error message is the clue: it can't find the configuration | 
 | file! Certain operations (like examining a certificate request) don't | 
 | need a configuration file so its use isn't enforced. Generation of | 
 | certificates or requests however does need a configuration file. This | 
 | could be regarded as a bug. | 
 |  | 
 | Another puzzling message is this: | 
 |  | 
 |         Attributes: | 
 |             a0:00 | 
 |  | 
 | this is displayed when no attributes are present and the request includes | 
 | the correct empty B<SET OF> structure (the DER encoding of which is 0xa0 | 
 | 0x00). If you just see: | 
 |  | 
 |         Attributes: | 
 |  | 
 | then the B<SET OF> is missing and the encoding is technically invalid (but | 
 | it is tolerated). See the description of the command line option B<-asn1-kludge> | 
 | for more information. | 
 |  | 
 | =head1 ENVIRONMENT VARIABLES | 
 |  | 
 | The variable B<OPENSSL_CONF> if defined allows an alternative configuration | 
 | file location to be specified, it will be overridden by the B<-config> command | 
 | line switch if it is present. For compatibility reasons the B<SSLEAY_CONF> | 
 | environment variable serves the same purpose but its use is discouraged. | 
 |  | 
 | =head1 BUGS | 
 |  | 
 | OpenSSL's handling of T61Strings (aka TeletexStrings) is broken: it effectively | 
 | treats them as ISO-8859-1 (Latin 1), Netscape and MSIE have similar behaviour. | 
 | This can cause problems if you need characters that aren't available in | 
 | PrintableStrings and you don't want to or can't use BMPStrings. | 
 |  | 
 | As a consequence of the T61String handling the only correct way to represent | 
 | accented characters in OpenSSL is to use a BMPString: unfortunately Netscape | 
 | currently chokes on these. If you have to use accented characters with Netscape | 
 | and MSIE then you currently need to use the invalid T61String form. | 
 |  | 
 | The current prompting is not very friendly. It doesn't allow you to confirm what | 
 | you've just entered. Other things like extensions in certificate requests are | 
 | statically defined in the configuration file. Some of these: like an email | 
 | address in subjectAltName should be input by the user. | 
 |  | 
 | =head1 SEE ALSO | 
 |  | 
 | L<x509(1)|x509(1)>, L<ca(1)|ca(1)>, L<genrsa(1)|genrsa(1)>, | 
 | L<gendsa(1)|gendsa(1)>, L<config(5)|config(5)> | 
 |  | 
 | =cut |