Error: "TLS handshake error: tls: no cipher suite supported by both client and server" when NATS hosted on Windows Server 2012 R2
Error: "TLS handshake error: tls: no cipher suite supported by both client and server" when NATS hosted on Windows Server 2012 R2
我在 Windows Server 2012 R2 上使用 NATS 消息服务器。我提供的 TLS 配置如下:
authorization {
user: administrator
password: acVa4WHttwTQDpOnpGP1HuWi44WXTrYvrUO6uWkNlpLPeBFFOnpr6
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
一些 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
。希望这对您有所帮助!
我在 Windows Server 2012 R2 上使用 NATS 消息服务器。我提供的 TLS 配置如下:
authorization {
user: administrator
password: acVa4WHttwTQDpOnpGP1HuWi44WXTrYvrUO6uWkNlpLPeBFFOnpr6
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
一些 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
。希望这对您有所帮助!