使用Python或Ruby或P连接到.NET Sslstream x.509套接字

2024-10-04 09:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个奇怪的要求。我正在尝试与用C编写的服务器通信。基本上是这样的:

 SslStream sslStream = new SslStream(client.GetStream(), true,
                                   ValidateServerCertificate,
                                   SelectLocalCertificate); 
sslStream.AuthenticateAsServer(_pushCert);

我还有C语言的示例代码,它使用X509证书并连接到服务器。我有密码证书.pfx文件也一样。在

我想做的是设置某种shell脚本,它可以连接到套接字,传输一些字节并接收响应。(任何语言都可以,尽管我在看Python、Ruby或Perl)

我尝试使用Python中的SSL包装器,但是我得到一个错误,指出服务器/客户机无法使用它们的未知算法。在

我的Python代码示例:

^{pr2}$

对于CERT,我尝试了几个不同的文件:.pfx,以及一些使用openssl从.pfx中提取的文件。在

我也尝试了许多不同的例子(为ssl.wrap_套接字). 我也不太熟悉这些联系。在

也许这里有人可以帮忙?在

谢谢!在


Tags: 文件代码服务器clienttrue示例new证书
1条回答
网友
1楼 · 发布于 2024-10-04 09:26:20

您可以简化SslStream构造函数调用:

SslStream sslStream = new SslStream(client.GetStream()); 
sslStream.AuthenticateAsServer(_pushCert);

此服务器发送\u pushCert,并且不希望客户端返回证书。服务器需要证书的私钥才能建立SSL连接。在

客户端只需要签署服务器证书的CA根证书(或者接受不可信证书的选项)。它需要在“可信根证书存储”中,或者以其他方式标识为受客户端包装器信任的。在

如果服务器证书是由一个中间CA证书签名的,而该证书本身是由根CA证书签名的,则客户端也需要该中间证书。可以由服务器发送,也可以已经在客户端。无论哪种方式,签名证书的整个链都必须在客户端手边,以验证链上的所有签名。中间CA证书不需要在受信任的根存储中。在

双方都不需要CA根或中间签名证书的私钥。在

但是,如果服务器希望客户端发送客户端证书,则必须使用更多参数调用authenticateaserver(clientCertificateRequired==true)。在这种情况下,客户机需要自己的证书和证书的私钥。服务器需要在其受信任存储中签名客户端证书的CA根。例如,客户机包装器将采用一个pfx文件,其中包含客户机证书和私钥。服务器不需要客户端的私钥。在

相关问题 更多 >