Ошибка: «Ошибка квитирования TLS: tls: набор шифров не поддерживается ни клиентом, ни сервером», когда NATS размещен на Windows Server 2012 R2 - PullRequest
1 голос
/ 09 октября 2019

Я использую сервер обмена сообщениями NATS на Windows Server 2012 R2. Я предоставил конфигурацию TLS следующим образом:

authorization {
  user: administrator
  password: $2a$10$9cVa4WHttwTQDpOnpGP1HuWi44WXTrYvrUO6uWkNlpLPeBFFOnpr6
  timeout:  500
}

tls {
  cert_file:  "C:/NATS/CertFile.pem"
  key_file:   "C:/NATS/KeyFile.pem"
  timeout:    2
}

Я использую BCrypt для хранения пароля и самозаверяющего сертификата X509. Когда я запускаю сервер в Windows Server 2016, клиенты успешно подключаются, используя безопасную связь. Но когда я использую сервер NATS в Windows Server 2012 R2, это дает мне исключение в моем клиентском приложении.

Не могли бы вы мне помочь?

Большое спасибо,

Adeel.

Я попытался выполнить обновление до NATS.Client до v0.9.0.

При использовании API-интерфейса NATS.Client я установил следующее свойство в C #:

NATSConnectionSetting connectionSetting = NATSConnectionSetting.GetDefaultNATSConnectionSetting();
connectionSetting.UseTLS = true;

Исключение, которое я получаю в журналах клиентских приложений:

NATS.Client.NATSConnectionException: TLS Authentication error ---> System.AggregateException: One or more errors occurred. ---> System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---> System.ComponentModel.Win32Exception: The message received was unexpected or badly formatted

В журналах сервера NATS я вижу:

TLS handshake error: tls: no cipher suite supported by both client and server

1 Ответ

0 голосов
/ 16 октября 2019

Некоторые системы Windows могут ограничивать наборы шифров, которые они поддерживают. По умолчанию NATS использует только самые безопасные комплекты шифров, но допускает указание других в конфигурации.

Ниже приведен раздел конфигурации TLS, в котором указываются комплекты шифров, которые должны работать в большинстве систем Windows:

tls {
  cert_file:  "C:/NATS/CertFile.pem"
  key_file:   "C:/NATS/KeyFile.pem"

  cipher_suites: [
    "TLS_RSA_WITH_RC4_128_SHA",
    "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
    "TLS_RSA_WITH_AES_128_CBC_SHA",
    "TLS_RSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
    "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
    "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
    "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
    "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
  ]
}

Другая ссылка может быть найдена в конфигурации тестирования, здесь . Я предлагаю сузить наборы шифров, включив в них только самые безопасные наборы, которые работают в вашей среде, и избегать RSA, если вы можете. Чтобы получить список всех доступных наборов шифров, запустите nats-server -help_tls. Надеюсь, это поможет!

...