【发布时间】:2018-12-19 11:50:23
【问题描述】:
在 linux 环境中运行我的 dotnet-core 应用程序时,我遇到了 dotnet SslStream 的一些奇怪行为。
代码如下:
TcpClient cl = new TcpClient();
cl.Connect("52.209.63.190", 443);
var ssl = new SslStream(cl.GetStream());
ssl.AuthenticateAsClient("api.bitfinex.com");
在 windows 上运行时,验证结果是成功的。 但是相同的代码以 auth 错误(RemoteCertificateNameMismatch)结尾,当 linux 时。
dotnet --info:
.NET 命令行工具 (2.1.4)
产品信息: 版本:2.1.4 提交 SHA-1 哈希:5e8add2190
运行时环境: 操作系统名称:fedora 操作系统版本:27 操作系统平台:Linux RID:linux-x64 基本路径:/usr/share/dotnet/sdk/2.1.4/
Microsoft .NET Core 共享框架主机
版本:2.0.5 构建:17373eb129b3b05aa18ece963f8795d65ef8ea54
为什么 linux 上的代码行为如此不同? 如何处理并通过 ssl 身份验证?
提前谢谢你
【问题讨论】:
-
你能不能这样测试一下 cl.Connect("api.bitfinex.com", 443);
-
它可以工作,但 dns 是用我不想连接的不同 ip 解析的。
-
不知道你是怎么得到api.bitfinex.com的IP地址的,但是api.bitfinex.com在cloudflare下,那个域是用cloudflare解析的。
-
这与 cloudflare 或特定主机和 ip 无关,它与不同平台上的应用程序行为有关
-
.NET Core 在 Windows 上使用 Win32 API 来实现 SSL,而在 Linux 上它目前使用 openssl。因此,行为可能略有不同。没什么好惊讶的。