SSHFP-запись

Оригинальное название: SSHFP record

Коротко

Запись DNS с отпечатком ключа SSH-сервера. Позволяет клиенту проверить подлинность сервера при первом подключении, если ответ DNS защищён DNSSEC.

Что такое «SSHFP-запись»

При первом подключении к серверу по SSH клиент показывает отпечаток его ключа и спрашивает, доверять ли ему. Сверять отпечаток по-честному почти никто не станет — обычно просто отвечают yes. Если в этот момент соединение перехвачено, пользователь доверится чужому серверу. SSHFP (RFC 4255) решает задачу иначе: владелец сервера публикует отпечатки в DNS, а клиент сравнивает их с ключом, который прислал сервер.

Смысл в этом есть только при подписанной зоне. Без DNSSEC ответ DNS так же легко подделать, как и сам сервер, поэтому OpenSSH принимает SSHFP как доказательство, лишь когда резолвер подтвердил подлинность ответа.

Как сгенерировать записи

На самом сервере ssh-keygen выводит готовые строки для всех ключей хоста:

ssh-keygen -r host.example.ru
host.example.ru IN SSHFP 4 2 3f1c9a0e7b52d4c8a61e09f5b7d2c3a48e6f0b19d5c7a2e84f3b6091ce7d5a2f
host.example.ru IN SSHFP 1 2 9b0e44d1c7a35f28e6b90d1a4c5f7e3820b6d9f1a7c4e5b3d208f6a9c1e7b4d0

Первое число — алгоритм ключа: 1 — RSA, 3 — ECDSA, 4 — Ed25519 (2 — устаревший DSA). Второе — тип отпечатка: 1 — SHA-1, 2 — SHA-256. Обычно публикуют только SHA-256. Строки добавляют в зону и подписывают её.

Как клиент её проверяет

Проверку включают в настройках клиента:

ssh -o VerifyHostKeyDNS=yes admin@host.example.ru

Если отпечаток совпал и ответ подписан, OpenSSH подключится без вопроса о доверии. Если подпись проверить не удалось, клиент сообщит, что найден отпечаток в DNS, но всё равно спросит подтверждение.

Ограничения

  • Резолвер должен проверять DNSSEC и передавать признак проверенного ответа, а канал до него — быть доверенным.
  • После смены ключей сервера записи нужно обновить, иначе клиенты увидят расхождение.
  • Для управления парком серверов чаще используют SSH-сертификаты: они решают ту же задачу без зависимости от DNS.

Обновлено:

Все термины раздела «Доменные имена и DNS»

Что будем искать? Например,Продвижение