=pod

=head1 NAME

x509v3_config - X509 V3 certificate extension configuration format

=head1 DESCRIPTION

Several OpenSSL commands can add extensions to a certificate or
certificate request based on the contents of a configuration file
and CLI options such as B<-addext>.
The syntax of configuration files is described in L<config(5)>.
The commands typically have an option to specify the name of the configuration
file, and a section within that file; see the documentation of the
individual command for details.

This page uses B<extensions> as the name of the section, when needed
in examples.

Each entry in the extension section takes the form:

 name = [critical, ]value(s)

If B<critical> is present then the extension will be marked as critical.

If multiple entries are processed for the same extension name,
later entries override earlier ones with the same name.

The format of B<values> depends on the value of B<name>, many have a
type-value pairing where the type and value are separated by a colon.
There are four main types of extension:

 string
 multi-valued
 raw
 arbitrary

Each is described in the following paragraphs.

String extensions simply have a string which contains either the value itself
or how it is obtained.

Multi-valued extensions have a short form and a long form. The short form
is a comma-separated list of names and values:

 basicConstraints = critical, CA:true, pathlen:1

The long form allows the values to be placed in a separate section:

 [extensions]
 basicConstraints = critical, @basic_constraints

 [basic_constraints]
 CA = true
 pathlen = 1

Both forms are equivalent.

If an extension is multi-value and a field value must contain a comma the long
form must be used otherwise the comma would be misinterpreted as a field
separator. For example:

 subjectAltName = URI:ldap://somehost.com/CN=foo,OU=bar

will produce an error but the equivalent form:

 [extensions]
 subjectAltName = @subject_alt_section

 [subject_alt_section]
 subjectAltName = URI:ldap://somehost.com/CN=foo,OU=bar

is valid.

OpenSSL does not support multiple occurrences of the same field within a
section. In this example:

 [extensions]
 subjectAltName = @alt_section

 [alt_section]
 email = steve@example.com
 email = steve@example.org

will only recognize the last value.  To specify multiple values append a
numeric identifier, as shown here:

 [extensions]
 subjectAltName = @alt_section

 [alt_section]
 email.1 = steve@example.com
 email.2 = steve@example.org

The syntax of raw extensions is defined by the source code that parses
the extension but should be documened.
See L</Certificate Policies> for an example of a raw extension.

If an extension type is unsupported, then the I<arbitrary> extension syntax
must be used, see the L</ARBITRARY EXTENSIONS> section for more details.

=head1 STANDARD EXTENSIONS

The following sections describe the syntax of each supported extension.
They do not define the semantics of the extension.

=head2 Basic Constraints

This is a multi-valued extension which indicates whether a certificate is
a CA certificate. The first value is B<CA> followed by B<TRUE> or
B<FALSE>. If B<CA> is B<TRUE> then an optional B<pathlen> name followed by a
nonnegative value can be included.

For example:

 basicConstraints = CA:TRUE

 basicConstraints = CA:FALSE

 basicConstraints = critical, CA:TRUE, pathlen:1

A CA certificate I<must> include the B<basicConstraints> name with the B<CA>
parameter set to B<TRUE>. An end-user certificate must either have B<CA:FALSE>
or omit the extension entirely.
The B<pathlen> parameter specifies the maximum number of CAs that can appear
below this one in a chain. A B<pathlen> of zero means the CA cannot sign
any sub-CA's, and can only sign end-entity certificates.

=head2 Key Usage

Key usage is a multi-valued extension consisting of a list of names of
the permitted key usages.  The defined values are: C<digitalSignature>,
C<nonRepudiation>, C<keyEncipherment>, C<dataEncipherment>, C<keyAgreement>,
C<keyCertSign>, C<cRLSign>, C<encipherOnly>, and C<decipherOnly>.

Examples:

 keyUsage = digitalSignature, nonRepudiation

 keyUsage = critical, keyCertSign

=head2 Extended Key Usage

This extension consists of a list of values indicating purposes for which
the certificate public key can be used.
Each value can be either a short text name or an OID.
The following text names, and their intended meaning, are known:

 Value                  Meaning according to RFC 5280 etc.
 -----                  ----------------------------------
 serverAuth             SSL/TLS WWW Server Authentication
 clientAuth             SSL/TLS WWW Client Authentication
 codeSigning            Code Signing
 emailProtection        E-mail Protection (S/MIME)
 timeStamping           Trusted Timestamping
 OCSPSigning            OCSP Signing
 ipsecIKE               ipsec Internet Key Exchange
 msCodeInd              Microsoft Individual Code Signing (authenticode)
 msCodeCom              Microsoft Commercial Code Signing (authenticode)
 msCTLSign              Microsoft Trust List Signing
 msEFS                  Microsoft Encrypted File System

While IETF RFC 5280 says that B<id-kp-serverAuth> and B<id-kp-clientAuth>
are only for WWW use, in practice they are used for all kinds of TLS clients
and servers, and this is what OpenSSL assumes as well.

Examples:

 extendedKeyUsage = critical, codeSigning, 1.2.3.4

 extendedKeyUsage = serverAuth, clientAuth

=head2 Subject Key Identifier

The SKID extension specification has a value with three choices.
If the value is the word B<none> then no SKID extension will be included.
If the value is the word B<hash>, or by default for the B<x509>, B<req>, and
B<ca> apps, the process specified in RFC 5280 section 4.2.1.2. (1) is followed:
The keyIdentifier is composed of the 160-bit SHA-1 hash of the value of the BIT
STRING subjectPublicKey (excluding the tag, length, and number of unused bits).

Otherwise, the value must be a hex string (possibly with C<:> separating bytes)
to output directly, however, this is strongly discouraged.

Example:

 subjectKeyIdentifier = hash

=head2 Authority Key Identifier

The AKID extension specification may have the value B<none>
indicating that no AKID shall be included.
Otherwise it may have the value B<keyid> or B<issuer>
or both of them, separated by C<,>.
Either or both can have the option B<always>,
indicated by putting a colon C<:> between the value and this option.
For self-signed certificates the AKID is suppressed unless B<always> is present.
By default the B<x509>, B<req>, and B<ca> apps behave as if B<none> was given
for self-signed certificates and B<keyid>C<,> B<issuer> otherwise.

If B<keyid> is present, an attempt is made to
copy the subject key identifier (SKID) from the issuer certificate except if
the issuer certificate is the same as the current one and it is not self-signed.
The hash of the public key related to the signing key is taken as fallback
if the issuer certificate is the same as the current certificate.
If B<always> is present but no value can be obtained, an error is returned.

If B<issuer> is present, and in addition it has the option B<always> specified
or B<keyid> is not present,
then the issuer DN and serial number are copied from the issuer certificate.
If this fails, an error is returned.

Examples:

 authorityKeyIdentifier = keyid, issuer

 authorityKeyIdentifier = keyid, issuer:always

=head2 Subject Alternative Name

This is a multi-valued extension that supports several types of name
identifier, including
B<email> (an email address),
B<URI> (a uniform resource indicator),
B<DNS> (a DNS domain name),
B<RID> (a registered ID: OBJECT IDENTIFIER),
B<IP> (an IP address),
B<dirName> (a distinguished name),
and B<otherName>.
The syntax of each is described in the following paragraphs.

The B<email> option has two special values.
C<copy> will automatically include any email addresses
contained in the certificate subject name in the extension.
C<move> will automatically move any email addresses
from the certificate subject name to the extension.

The IP address used in the B<IP> option can be in either IPv4 or IPv6 format.

The value of B<dirName> is specifies the configuration section containing
the distinguished name to use, as a set of name-value pairs.
Multi-valued AVAs can be formed by prefacing the name with a B<+> character.

The value of B<otherName> can include arbitrary data associated with an OID;
the value should be the OID followed by a semicolon and the content in specified
using the syntax in L<ASN1_generate_nconf(3)>.

Examples:

 subjectAltName = email:copy, email:my@example.com, URI:http://my.example.com/

 subjectAltName = IP:192.168.7.1

 subjectAltName = IP:13::17

 subjectAltName = email:my@example.com, RID:1.2.3.4

 subjectAltName = otherName:1.2.3.4;UTF8:some other identifier

 [extensions]
 subjectAltName = dirName:dir_sect

 [dir_sect]
 C = UK
 O = My Organization
 OU = My Unit
 CN = My Name

Non-ASCII Email Address conforming the syntax defined in Section 3.3 of RFC 6531
are provided as otherName.SmtpUTF8Mailbox. According to RFC 8398, the email
address should be provided as UTF8String. To enforce the valid representation in
the certificate, the SmtpUTF8Mailbox should be provided as follows

 subjectAltName=@alts
 [alts]
 otherName = 1.3.6.1.5.5.7.8.9;FORMAT:UTF8,UTF8String:nonasciiname.example.com

=head2 Issuer Alternative Name

This extension supports most of the options of subject alternative name;
it does not support B<email:copy>.
It also adds B<issuer:copy> as an allowed value, which copies any subject
alternative names from the issuer certificate, if possible.

Example:

 issuerAltName = issuer:copy

=head2 Authority Info Access

This extension gives details about how to retrieve information that
related to the certificate that the CA makes available. The syntax is
B<access_id;location>, where B<access_id> is an object identifier
(although only a few values are well-known) and B<location> has the same
syntax as subject alternative name (except that B<email:copy> is not supported).

Possible values for access_id include B<OCSP> (OCSP responder),
B<caIssuers> (CA Issuers),
B<ad_timestamping> (AD Time Stamping),
B<AD_DVCS> (ad dvcs),
B<caRepository> (CA Repository).

Examples:

 authorityInfoAccess = OCSP;URI:http://ocsp.example.com/,caIssuers;URI:http://myca.example.com/ca.cer

 authorityInfoAccess = OCSP;URI:http://ocsp.example.com/

=head2 CRL distribution points

This is a multi-valued extension whose values can be either a name-value
pair using the same form as subject alternative name or a single value
specifying the section name containing all the distribution point values.

When a name-value pair is used, a DistributionPoint extension will
be set with the given value as the fullName field as the distributionPoint
value, and the reasons and cRLIssuer fields will be omitted.

When a single option is used, the value specifies the section, and that
section can have the following items:

=over 4

=item fullname

The full name of the distribution point, in the same format as the subject
alternative name.

=item relativename

The value is taken as a distinguished name fragment that is set as the
value of the nameRelativeToCRLIssuer field.

=item CRLIssuer

The value must in the same format as the subject alternative name.

=item reasons

A multi-value field that contains the reasons for revocation. The recognized
values are: C<keyCompromise>, C<CACompromise>, C<affiliationChanged>,
C<superseded>, C<cessationOfOperation>, C<certificateHold>,
C<privilegeWithdrawn>, and C<AACompromise>.

=back

Only one of B<fullname> or B<relativename> should be specified.

Simple examples:

 crlDistributionPoints = URI:http://example.com/myca.crl

 crlDistributionPoints = URI:http://example.com/myca.crl, URI:http://example.org/my.crl

Full distribution point example:

 [extensions]
 crlDistributionPoints = crldp1_section

 [crldp1_section]
 fullname = URI:http://example.com/myca.crl
 CRLissuer = dirName:issuer_sect
 reasons = keyCompromise, CACompromise

 [issuer_sect]
 C = UK
 O = Organisation
 CN = Some Name

=head2 Issuing Distribution Point

This extension should only appear in CRLs. It is a multi-valued extension
whose syntax is similar to the "section" pointed to by the CRL distribution
points extension. The following names have meaning:

=over 4

=item fullname

The full name of the distribution point, in the same format as the subject
alternative name.

=item relativename

The value is taken as a distinguished name fragment that is set as the
value of the nameRelativeToCRLIssuer field.

=item onlysomereasons

A multi-value field that contains the reasons for revocation. The recognized
values are: C<keyCompromise>, C<CACompromise>, C<affiliationChanged>,
C<superseded>, C<cessationOfOperation>, C<certificateHold>,
C<privilegeWithdrawn>, and C<AACompromise>.

=item onlyuser, onlyCA, onlyAA, indirectCRL

The value for each of these names is a boolean.

=back

Example:

 [extensions]
 issuingDistributionPoint = critical, @idp_section

 [idp_section]
 fullname = URI:http://example.com/myca.crl
 indirectCRL = TRUE
 onlysomereasons = keyCompromise, CACompromise

=head2 Certificate Policies

This is a I<raw> extension that supports all of the defined fields of the
certificate extension.

Policies without qualifiers are specified by giving the OID.
Multiple policies are comma-separated. For example:

 certificatePolicies = 1.2.4.5, 1.1.3.4

To include policy qualifiers, use the "@section" syntax to point to a
section that specifies all the information.

The section referred to must include the policy OID using the name
B<policyIdentifier>. cPSuri qualifiers can be included using the syntax:

 CPS.nnn = value

where C<nnn> is a number.

userNotice qualifiers can be set using the syntax:

 userNotice.nnn = @notice

The value of the userNotice qualifier is specified in the relevant section.
This section can include B<explicitText>, B<organization>, and B<noticeNumbers>
options. explicitText and organization are text strings, noticeNumbers is a
comma separated list of numbers. The organization and noticeNumbers options
(if included) must BOTH be present. Some software might require
the B<ia5org> option at the top level; this changes the encoding from
Displaytext to IA5String.

Example:

 [extensions]
 certificatePolicies = ia5org, 1.2.3.4, 1.5.6.7.8, @polsect

 [polsect]
 policyIdentifier = 1.3.5.8
 CPS.1 = "http://my.host.example.com/"
 CPS.2 = "http://my.your.example.com/"
 userNotice.1 = @notice

 [notice]
 explicitText = "Explicit Text Here"
 organization = "Organisation Name"
 noticeNumbers = 1, 2, 3, 4

The character encoding of explicitText can be specified by prefixing the
value with B<UTF8>, B<BMP>, or B<VISIBLE> followed by colon. For example:

 [notice]
 explicitText = "UTF8:Explicit Text Here"

=head2 Policy Constraints

This is a multi-valued extension which consisting of the names
B<requireExplicitPolicy> or B<inhibitPolicyMapping> and a non negative integer
value. At least one component must be present.

Example:

 policyConstraints = requireExplicitPolicy:3

=head2 Inhibit Any Policy

This is a string extension whose value must be a non negative integer.

Example:

 inhibitAnyPolicy = 2

=head2 Name Constraints

This is a multi-valued extension. The name should
begin with the word B<permitted> or B<excluded> followed by a B<;>. The rest of
the name and the value follows the syntax of subjectAltName except
B<email:copy>
is not supported and the B<IP> form should consist of an IP addresses and
subnet mask separated by a B</>.

Examples:

 nameConstraints = permitted;IP:192.168.0.0/255.255.0.0

 nameConstraints = permitted;email:.example.com

 nameConstraints = excluded;email:.com

=head2 OCSP No Check

This is a string extension. It is parsed, but ignored.

Example:

 noCheck = ignored

=head2 TLS Feature (aka Must Staple)

This is a multi-valued extension consisting of a list of TLS extension
identifiers. Each identifier may be a number (0..65535) or a supported name.
When a TLS client sends a listed extension, the TLS server is expected to
include that extension in its reply.

The supported names are: B<status_request> and B<status_request_v2>.

Example:

 tlsfeature = status_request

=head1 DEPRECATED EXTENSIONS

The following extensions are non standard, Netscape specific and largely
obsolete. Their use in new applications is discouraged.

=head2 Netscape String extensions

Netscape Comment (B<nsComment>) is a string extension containing a comment
which will be displayed when the certificate is viewed in some browsers.
Other extensions of this type are: B<nsBaseUrl>,
B<nsRevocationUrl>, B<nsCaRevocationUrl>, B<nsRenewalUrl>, B<nsCaPolicyUrl>
and B<nsSslServerName>.

=head2 Netscape Certificate Type

This is a multi-valued extensions which consists of a list of flags to be
included. It was used to indicate the purposes for which a certificate could
be used. The basicConstraints, keyUsage and extended key usage extensions are
now used instead.

Acceptable values for nsCertType are: B<client>, B<server>, B<email>,
B<objsign>, B<reserved>, B<sslCA>, B<emailCA>, B<objCA>.

=head1 ARBITRARY EXTENSIONS

If an extension is not supported by the OpenSSL code then it must be encoded
using the arbitrary extension format. It is also possible to use the arbitrary
format for supported extensions. Extreme care should be taken to ensure that
the data is formatted correctly for the given extension type.

There are two ways to encode arbitrary extensions.

The first way is to use the word ASN1 followed by the extension content
using the same syntax as L<ASN1_generate_nconf(3)>.
For example:

 [extensions]
 1.2.3.4 = critical, ASN1:UTF8String:Some random data
 1.2.3.4.1 = ASN1:SEQUENCE:seq_sect

 [seq_sect]
 field1 = UTF8:field1
 field2 = UTF8:field2

It is also possible to use the word DER to include the raw encoded data in any
extension.

 1.2.3.4 = critical, DER:01:02:03:04
 1.2.3.4.1 = DER:01020304

The value following DER is a hex dump of the DER encoding of the extension
Any extension can be placed in this form to override the default behaviour.
For example:

 basicConstraints = critical, DER:00:01:02:03

=head1 WARNINGS

There is no guarantee that a specific implementation will process a given
extension. It may therefore be sometimes possible to use certificates for
purposes prohibited by their extensions because a specific application does
not recognize or honour the values of the relevant extensions.

The DER and ASN1 options should be used with caution. It is possible to create
invalid extensions if they are not used carefully.

=head1 SEE ALSO

L<openssl-req(1)>, L<openssl-ca(1)>, L<openssl-x509(1)>,
L<ASN1_generate_nconf(3)>

=head1 COPYRIGHT

Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
