1

我在 Windows Server 2012 R2 上使用 NATS 消息服务器。我提供的 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 上运行服务器时,客户端在使用安全通信的同时成功连接。但是当我在 Windows Server 2012 R2 上使用 NATS 服务器时,它在我的客户端应用程序中给了我一个异常。

你能帮帮我吗?

非常感谢,

阿德尔。

我尝试将 NATS.Client 更新到 v0.9.0。

我在使用 NATS.Client API 时在 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
4

1 回答 1

0

一些 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"
  ]
}

另一个参考可以在测试配置中找到,here。我建议缩小密码套件的范围,只包括在您的环境中工作的最安全的套件,并尽可能避免使用 RSA。要获取所有可用密码套件的列表,请运行nats-server -help_tls. 希望这可以帮助!

于 2019-10-16T16:03:02.173 回答