问题标签 [sslstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
18569 浏览

c# - 如何在 C# 中识别我的服务器名称以供客户端进行服务器身份验证

我最近一直在尝试用 C# 制作 SSL 加密的服务器/客户端。

我在 MSDN 上遵循了本教程,但是,它需要使用makecert.exe为服务器和客户端使用创建一个证书,所以我找到了一个示例,它创建了很好的证书:

makecert -sr LocalMachine -ss My -n "CN=Test" -sky exchange -sk 123456 c:/Test.cer

但现在问题是服务器启动并等待客户端,当客户端连接时,它使用机器名称,据我所知,在这种情况下是我的 IP:

127.0.0.1

,然后它要求服务器名称必须与证书 ( Test.cer )上的服务器名称匹配。我尝试了多种组合(例如“Test”“LocalMachine”,“127.0.0.1”,但似乎无法让给定服务器名称的客户端匹配,从而允许连接。我得到的错误是:

证书错误:RemoteCertificateNameMismatch, RemoteCertificateChainErrors 异常:根据验证程序,远程证书无效

这是我使用的代码,它与 MSDN 示例的不同之处仅在于我在应用程序中为服务器分配了证书路径以及客户端的机器名称和服务器名称:

SslTcpServer.cs

SslTcpClient.cs

编辑:

服务器接受客户端连接和所有内容,但在等待客户端发送消息时超时。(由于证书中的服务器名称与我在客户端提供的名称不同,客户端不会向服务器进行身份验证)这就是我的想法,只是为了澄清

更新:

根据答案,我已将证书制造商更改为:

makecert -sr LocalMachine -ss My -n "CN=localhost" -sky exchange -sk 123456 c:/Test.cer 在我的客户端我有:

现在我得到了例外:

RemoteCertificateChainErrors 异常:根据验证程序,远程证书无效

这是发生在这里:

0 投票
3 回答
6703 浏览

c# - SslStream.Read() 的奇怪行为

使用 SslStream 处理一些套接字层。参考

使用参考,我实现了一个简单的客户端。尴尬的部分是当您运行应用程序时,服务器似乎没有回复客户端。

进入调试屏幕并设置一些断点,我意识到正是这个函数处于无限循环中。

进一步调查指出了真正的罪犯:

好像,SslStream.Read()是回不去了。检查byte[] bufferin debug 屏幕显示响应已写入到buffertill crlf。该功能已经完成了它的工作,但它仍然没有成功返回?!

这可能是什么原因?我应该采取哪些步骤来忽略这个问题?

另外,对于持怀疑态度的人:我曾经openssl查看服务器是否正常运行,并且服务器端的一切都很好。

注意:我已经知道该SslStream.ReadTimeout属性。虽然它通过引发它来完成这项工作,exception但这并不是每个场景的正确答案,特别是当服务器响应大量数据流时,只能使用 while 循环和缓冲区有效读取。

0 投票
4 回答
3550 浏览

c# - 通过 TCP/.NET SSLStream 发送文件很慢/不起作用

我正在编写一个与 SSL(over SSLStream)一起使用的服务器/客户端应用程序,它必须做很多事情(不仅仅是文件接收/发送)。目前,它是这样工作的:只有一个连接。我总是使用从客户端/服务器发送数据SSLStream.WriteLine()并使用接收它SSLStream.ReadLine(),因为我可以通过一个连接发送所有信息,并且我可以从所有线程发送而不会破坏数据。

现在我想实现文件发送和接收。与我的客户端/服务器应用程序中的其他内容一样,每条消息都有一个前缀(如 cl_files 或 sth)和一个 base64 编码的内容部分(前缀和内容由 | 分隔)。我实现了这样的文件共享:上传者向接收者发送一条关于文件总大小的消息,然后上传者通过前缀发送文件的 base64 编码部分r

我的问题是文件共享真的很慢。我从 localhost 到 localhost 的速度约为 20KB/s。我还有另一个问题。如果我增加文件的 base64 编码部分的大小(这使得文件共享更快),前缀r不会再发送到接收器(因此无法识别数据)。

我怎样才能让它更快?

任何帮助将不胜感激。

我的(可能是坏的)代码是给客户的:

对于服务器:

0 投票
0 回答
2981 浏览

c# - 异步 SSL 套接字

最近我正在创建一个异步 ssl 套接字类。我完成了它,它成功地通过了客户端的身份验证,但它没有正确接收到客户端发送的消息。

这是我的代码:

所以在上面的代码中,当我调用BeginRead并尝试使用 Console.WriteLine(Encoding.ASCII.GetString(arg1));时,我只得到很多空行[注意我使用 MSDN 示例中的 ssl 客户端来测试我的服务器]

我真的很想知道为什么它没有正确接收到消息!

0 投票
1 回答
358 浏览

c# - 异步 SslStream 错误

我创建了一个异步 SslStream 侦听器,但它没有正确接收来自客户端的消息

侦听器代码

joran i don't want the code to be here anymore

这是我尝试发送到服务器“Hello From Client”的消息

这是我的服务器控制台如何显示它

谁能告诉我为什么我没有正确收到消息?,这真的很奇怪,我无法解决,请我帮忙

并且\或者我可以使用 StreamReader 接收消息吗?它是非阻塞的,所以代码将保持异步吗?

0 投票
2 回答
1436 浏览

c# - 检测 SslStream 套接字断开连接

我在包装套接字的 NetworkStream 之上使用 SslStream,在这种情况下如何检测套接字断开连接。

换句话说,我想检测远程客户端是否关闭了连接。

0 投票
2 回答
8811 浏览

c# - 如何验证自签名证书

我会清楚地向您提供我的问题,以便您回答我

我有一个使用 SslStream 保护的客户端-服务器(套接字)连接,据我所知,使用 ssl 可以确保我的客户端只会连接到我的服务器

为此,我必须向我的客户端添加一个函数来验证服务器认证并确保服务器是真实的(我的服务器)

但我真的不明白如何验证我的自签名证书并希望得到您的帮助

问候,并提前致谢

0 投票
3 回答
9172 浏览

c# - SslStream.WriteAsync“当另一个写入操作挂起时,无法调用 BeginWrite 方法”

将数据异步写入客户端时如何防止此问题

我的密码

0 投票
1 回答
1595 浏览

c# - sslstream“当另一个写操作挂起时,无法调用 BeginWrite 方法”

我在让 sslstream 相互发送多条消息时遇到了一些麻烦。

我打电话给客户发送数据的方式

我收到的错误消息是:

我已经尝试了不同的解决方案来让它工作,但没有一个能让它工作。

基函数使用 await,并且该函数被调用

基函数返回一个任务,并在客户端方法中使用 await

我仍然收到同样的错误,有人知道让它工作吗?

0 投票
2 回答
1179 浏览

sslstream - c# 高速使用 SslStream.WriteAsync

我在使用 SslStream.WriteAsync 时遇到了一个恼人的问题

这是代码

当以极高的速度写入数据时,它告诉我

The beginwrite method cannot be called when another write operation is pending

[注意]:我的意思是高速这样的东西