Может ли кто-нибудь прокомментировать, проверить, покритиковать или иным образом заполнить дыры в дизайне безопасности микросервисов, который я рассматриваю?
Допустим, у меня есть три микросервиса, каждый из которых общается с двумя другими через конечные точки REST. Каждый микросервис содержит хранилище ключей. В этом хранилище ключей содержится пара закрытый/открытый ключ микросервиса, подписанная доверенным центром сертификации. Также в этом хранилище ключей находятся сертификаты открытых ключей двух других микросервисов, экспортированные из пары подписанных/доверенных ключей исходного микросервиса.
Эта реализация работает, но что-то в ней не совсем пахнет.
А именно, каждый раз, когда я ввожу новую микрослужбу, я должен добавить а) сертификат открытого ключа каждой существующей микрослужбы в его хранилище ключей и б) сертификат открытого ключа новой микрослужбы в каждую другую микрослужбу (предполагается, что новая микрослужба должна взаимодействовать в двух направлениях, и безопасно, с каждым существующим микросервисом).
Теперь повторите приведенный выше шаблон для второй пары ключей, которая используется для подписи/проверки токенов аутентификации, предоставленных в вызовах REST.
Мне интересно, если вместо вышеперечисленного а) целесообразно и б) безопасно использовать один доверенный сертификат открытого ключа между всеми микросервисами? Что-то совсем другое?
Пожалуйста, будьте вежливы. Я ни в коем случае не специалист в этой области.
РЕДАКТИРОВАТЬ: после прочтения ответов/комментариев к моему исходному сообщению мне пришло в голову, что я упустил детали, которые могли бы сделать проблему более ясной, и, следовательно, комментаторы могли лучше решить ее:
Рассматриваемые микросервисы существуют в частной интрасети и будут доступны только клиентам (браузерам или другим микросервисам) в этой интрасети.
На самом деле существует доверенный ЦС, а именно компания, которой принадлежит эта интрасеть, и именно этот ЦС подписывает пары ключей микросервисов.
Решение этой проблемы, кажется, подразумевается в первом комментарии @Andreas, в котором он написал: «Пока ЦС, выпустивший их, является доверенным, им тоже будут доверять».
Пока каждый новый микросервис развертывается с а) собственными парами ключей, подписанными ЦС (один для подписи, а другой для шифрования) и б) сертификатом ЦС, я могу развертывать новые микросервисы с разумной уверенностью, что они будут безопасно взаимодействовать с все остальные микросервисы (разумные из-за других потенциальных уязвимостей, о которых я даже не знаю).
Каким-то образом мне пришло в голову, что мне придется создать новый сертификат для каждой пары ключей микросервиса и включить их в хранилища ключей других микросервисов (повторить для каждого нового микросервиса). Вместо этого все, что мне нужно, — это один сертификат центра сертификации, который подписывает пары ключей, в хранилище ключей каждого микросервиса.