2. Процесс может считать сообщение от ядра или иного процесса через сокет управления ключами. Это позволяет ядру запросить демона-ключника о добавлении соглашения о безопасности для нового сеанса TCP, который, согласно политике, подлежит определенной защите.
3. Процесс может отправить ядру запрос дампа, и ядро в ответ передаст ему дамп текущей базы SADB. Это отладочная функция, которая может быть доступна не во всех системах.
Все сообщения в сокете управления ключами должны иметь одинаковые заголовки, соответствующие листингу 19.1 [1] Все исходные коды программ, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com.
. Сообщение может сопровождаться различными расширениями в зависимости от наличия дополнительной информации или необходимости ее предоставления. Все нужные структуры определяются в заголовочном файле . Все сообщения и расширения подвергаются 64-разрядному выравниванию и дополняются до длин, кратных 64 разрядам. Все поля длины оперируют 64-разрядными единицами, то есть значение длины 1 означает реальную длину 8 байт. Расширение, не содержащее достаточного количества данных, дополняется произвольным образом до длины, кратной 64 разрядам.
Значение sadb_msg_type
задает одну из десяти команд управления ключами. Типы сообщений перечислены в табл. 19.1. За заголовком sadb_msg
может следовать произвольное количество расширений. Большинство сообщений имеют обязательные и необязательные расширения, которые будут описаны в соответствующих разделах. Шестнадцать типов расширений с названиями структур, их определяющих, перечислены в табл. 19.3.
Листинг 19.1. Заголовок сообщения управления ключами
struct sadb_msg {
u_int8_t sadb_msg_version; /* PF_KEY_V2 */
u_int8_t sadb_msg_type; /* см. табл. 19.1 */
u_int8_t sadb_msg_errno; /* код ошибки */
u_int8_t sadb_msg_satype; /* см. табл. 19.2 */
u_int16_t sadb_msg_len; /* длина заголовка и расширений / 8 */
u_int16_t sadb_msg_reserved; /* нуль при передаче, игнорируется
при получении */
u_int32_t sadb_msg_seq; /* порядковый номер */
u_int32_t sadb_msg_pid; /* идентификатор процесса отправителя
или получателя */
};
Таблица 19.1. Типы сообщений
Тип сообщения |
К ядру |
От ядра |
Описание |
SADB_ACQUIRE |
• |
• |
Запрос на создание записи в SADB |
SADB_ADD |
• |
• |
Добавление записи в полную базу безопасности |
SADB_DELETE |
• |
• |
Удаление записи |
SADB_DUMP |
• |
• |
Дамп SADB (используется для отладки) |
SADB_EXPIRE |
|
• |
Уведомление об истечении срока действия записи |
SADB_FLUSH |
• |
• |
Очистка всей базы безопасности |
SADB_GET |
• |
• |
Получение записи |
SADB_GETSPI |
• |
• |
Выделение SPI для создания записи SADB |
SADB_REGISTER |
|
• |
Регистрация для ответа на SADB_ACQUIRE |
SADB_UPDATE |
• |
• |
Обновление записи в частичной SADB |
Таблица 19.2. Типы соглашений о безопасности
Тип соглашения |
Описание |
SADB_SATYPE_AH |
Аутентифицирующий заголовок IPSec |
SADB_SATYPE_ESP |
ESP IPSec |
SADB_SATYPE_MIP |
Идентификация мобильных пользователей (Mobile IP) |
SADB_SATYPE_OSPFV2 |
Аутентификация OSPFv2 |
SADB_SATYPE_RIPV2 |
Аутентификация RIPv2 |
SADB_SATYPE_RSVP |
Аутентификация RSVP |
SADB_SATYPE_UNSPECIFIED |
He определен |
Таблица 19.3. Типы расширений PF_KEY
Тип заголовка расширения |
Описание |
Структура |
SADB_EXT_ADDRESS_DST |
Адрес получателя SA |
sadb_address |
SADB_EXT_ADDRESS_PROXY |
Адрес прокси-сервера SA |
sadb_address |
SADB_EXT_ADDRESS_SRC |
Адрес отправителя SA |
sadb_address |
SADB_EXT_IDENTITY_DST |
Личность получателя |
sadb_ident |
SADB_EXT_IDENTITY_SRC |
Личность отправителя |
sadb_ident |
SADB_EXT_KEY_AUTH |
Ключ аутентификации |
sadb_key |
SADB_EXT_KEY_ENCRYPT |
Ключ шифрования |
sadb_key |
SADB_EXT_LIFETIME_CURRENT |
Текущее время жизни SA |
sadb_lifetime |
SADB_EXT_LIFETIME_HARD |
Жесткое ограничение на время жизни SA |
sadb_lifetime |
SADB_EXT_LIFETIME_SOFT |
Гибкое ограничение на время жизни SA |
sadb_lifetime |
SADB_EXT_PROPOSAL |
Предлагаемая ситуация |
sadb_prop |
SADB_EXT_SA |
Соглашение о безопасности |
sadb_sa |
SADB_EXT_SENSITIVITY |
Важность SA |
sadb_sens |
SADB_EXT_SPIRANGE |
Диапазон допустимых значений SPI |
sadb_spirange |
SADB_EXT_SUPPORTED_AUTH |
Поддерживаемые алгоритмы аутентификации |
sadb_supported |
SADB_EXT_SUPPORTED_ENCRYPT |
Поддерживаемые алгоритмы шифрования |
sadb_supported |
Рассмотрим несколько примеров сообщений и расширений, используемых в типичных операциях с сокетами управления ключами.
Читать дальше
Конец ознакомительного отрывка
Купить книгу