Лучшая практика аутентификации 2 машин в среде M2M

У меня есть несколько крошечных встроенных Linux-серверов на Beaglebone Black (может быть, RaspberryPi, не имеет значения), которые должны обмениваться информацией с основным сервером (размещенным в Интернете).

В идеале каждая система разговаривает друг с другом с помощью простых команд RESTful - например, основной сервер отправляет новые конфигурации встроенным серверам - и серверы отправляют обратно данные. Команды могут также выдаваться пользователем с основного сервера или непосредственно на встроенные серверы.

Что это был бы самый "стандартный" способ аутентификации каждого сервера друг против друга? Я думаю, OAuth, полагая, что каждая машина имеет свой собственный пользователь OAuth, но я не убедитесь, что это правильный шаблон.

Ответ 1

Что это был бы самый "стандартный" способ аутентификации каждого сервера друг против друга? Я думаю OAuth, полагая, что каждая машина имеет свой собственный пользователь OAuth, но я не уверен, что это правильный шаблон.

Аутентификационные машины не отличаются от аутентификации пользователей. Они оба являются принципами безопасности. Фактически, Microsoft сделала машины первоклассным гражданином в Windows 2000. Они могут быть директором на защищаемых объектах, таких как файлы и папки, так же, как обычные пользователи могут.

(Существует несколько способов размахивания рук, поскольку серверы обычно страдают от проблемы с хранилищем неподписанного ключа, описанной Гутманом в его Engineering Security).

Я бы использовал частный PKI (т.е. был моим собственным центром сертификации) и использовал взаимную аутентификацию на основе пар общих/частных ключей, таких как SSL/TLS. Это добавило преимущества повторного использования большого количества инфраструктуры, поэтому HTTP/HTTPS/REST "просто работает", как всегда.

Если вы используете Private PKI, выдайте сертификаты для машин, которые включают следующее использование ключа:

  • Цифровая подпись (использование ключа)
  • Шифрование ключа (использование ключа)
  • Ключевое соглашение (использование ключа)
  • Аутентификация веб-клиента (использование расширенного ключа)
  • Аутентификация веб-сервера (использование расширенного ключа)

Или запустите приватную PKI и разрешите только связь между серверами с использованием VPN на основе вашей PKI. Вы все еще можете туннелировать запросы RESTful, и никто другой не сможет установить VPN на один из ваших серверов. Вы бесплатно получаете IP-фильтры.

Или используйте протокол стиля Kerberos с центром распространения ключей. Вам понадобится вся инфраструктура Kerberos, включая KDC. Настройте безопасные каналы, основываясь на секретах, предоставляемых KDC.

Или используйте SSH-подобную систему, пары открытого и закрытого ключей и sneaker-net, чтобы скопировать открытые ключи однорангового узла друг к другу. Разрешайте соединения только с компьютерами, у вас есть открытые ключи.

Я, вероятно, не буду использовать OAuth-подобную систему. В OAuth-подобной системе вы будете и Провайдером, и Олицетной партией. В этом случае вы также можете быть CA и повторно использовать все из SSL/TLS.

Ответ 2

Я думаю, вам нужно выполнить взаимную аутентификацию между серверами, использующими SSL для вашего требования.
Я мало знаю о среде M2M, но использование OAuth для аутентификации ваших серверов - OverKill.

https://security.stackexchange.com/info/34897/configure-ssl-mutual-two-way-authentication


Кроме того, шифрование вашего канала связи во время отправки команд сделает его более безопасным с помощью атак