Когда / зачем вам нужно использовать CACert в TLS-согласовании? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь понять параметры, используемые для настройки TLS (специально для rabbitmq, но мой вопрос может быть более общим).

Есть 4 основных объекта для рассмотрения:

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

  • Cert - сертификат, содержащий открытый ключ одноранговых узлов. Он также содержитнекоторые идентифицирующие детали, такие как имя хоста, организация и т. д., многие из которых являются необязательными.Сертификат может быть неподписанным (редко, если вообще когда-либо?), Самоподписанным или подписанным центром сертификации.

  • CACert - сертификат CA, которому доверяет одноранговый узел, который может использоваться длярасшифровать и проверить подпись подписанного сертификата.

  • CA-ключ - закрытый ключ CA, который использовался для подписания сертификата.

Они сопоставляются с параметрами конфигурации, в том числе:

  • enablePeerVerification - если true, то узел пытается проверить, является ли сервер тем, кем он говорит, проверяя сертификат, действительно подписанный ЦС (и также по цепочке доверия, пока он не достигнет ЦС, которому он доверяет, потому что у него есть сертификат в его локальном хранилище доверенных сертификатов).Это плохая идея, чтобы установить это в ложь, так как кто-то может выдать себя за сверстника.(на ходу этот параметр называется InsecureSkipVerify в качестве предупреждения). Если сертификат является самоподписанным, проверка на одноранговом узле невозможна.Эта опция позволяет вам использовать самоподписанный сертификат партнера на свой страх и риск (например, во время разработки).

  • Ключ - закрытый ключ, используемый для расшифровки

  • Cert - используется для шифрования (и подтверждения связи)

  • CACert - сертификат центра сертификации, подписавшего сертификат "Cert"

Почему существуют параметры конфигурации для CACert?

Если сертификат подписан центром сертификации, то он уже содержит достаточно информации для определения местоположения центра сертификации (например, имя домена).Для чего нужен CACert и если или когда он отправляется во время согласования TLS?Это просто удобство, чтобы спешить в СА напрямую?Вам все равно придется это сделать, если CACert не соответствует или не указывает на него в вашем хранилище доверенных сертификатов.

Настройки, о которых я говорю, это "cacert" в rabbitmq.config для сервера и amqp_ssl_socket_set_cacert () в C API (rabbitmq-c).

Я хотел бы проверить правильность моего понимания (https://xkcd.com/386/)

1 Ответ

0 голосов
/ 12 октября 2018

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

Рукопожатие TLS:

  • сервер, к которому вы подключаетесь, отправляет вам свой сертификат и, необязательно, список промежуточных сертификатов вплоть до корневого (ЦС), последний из которых также является необязательным и часто не отправляется, так как предполагается, что клиент уже имеет его вего доверенное хранилище
  • , если сервер запрашивает сертификат клиента, он отправляет список CA, которые он примет для сертификата клиента (это подсказка, чтобы помочь клиенту выбрать правильный сертификат для отправки)
  • поэтому, если это необходимо, клиент отправляет свой сертификат и, как в первом пункте, потенциальный список промежуточных сертификатов вплоть до некоторого корня.

В зависимости от клиента у вас может быть несколько конфигурацийitems: - список сертификатов для отправки как промежуточный (либо как путь к некоторому каталогуили один файл со всеми ними в нем) вместе со своим собственным клиентским сертификатом - список сертификатов, которые вы используете (снова каталог или файл) как полностью доверенные для проверки сертификата сервера.

Часто этидва значения - только одно.

Теперь:

Если сертификат подписан центром сертификации, то он уже содержит достаточно информации для определения местоположения центра сертификации (например, имени домена).

Не уверен, что понимаю вас, но в целом нет.Во-первых, сертификат не обязательно / только для доменного имени, он может быть для других вещей.Затем сертификат обычно подписывается посредником, а не непосредственно СА.Так что я не уверен, как вы хотите найти CA?

...