问题标签 [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 投票
2 回答
4228 浏览

c# - .NET SslStream 不工作

我正在尝试使用 .net SslStream 初始化一个 tls 隧道,但在打开流后我总是收到以下错误:

“无法从传输连接读取数据:已建立的连接被主机中的软件中止。”

在我建立 tls 连接并发送第二条消息之后。

过去四天我一直在寻找答案,但网上没有任何有用的信息!

编辑:我正在尝试连接到 talk.google.com

我正在使用来自 MSDN 的代码示例。唯一的区别是我在使用 tls 之前和何时发送数据,我执行以下操作:

编辑:我设法消除了第一个错误(关于我如何处理发送的小错误)现在我总是得到

“无法从传输连接读取数据:已建立的连接被主机中的软件中止。”

编辑2:我没有发送任何空格我重写了消息传递部分,但我仍然遇到同样的问题。

我从

然后收到我有以下

0 投票
1 回答
2258 浏览

c# - 使用 SslStream 时,NetworkStream.DataAvailable 属性不返回正确的结果

我有一个带有持久套接字的应用程序(它在应用程序启动时打开并与应用程序一起关闭)。

服务器使用此套接字来推送一些数据。

由于此连接可以是 HTTP 或 HTTPS,我编写了这段代码来初始化我的对象:

这样,我可以同时处理 HTTP 和 HTTPS 协议。

然后,我有这个循环(在一个线程中),它等待数据在套接字中可用:

这是我的2个问题:

  1. 文档说如果没有数据可用,Read 方法返回 0。但在我的情况下,Read 要么返回一个数字 > 0(当某些数据已被读取时),要么因为超时而引发异常......我在这里错过了什么?Read在什么情况下返回0?

  2. 当我的连接使用 HTTP 协议时,此代码可以正常工作。我收到所有内容,如果消息大于我的缓冲区大小 (CST_STREAM_BUFFER_SIZE),DataAvailable 保持为真,循环读取所有剩余数据。但是当我尝试使用 HTTPS 时,它仅适用于小于我的缓冲区的消息。如果消息更大,则方法 Read 首先读取 CST_STREAM_BUFFER_SIZE 字节,然后 DataAvailable 变为 false,尽管某些字节显然已准备好读取。在这种情况下,接收另一条消息会“解开”剩余数据,因为 DataAvailable 再次变为真。我究竟做错了什么?为什么 DataAvailable 在这两种情况下的行为不同?

任何帮助,将不胜感激。

0 投票
1 回答
817 浏览

ssl - 使用 PFX 文件的 SslStream AuthenticateAsClient

我正在尝试使用 SslStream 连接到服务器。我从服务器所有者那里获得了一个 PFX 文件,并且我已经将它安装在我的客户端上,但我不确定如何从我的代码中访问证书。

具体来说,假设我有以下代码......

serverName 的值是多少?我试过服务器 “MyServer” “CN = MyServer”
的IP地址

这些值似乎都不起作用。我需要做些什么才能访问我机器上的证书存储,还是我不明白 serverName 需要什么?

0 投票
2 回答
4134 浏览

c# - 要求 SslStream 仅接受由特定公钥签名的证书

我有一个可行的实现,但想确保它是安全的。目标是使用 SSLStream 并且只接受来自服务器的由特定 RSA 密钥签名的 SSL 证书。

这是我的连接代码:

这是我对 ValidateServerCertificate 的实现:

由于 X509Chain 对象的丰富性,我想确保不需要检查 X509ChainStatusFlags.NotSignatureValid 等内容。

例如,攻击者是否有可能“声称”由我的公钥签名,发送无效签名,并且这种攻击会起作用,因为 .NET 假设我正在检查所有这些标志?

谢谢!!

更新:好的,到目前为止,我决定将以下检查放在原始 foreach 之上。请注意,这在某种程度上是特定于应用程序的;例如,如果我希望证书过期,我会检查 NotTimeValid 等。

0 投票
1 回答
1926 浏览

c# - c# SslStream.Read Loop problem

I've been learning C# by creating an app and i've hit a snag i'm really struggling with.

Basicly i have the code below which is what im using to read from a network stream I have setup. It works but as its only reading 1 packet for each time the sslstream.Read() unblocks. It's causes a big backlog of messages.

What im looking at trying to do is if the part of the stream read contains multiple packets read them all.

I've tried multiple times to work it out but i just ended up in a big mess of code.

If anyone could help out I'd appreciate it!

(the first 4bytes of each packet is the size of the packet.. packets range between 8 bytes and 28,000 bytes)

0 投票
0 回答
1574 浏览

c# - C#:sslStream 和本地代理

我们有一个接受 ssl 连接的服务器。假设我请求https://gmail.com然后服务器首先检查我是否已登录它,如果是,则它连接到 gmail 并发送回响应。如果我还没有登录,那么它会重定向到我们的登录页面。我的要求如下:

我必须写一个TCPListener监听本地代理(比如 127.0.0.1:13000)。当一个请求来自浏览器时,我必须创建一个到我们服务器的 ssl 连接并将请求传递给它。

服务器将回复登录 url 或成功然后我应该对浏览器执行相同的操作。

我写的代码如下:

当我运行代码时,我得到了我附加的输出。(被屏蔽的文字显示我公司的登录网址)

有人可以告诉我为什么浏览器没有重定向到登录页面。

谢谢伊尔凡

0 投票
2 回答
2214 浏览

c# - sslStream.Read 问题:读取的所有字节都是 0

0 投票
2 回答
13965 浏览

c# - C# SSL 安全套接字

我有一个用 C# 编写的良好、可工作的通信器应用程序。现在我需要实现与服务器的安全连接。我尝试将 Socket 和 TcpClient 对象更改为 SslStream,但出现了一些错误。

首先,我使用 makecert 生成了一个 .cer 证书。OpenSSL 证书对我不起作用,因为它们不包含私钥。接下来我在服务器上创建了一个证书对象并将其绑定到 SslStream:

在客户端,我正在这样做:

但是 AuthenticateAsClient 函数会引发异常。我尝试了其他几个方法参数,但这些都不适合我。

谁能帮助我,或逐步解释如何将简单的套接字更改为安全的套接字?需要明确的是,SSL 不是必需的——如果有更简单的方法可以使连接安全,我可以使用它。


编辑:异常消息如下:

0 投票
1 回答
2518 浏览

c# - SslStream 等效于 TcpClient.Available?

根据@Len-Holgate在这个问题中的建议,我异步请求 0 字节读取,并在回调中接受字节同步读取的可用字节,因为我知道数据可用并且不会阻塞。这看起来如此高效和美妙。

但是后来我添加了 SslStream 的选项,这种方法就分崩离析了。零字节读取很好,但是 SslStream 解密字节,在 TcpClient 的缓冲区中留下零字节数(适当地如此),我无法确定 SslStream 现在有多少字节可供读取。

有一个简单的技巧吗?


一些代码,仅用于上下文:

在 EndRead() (正确返回 0 )之后, DataAvailable 包含:

由于协议的原因,我需要逐字节评估并解码可变字节宽度的 unicode 等。我不想逐字节地异步读取!

0 投票
1 回答
1734 浏览

c# - GZipStream 4G 限制 - 总数或当前流式传输?

GzipStream一个SSLStream

今天第一次注意到“gzip 流不能包含超过 4GB 的数据”。

网络的 Writer 输入数据的速度比 Reader 获取数据的速度要快。因此,我不清楚错误的原因。

这是对通过流写入的总字节数的限制,还是积压将数据从流中取出GZipStram并放入的问题SSLStream

Reader 能够在流结束之前解压缩并使用数据,所以我从没想过写入的总字节数可能会有这样的限制。

似乎没有办法检查长度。

有人可以分享他们如何处理这个问题的例子吗?

代码大纲: