TLS, что именно означает 'rejectUnauthorized' для меня?

Итак, у меня была проблема ранее сегодня, когда мой клиент, написанный на node, был недоволен тем, что сервер, к которому я подключался, использовал самозаверяющие сертификаты. Итак, я пошел и добавил опцию rejectUnauthorized: false к моему tls.connect команда, как любой невольный разработчик сделал бы.

Мой вопрос сейчас, что, черт возьми, это значит для меня? Является ли мое TLS-соединение обычным TCP-соединением, которое также может быть TLS-соединением? Писать это как поток TLS совершенно бесполезно?

Что еще более важно, этот сервер, вы знаете тот, с самозаверяющими сертификатами? Мой поток между здесь и там зашифрован?

1 ответ

Решение

Как описано в документации:

  • rejectUnauthorized: Если trueсертификат сервера сверяется со списком предоставленных ЦС. error событие выдается, если проверка не пройдена; err.code содержит код ошибки OpenSSL. По умолчанию: true,

Поскольку вы используете самозаверяющие сертификаты, очевидно, что не будет совпадения со встроенными центрами сертификации, поэтому по умолчанию соединение будет отклонено, поскольку он не может проверить, является ли сервер тем, кем они себя называют.

Установив rejectUnauthorized: false, вы говорите: "Мне все равно, если я не смогу подтвердить личность сервера". Очевидно, что это не очень хорошее решение, так как оно делает вас уязвимым для атак MITM.

Лучшее решение для самозаверяющих сертификатов - установить соответствующие ca значение для вашего собственного CA при подключении на стороне клиента. Кроме того, убедитесь, что ваш host значение соответствует общему имени самозаверяющего сертификата сервера. Например:

var socket = tls.connect({
  host: 'MyTLSServer',
  port: 1337,
  ca: [ fs.readFileSync('CA.pem') ],
}, function() {
  // Connected!
});

// ...

Неважно, если вы используете rejectUnauthorized: false или установить ca, соединение зашифровано.

Другие вопросы по тегам