Info
Content

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
Back to top