OpenSSL Config
Заметки по man config
Description
Конфигурационный файл разделен на несколько секций
Каждая секция начинается со строки [ section_name ]
и заканчивается началом новой секции или концом файла
Имя секции может содержать буквы, цифры и подчеркивание
Первая секция обычно дефолтная и начинается от начала файла до первой именованой секции
Окружение мапится на секцию ENV
Комменты пишутся через решетку
Можно делать импорты через .include filename
Дефолтный конфиг /usr/lib/ssl/openssl.cnf
В инклудах рекомендуется использовать абсолютные пути, потому что относительные пути будут меняться в зависимости от приложения и в итоге не будут работать как ожидается
Каждая секция содержит некоторое количество пар name=value
name содержит цифробуквы и может содержать знаки: .
, ,
, ;
, _
Поле value умеет раскрывать переменные если они указаны через доллар $var
и ${var}
Переменная заменится на значение ключа из текущей секции
Можно также подставлять значения из других секций, это делается так $section::name
или ${section::name}
Через $ENV::var
можно подставлять переменные окружения
Также можно использовать ENV::name
для назначения значений переменным окружения, но это будет работать только если программа использует библиотеку CONF для поиска переменных окружения вместо вызова getenv
value не должно превышать 64к в длину после раскрытия всех переменных, иначе все сломается
Есть возможность пропускать некоторые символы используя какие-то кавычки или \
Например бэкслеш в конце строки позволяет сделать value многострочным
Также можно использовать \n
, \r
, \b
, \t
Описанные выше правила экранирования и разворачивания применимы и к .include
OpenSSL Library Configuration
Разные приложения могут ориентироваться на конфиги openssl
Например cli команды OpenSSL смотрят в мастер конфиг (дефолтный) (если не указана опция смотреть в какой-то другой)
В конфиге можно задать парметры для библиотеки
В дефолтной секции должно содержаться имя openssl_conf
в значении которого указывается имя главной конф. секции
Некоторые приложения могут ориентироваться на какое-то другое имя вместо openssl_conf
Ключ отображает имя конфигурируемого модуля, а возможное значение зависит от этого модуля
ASN1 Object Configuration Module
Этот модуль имеет имя oid_section
Это имя указывает на секцию в которой содержатся пары oid'ов
Например
openssl_conf = openssl_init
[openssl_init]
oid_section = new_oids
[new_oids]
some_new_oid = 1.2.3.4
some_other_oid = 1.2.3.5
shortName = some object long name, 1.2.3.6
Engine Configuration Module
Этот модуль имеет имя engines
которое ссылается на секцию в которой содержится конфигурационная информация движков
Эта секция представляет из себя таблицу из имен движков и секций описывающих эти движки
openssl_conf = openssl_init
[openssl_init]
engines = engine_section
[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 ...
ENGINE specific commands:
- engine_id - позволяет задать (переопределить) engine-name
- dynamic_path - подгружает engine из указанного пути
- init - нужно ли инициализировать этот engine
- default_algorithms - определяет дефолтные алгоритмы
[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
EVP Configuration Module
Этот модуль имеет имя alg_section
и указывает на секцию с командами алгоритмов
На текущий момент имеется только одна команда: fips_mode
(принимает on\off)
Если fips включен, но библиотека не поддерживает fips, то все свалится с ошибкой
SSL Configuration Module
Этот модуль имеет имя ssl_conf
и указывает на секцию с ssl конфигурацией
Каждая строка в этой секции содержит имя конфигурации и секцию содержащую ее
ssl_conf = ssl_sect
[ssl_sect]
server = server_section
[server_section]
RSA.Certificate = server-rsa.pem
ECDSA.Certificate = server-ecdsa.pem
Ciphers = ALL:!RC4
Дефолтная секция
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1.2
Notes
Если в конфиге указано развернуть переменную окружения которой не существует, то все свалится с ошибкой
Например предыдущие версии openssl использовали в дефолтном конфиге перенную HOME, а в non-Unix системах ее нет
Это можно обойти указывая в дефолтной секции дефолтные значения
И когда поиск в окружении сфейлится, будет использовано дефолтное значение
Но нужно чтобы место определения дефолтного значения в конфиге было раньше чем место вызова переменной
Пример безопасного использования переменной окружения
TMP=/tmp
TEMP=$ENV::TMP
tmpfile=${ENV::TEMP}/tmp.filename
Если в рамках одной секции несколько раз описывается одна и та же переменная, то засчитается только последнее описание
No Comments