V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liut2016
V2EX  ›  Java

Java 语言中,一条通过 SSLSocketFactory 创建的 SSLSocket,能否在进行 ssl 握手之前发送些数据?

  •  
  •   liut2016 · 350 天前 · 1115 次点击
    这是一个创建于 350 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,我对该 API 不够熟悉,没找到相关方法和思路,希望能获得帮助。

    要求:使用现有 JSSE 接口的 TLS 实现,而不需要手搓 TLS 源码。

    kwh
        1
    kwh  
       350 天前
    可以,用 netty 写一个代理,把非 https 请求的数据过滤出来做处理,然后把剩余的 https 的数据发送到服务器。
    liut2016
        2
    liut2016  
    OP
       350 天前 via Android
    @kwh 好的,这是一条思路,不过业务简单不需要 netty (我不会),感谢解答
    liut2016
        3
    liut2016  
    OP
       350 天前 via Android
    还有其它的更简单的思路吗😂,多一层代理需要额外占用一个端口
    liut2016
        4
    liut2016  
    OP
       350 天前 via Android
    @kwh 不对,这样就不是同一条 socket 了,还是 netty 有特殊的能力可以这样,我先了解下 netty 吧
    liut2016
        5
    liut2016  
    OP
       350 天前
    补充一条说明:这个 socket 是客户端的,要求握手之前和之后在同一条 socket 中
    kwh
        6
    kwh  
       350 天前
    按照我目前的知识,只能通过代理来处理,还没听说过 tomcat 能自定义协议的。

    端口也不需要防火墙多开,让 tomcat 监听一个没通防火墙的端口,netty 通过本地与 tomcat 进行连接。

    客户端与 nettyf 服务器之间创建 channel ,然 netty 与服务器之间创建 channel 。netty 只是一个中间商用来过滤非 http 数据,让 tomcat 服务能处理。
    jackyzy823
        7
    jackyzy823  
       350 天前
    不如先普通 socket,发送完之后再 Upgrade to SSLSocket?
    tony1016
        8
    tony1016  
       350 天前   ❤️ 1
    多年没写 java 了,让我来看看接口
    abstract Socket createSocket(Socket s, String host, int port, boolean autoClose)
    Returns a socket layered over an existing socket connected to the named host, at the given port.
    既然可以接受已经存在的 socket ,那么完全可以写完后再创建 sslsocket
    liut2016
        10
    liut2016  
    OP
       350 天前
    @SoloCompany 非常感谢
    liut2016
        11
    liut2016  
    OP
       350 天前
    @tony1016 非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3981 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:20 · PVG 18:20 · LAX 03:20 · JFK 06:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.