- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想代理 SSL 数据,在本例中为 HTTPS。
这是我的代码:
begin
server = TCPServer.open(on_demand_port)
rescue Exception => e
sleep 5
retry
end
sslContext = OpenSSL::SSL::SSLContext.new
sslContext.verify_mode = OpenSSL::SSL::VERIFY_NONE
begin
sslContext.cert = OpenSSL::X509::Certificate.new(File.open("#{Dir.pwd}/Cert/cert.pem"))
sslContext.key = OpenSSL::PKey::RSA.new(File.open("#{Dir.pwd}/Cert/key.pem"), "1234")
rescue Exception => e
sleep 5
retry
end
begin
sslServer = OpenSSL::SSL::SSLServer.new(server, sslContext)
rescue Exception => e
sleep 5
retry
end
while true
begin
threads << Thread.new(sslServer.accept) do |client| # Putting new connections into the thread pool
tcp_proxy(client, db_name, db_user, db_password, remote_host, remote_port, patterns)
end
rescue Exception => e
end
threads = threads.select { |t| t.alive? ? true : (t.join; false) }
while threads.size >= on_demand_max_threads
sleep 1
threads = threads.select { |t| t.alive? ? true : (t.join; false) }
end
end
这是“tcp_proxy”,它是实际的 SSL 代理
begin
begin
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
cert_store = OpenSSL::X509::Store.new
cert_store.set_default_paths
ssl_context.cert_store = cert_store
tcp_socket = TCPSocket.new(remote_host, remote_port)
server_socket = OpenSSL::SSL::SSLSocket.new tcp_socket, ssl_context
server_socket.sync_close = true
server_socket.connect
rescue Exception => e
client.close
end
while true
# Wait for data to be available on either socket.
(ready_sockets, dummy, dummy) = IO.select([client, server_socket])
begin
ready_sockets.each do |socket|
data = socket.readpartial(4096)
if socket == client
# Read from client, write to server.
server_socket.write data
server_socket.flush
else
# Read from server, write to client.
client.write data
client.flush
end
end
rescue Exception => e
end
end
rescue StandardError => e
end
begin
client.close
server_socket.close
rescue Exception => e
end
现在,这在普通的 TCP 和 HTTP 中运行良好,但是,当我在升级套接字时在 SSL\HTTPS 中使用它时,它开始变得非常非常慢,有时甚至会超时。
知道为什么吗?
最佳答案
您必须小心读取和选择,因为读取是在 SSL 级别完成的,而选择是在 TCP 级别完成的。
SSL 将数据放入帧中,每个帧最多包含 16384 字节。它需要先从底层 TCP 套接字读取完整的帧,然后 SSL 套接字上的读取才能从帧中返回任何数据。这意味着如果您有一个具有 4097 字节有效负载的帧,则需要先从 TCP 套接字读取完整帧,然后才能从 SSL 套接字读取任何内容。如果您随后仅从 SSL 套接字读取 4096 个字节,它将返回前 4096 个字节并将其余(1 个字节)留在 SSL 缓冲区中。如果您随后在 TCP 级别使用 select 检查新数据,它可能会阻塞,因为在 TCP 级别没有未读数据,即使 SSL 缓冲区中仍有单个字节。
有两种方法可以解决这个问题:
pending
是否 SSL 缓冲区中仍有数据。如果有,请阅读它们而不是进行选择。SSL_read
并且这仅从单个帧读取数据。因此,读取大小为 16384 字节时,不会有待处理的数据,您可以像现在一样调用 select。关于 ruby SSL 代理(MITM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26467867/
我正在搜索有关如何使用支持 HTTPS 的 Ruby 编写代理的一些示例。我有一个使用 Webricks HTTPProxyServer 实现的简单代理,但我注意到,HTTPS 流量只是隧道传输(它应
我对 SSL 比较陌生,终于在 Java 中完成了 SSL 的代码实现后,我很好奇潜在的缺陷。 我的代码由两个 SSLSockets 组成(其中之一是服务器端的 SSLServerSocket),并且
两个客户端 Alice 和 Bob 使用服务器登录并通过服务器交换消息。登录时,他们都发送他们的公钥以存储在服务器上。当 Alice 想与 Bob 通话时,她用 Bob 的公钥加密一个对称 key ,
玩家通过身份验证后,他会收到一个随机的、唯一的识别 token 。他发送的每个数据包都包含 token 。典型的消息是: token sequence_number commands 问题是,如果有人
我正在使用 mitmproxy 来拦截流量。我想要的是能够在字符串中获取整个请求和响应。我知道您有 def response(context, flow) ,并且 HTTPFlow 对象具有请求和响应
我知道 Google 使用证书固定,并且可以允许用户安装的证书覆盖固定,以便与某些公司的 MITM 兼容。 AFNetworking 是否支持覆盖类型? 最佳答案 我发现此资源详细说明了如何使用 AF
我们已经使用 iOS7 应用程序和 Apache 服务器实现并成功验证了客户端证书检查。问题是:这足以抵御 MITM 攻击,还是我们还应该实现某种证书检查(如此处概述的 https://web.arc
我想代理 SSL 数据,在本例中为 HTTPS。 这是我的代码: begin server = TCPServer.open(on_demand_port) rescue Except
我需要设置一个演示 Android 应用程序,以帮助了解忽略证书验证如何导致 MITM。 目前,我的测试服务器有一个自签名证书,创建如下(参见 here): sudo openssl req -x5
我有一台微型计算机,用于在客户登录 Wi-Fi 网络时向他们显示一个门户页面。 问题是,由于某种原因,他们无法从手机/PC 上获得通常的弹出窗口,而当我对路由器执行相同的操作时,它会正常工作。 我正在
我有一个 Objective-C 项目,其 .ipa 已使用此工具在线测试:https://www.immuniweb.com/mobile 它报告我的应用程序存在高风险安全问题,指向 NSURLCo
我正在尝试执行 man-in-the-middle 攻击 HTTPS通过中继所有流量并挑选出某些流量进行修改来连接。我查看了 LittleProxy-mitm 以及 LittleProxy 这些项目看
我正在尝试创建一个 Java 程序作为代理来查看来自传入源的数据包以进行调试。为此,我创建了一个简单的 Java 服务器应用程序,并编辑了设备上的主机文件。到目前为止,一切都工作正常(甚至是我的中继类
我目前正在从事一个项目,该项目涉及在客户端(浏览器)构建数字堡垒,以减轻对 SSL 的 PKI 基础设施的中间人攻击。尽管它们有多种可能对 SSL 连接发起中间人攻击,但我打算重点关注 PKI 基础设
我正在阅读低功耗蓝牙:开发人员手册,并对 MITM 的保护感到困惑。 书中说,交换配对信息后,双方会产生一个随机数。与该随机数一起,计算确认值。然后双方交换确认值,然后显示随机数。 交换的消息是这样配
我计划从登录屏幕开始,在 HTTPS 中运行应用程序的登录部分。一旦用户登录并完全通过 HTTPS 继续其 session ,如何执行 MITM 攻击?这种攻击不是要弄清楚双方在说什么吗? 我正在使用
出于教育目的,我目前正在分解一个应用程序,看看我是否可以公开它的 API。到目前为止,我做得很好。我找出了 API 的位置,并且通过使用 SSL 代理(例如 Charles),我也能够解密客户端和服务
我正在通过 HTTPS 从 iOS 应用程序与我的服务器进行通信,并希望对其进行一些强化以降低中间人攻击的风险。验证检测 MITM 攻击的最佳 X.509 字段是哪些? 验证证书的序列号和颁发者签名是
我在写一个Ruby代码,模拟一个DNS服务器,在域名不存在的情况下返回自己的IP。例如,如果服务器收到对 google.com 的请求,它将指向真正的 google 站点。另一方面,如果请求指向不存在
我对此感到有点无助。我需要一个可以对从本地主机到远程主机(不仅仅是 HTTPS!)的任何选定 SSL 流执行 MITM 的工具。搜索这样的应用程序似乎是一项非常困难的任务,因为所有应用程序似乎都遵循这
我是一名优秀的程序员,十分优秀!