123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- =pod
- =for comment openssl_manual_section:5
- =head1 NAME
- config - OpenSSL CONF library configuration files
- =head1 DESCRIPTION
- The OpenSSL CONF library can be used to read configuration files.
- It is used for the OpenSSL master configuration file B<openssl.cnf>
- and in a few other places like B<SPKAC> files and certificate extension
- files for the B<x509> utility. OpenSSL applications can also use the
- CONF library for their own purposes.
- A configuration file is divided into a number of sections. Each section
- starts with a line B<[ section_name ]> and ends when a new section is
- started or end of file is reached. A section name can consist of
- alphanumeric characters and underscores.
- The first section of a configuration file is special and is referred
- to as the B<default> section this is usually unnamed and is from the
- start of file until the first named section. When a name is being looked up
- it is first looked up in a named section (if any) and then the
- default section.
- The environment is mapped onto a section called B<ENV>.
- Comments can be included by preceding them with the B<#> character
- Each section in a configuration file consists of a number of name and
- value pairs of the form B<name=value>
- The B<name> string can contain any alphanumeric characters as well as
- a few punctuation symbols such as B<.> B<,> B<;> and B<_>.
- The B<value> string consists of the string following the B<=> character
- until end of line with any leading and trailing white space removed.
- The value string undergoes variable expansion. This can be done by
- including the form B<$var> or B<${var}>: this will substitute the value
- of the named variable in the current section. It is also possible to
- substitute a value from another section using the syntax B<$section::name>
- or B<${section::name}>. By using the form B<$ENV::name> environment
- variables can be substituted. It is also possible to assign values to
- environment variables by using the name B<ENV::name>, this will work
- if the program looks up environment variables using the B<CONF> library
- instead of calling B<getenv()> directly. The value string must not exceed 64k in
- length after variable expansion. Otherwise an error will occur.
- It is possible to escape certain characters by using any kind of quote
- or the B<\> character. By making the last character of a line a B<\>
- a B<value> string can be spread across multiple lines. In addition
- the sequences B<\n>, B<\r>, B<\b> and B<\t> are recognized.
- =head1 OPENSSL LIBRARY CONFIGURATION
- In OpenSSL 0.9.7 and later applications can automatically configure certain
- aspects of OpenSSL using the master OpenSSL configuration file, or optionally
- an alternative configuration file. The B<openssl> utility includes this
- functionality: any sub command uses the master OpenSSL configuration file
- unless an option is used in the sub command to use an alternative configuration
- file.
- To enable library configuration the default section needs to contain an
- appropriate line which points to the main configuration section. The default
- name is B<openssl_conf> which is used by the B<openssl> utility. Other
- applications may use an alternative name such as B<myapplicaton_conf>.
- The configuration section should consist of a set of name value pairs which
- contain specific module configuration information. The B<name> represents
- the name of the I<configuration module> the meaning of the B<value> is
- module specific: it may, for example, represent a further configuration
- section containing configuration module specific information. E.g.
- openssl_conf = openssl_init
- [openssl_init]
- oid_section = new_oids
- engines = engine_section
- [new_oids]
- ... new oids here ...
- [engine_section]
- ... engine stuff here ...
- The features of each configuration module are described below.
- =head2 ASN1 OBJECT CONFIGURATION MODULE
- This module has the name B<oid_section>. The value of this variable points
- to a section containing name value pairs of OIDs: the name is the OID short
- and long name, the value is the numerical form of the OID. Although some of
- the B<openssl> utility sub commands already have their own ASN1 OBJECT section
- functionality not all do. By using the ASN1 OBJECT configuration module
- B<all> the B<openssl> utility sub commands can see the new objects as well
- as any compliant applications. For example:
- [new_oids]
-
- some_new_oid = 1.2.3.4
- some_other_oid = 1.2.3.5
- In OpenSSL 0.9.8 it is also possible to set the value to the long name followed
- by a comma and the numerical OID form. For example:
- shortName = some object long name, 1.2.3.4
- =head2 ENGINE CONFIGURATION MODULE
- This ENGINE configuration module has the name B<engines>. The value of this
- variable points to a section containing further ENGINE configuration
- information.
- The section pointed to by B<engines> is a table of engine names (though see
- B<engine_id> below) and further sections containing configuration information
- specific to each ENGINE.
- Each ENGINE specific section is used to set default algorithms, load
- dynamic, perform initialization and send ctrls. The actual operation performed
- depends on the I<command> name which is the name of the name value pair. The
- currently supported commands are listed below.
- For example:
- [engine_section]
- # Configure ENGINE named "foo"
- foo = foo_section
- # Configure ENGINE named "bar"
- bar = bar_section
- [foo_section]
- ... foo ENGINE specific commands ...
- [bar_section]
- ... "bar" ENGINE specific commands ...
- The command B<engine_id> is used to give the ENGINE name. If used this
- command must be first. For example:
- [engine_section]
- # This would normally handle an ENGINE named "foo"
- foo = foo_section
- [foo_section]
- # Override default name and use "myfoo" instead.
- engine_id = myfoo
- The command B<dynamic_path> loads and adds an ENGINE from the given path. It
- is equivalent to sending the ctrls B<SO_PATH> with the path argument followed
- by B<LIST_ADD> with value 2 and B<LOAD> to the dynamic ENGINE. If this is
- not the required behaviour then alternative ctrls can be sent directly
- to the dynamic ENGINE using ctrl commands.
- The command B<init> determines whether to initialize the ENGINE. If the value
- is B<0> the ENGINE will not be initialized, if B<1> and attempt it made to
- initialized the ENGINE immediately. If the B<init> command is not present
- then an attempt will be made to initialize the ENGINE after all commands in
- its section have been processed.
- The command B<default_algorithms> sets the default algorithms an ENGINE will
- supply using the functions B<ENGINE_set_default_string()>
- If the name matches none of the above command names it is assumed to be a
- ctrl command which is sent to the ENGINE. The value of the command is the
- argument to the ctrl command. If the value is the string B<EMPTY> then no
- value is sent to the command.
- For example:
- [engine_section]
- # Configure ENGINE named "foo"
- foo = foo_section
- [foo_section]
- # Load engine from DSO
- dynamic_path = /some/path/fooengine.so
- # A foo specific ctrl.
- some_ctrl = some_value
- # Another ctrl that doesn't take a value.
- other_ctrl = EMPTY
- # Supply all default algorithms
- default_algorithms = ALL
- =head2 EVP CONFIGURATION MODULE
- This modules has the name B<alg_section> which points to a section containing
- algorithm commands.
- Currently the only algorithm command supported is B<fips_mode> whose
- value should be a boolean string such as B<on> or B<off>. If the value is
- B<on> this attempt to enter FIPS mode. If the call fails or the library is
- not FIPS capable then an error occurs.
- For example:
- alg_section = evp_settings
- [evp_settings]
- fips_mode = on
- =head1 NOTES
- If a configuration file attempts to expand a variable that doesn't exist
- then an error is flagged and the file will not load. This can happen
- if an attempt is made to expand an environment variable that doesn't
- exist. For example in a previous version of OpenSSL the default OpenSSL
- master configuration file used the value of B<HOME> which may not be
- defined on non Unix systems and would cause an error.
- This can be worked around by including a B<default> section to provide
- a default value: then if the environment lookup fails the default value
- will be used instead. For this to work properly the default value must
- be defined earlier in the configuration file than the expansion. See
- the B<EXAMPLES> section for an example of how to do this.
- If the same variable exists in the same section then all but the last
- value will be silently ignored. In certain circumstances such as with
- DNs the same field may occur multiple times. This is usually worked
- around by ignoring any characters before an initial B<.> e.g.
- 1.OU="My first OU"
- 2.OU="My Second OU"
- =head1 EXAMPLES
- Here is a sample configuration file using some of the features
- mentioned above.
- # This is the default section.
-
- HOME=/temp
- RANDFILE= ${ENV::HOME}/.rnd
- configdir=$ENV::HOME/config
- [ section_one ]
- # We are now in section one.
- # Quotes permit leading and trailing whitespace
- any = " any variable name "
- other = A string that can \
- cover several lines \
- by including \\ characters
- message = Hello World\n
- [ section_two ]
- greeting = $section_one::message
- This next example shows how to expand environment variables safely.
- Suppose you want a variable called B<tmpfile> to refer to a
- temporary filename. The directory it is placed in can determined by
- the the B<TEMP> or B<TMP> environment variables but they may not be
- set to any value at all. If you just include the environment variable
- names and the variable doesn't exist then this will cause an error when
- an attempt is made to load the configuration file. By making use of the
- default section both values can be looked up with B<TEMP> taking
- priority and B</tmp> used if neither is defined:
- TMP=/tmp
- # The above value is used if TMP isn't in the environment
- TEMP=$ENV::TMP
- # The above value is used if TEMP isn't in the environment
- tmpfile=${ENV::TEMP}/tmp.filename
- Simple OpenSSL library configuration example to enter FIPS mode:
- # Default appname: should match "appname" parameter (if any)
- # supplied to CONF_modules_load_file et al.
- openssl_conf = openssl_conf_section
- [openssl_conf_section]
- # Configuration module list
- alg_section = evp_sect
- [evp_sect]
- # Set to "yes" to enter FIPS mode if supported
- fips_mode = yes
- Note: in the above example you will get an error in non FIPS capable versions
- of OpenSSL.
- More complex OpenSSL library configuration. Add OID and don't enter FIPS mode:
- # Default appname: should match "appname" parameter (if any)
- # supplied to CONF_modules_load_file et al.
- openssl_conf = openssl_conf_section
- [openssl_conf_section]
- # Configuration module list
- alg_section = evp_sect
- oid_section = new_oids
- [evp_sect]
- # This will have no effect as FIPS mode is off by default.
- # Set to "yes" to enter FIPS mode, if supported
- fips_mode = no
- [new_oids]
- # New OID, just short name
- newoid1 = 1.2.3.4.1
- # New OID shortname and long name
- newoid2 = New OID 2 long name, 1.2.3.4.2
- The above examples can be used with with any application supporting library
- configuration if "openssl_conf" is modified to match the appropriate "appname".
- For example if the second sample file above is saved to "example.cnf" then
- the command line:
- OPENSSL_CONF=example.cnf openssl asn1parse -genstr OID:1.2.3.4.1
- will output:
- 0:d=0 hl=2 l= 4 prim: OBJECT :newoid1
- showing that the OID "newoid1" has been added as "1.2.3.4.1".
- =head1 BUGS
- Currently there is no way to include characters using the octal B<\nnn>
- form. Strings are all null terminated so nulls cannot form part of
- the value.
- The escaping isn't quite right: if you want to use sequences like B<\n>
- you can't use any quote escaping on the same line.
- Files are loaded in a single pass. This means that an variable expansion
- will only work if the variables referenced are defined earlier in the
- file.
- =head1 SEE ALSO
- L<x509(1)|x509(1)>, L<req(1)|req(1)>, L<ca(1)|ca(1)>
- =cut
|