ruby - Powershell SSL 套接字客户端

标签 ruby sockets powershell ssl

我在使用 powershell 连接到带有自签名证书的 ssl 套接字时遇到问题。我有一个连接正常的 ruby​​ 客户端,我还使用 --ssl 开关测试了 ncat 并确认它连接正常。 $sslStream.AuthenticateAsClient 是代码失败的地方,我从 powershell 中收到以下错误“使用“1”参数调用“AuthenticateAsClient”的异常:“对 SSPI 的调用失败,请参阅内部异常。”。非常感谢任何帮助.

Powershell 客户端

$socket = New-Object Net.Sockets.TcpClient('172.26.4.38', 8080)
$stream = $socket.GetStream()
$sslStream = New-Object System.Net.Security.SslStream($stream,$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback]))
$sslStream.AuthenticateAsClient('172.26.4.38')
$writer = new-object System.IO.StreamWriter($sslStream)
$writer.WriteLine('hello world')
$writer.flush()
$socket.close()

ruby 服务器

#!/usr/bin/env ruby
require 'openssl'
require 'socket'
tcp_server = TCPServer.new('172.26.4.38', 8080)
ctx = OpenSSL::SSL::SSLContext.new
ctx.ssl_version = :SSLv23
ctx.key = OpenSSL::PKey::RSA.new 2048
ctx.cert = OpenSSL::X509::Certificate.new
ctx.cert.subject = OpenSSL::X509::Name.new [['CN', '172.26.4.38']]
ctx.cert.issuer = ctx.cert.subject
ctx.cert.public_key = ctx.key
ctx.cert.not_before = Time.now
ctx.cert.not_after = Time.now + 60 * 60 * 24
ctx.cert.sign ctx.key, OpenSSL::Digest::SHA1.new
server = OpenSSL::SSL::SSLServer.new tcp_server, ctx
socket = server.accept
puts 'client connected'
puts socket.gets

最佳答案

这是创建自签名证书的 ruby​​ 代码的问题。使用 openssl 和 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt 以下 powershell 代码工作正常。

客户端

$socket = New-Object Net.Sockets.TcpClient('172.26.4.38', 8080)
$stream = $socket.GetStream()
$sslStream = New-Object System.Net.Security.SslStream($stream,$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback]))
$sslStream.AuthenticateAsClient('172.26.4.38')
$writer = new-object System. IO.StreamWriter($sslStream)
$writer.WriteLine('Hello World')
$writer.flush()
$socket.close()

服务器

#!/usr/bin/env ruby
require 'openssl'
require 'socket'
tcp_server = TCPServer.new('172.26.4.38', 8080)
ctx = OpenSSL::SSL::SSLContext.new
ctx.cert = OpenSSL::X509::Certificate.new(File.open('server.crt'))
ctx.key = OpenSSL::PKey::RSA.new(File.open('server.key'))
server = OpenSSL::SSL::SSLServer.new tcp_server, ctx 
socket = server.accept
puts 'client connected'
puts socket.gets

关于ruby - Powershell SSL 套接字客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19252963/

相关文章:

ruby-on-rails - rails : Find entries by date

c# - C++ 将 UTF 字节数组转换为字符串

java - Socket在同一台机器上的两个进程(起源于C和Java)之间进行通信

ruby-on-rails - 为 PostgreSQL 安装 ruby​​ gem 时出错

ruby-on-rails - Ruby:用另一个数组对数组进行排序

php - php key()函数在对象内部不起作用

powershell - 无法将非整体脚本模块发布到具有 7 个或更多函数的本地 PowerShell 库

Powershell 使用 ConvertFrom-Csv 解析带有换行符的管道 CSV 数据

c# - 将 powershell 变量传递给 PS 脚本中的 C# 代码

c++ - 将 ruby​​ 哈希转换为 c++ 映射