Java-Client中的单向SSL服务器套接字可以是SSL或非SSL
我想创建一个通过SSLServerSocket(单向SSL)进行通信的服务器,以便客户端可以验证服务器(服务器不需要验证客户端) 但我不想强制执行单向SSL。意味着如果客户端希望从普通套接字(而不是在其信任存储中具有我的公共证书的SSLSocket)发送请求,它仍应允许连接。 意味着客户端可以通过Socket或SSLSocket进行连接,这两种方式都可以 我已经尝试实现了这一点,所以我创建了一个SSLServerSocket,在其中添加了我的密钥库(其中包含服务器的私钥)。通过SSLSocket(客户端),它正在工作。但当我试图连接套接字(非ssl客户端)时,它给出了一个异常。 “无法识别的SSL消息,纯文本连接?” 请建议 编辑1 根据我的评论,我可以说这个问题有两种可能的解决方案Java-Client中的单向SSL服务器套接字可以是SSL或非SSL,java,sockets,ssl,Java,Sockets,Ssl,我想创建一个通过SSLServerSocket(单向SSL)进行通信的服务器,以便客户端可以验证服务器(服务器不需要验证客户端) 但我不想强制执行单向SSL。意味着如果客户端希望从普通套接字(而不是在其信任存储中具有我的公共证书的SSLSocket)发送请求,它仍应允许连接。 意味着客户端可以通过Socket或SSLSocket进行连接,这两种方式都可以 我已经尝试实现了这一点,所以我创建了一个SSLServerSocket,在其中添加了我的密钥库(其中包含服务器的私钥)。通过SSLSocket
if(fingerPrint[0] == 0x16 && fingerPrint[1] == 0x03 && fingerPrint[5]
== 0x01)
return true;
else
return false;
这个逻辑正确可靠吗
这个逻辑是如何检测SSL连接的?在不同端口上双向侦听怎么样?@gusto2-同一个端口侦听来自SSLSocket和非SSLSocket的连接请求。我知道。我是问你为什么要把它复杂化。理论上,您可以使用缓冲流,检查客户端是否发送了“SSL Hello client”消息,并重置流。我只是不明白为什么可以使用两个端口。这是可能的,但远不容易。不推荐。@dave:除非是人工约束的家庭作业,我认为“双”用途端口的想法是不好的。真的没有理由做比必要的更复杂的事情
if(fingerPrint[0] == 0x16 && fingerPrint[1] == 0x03 && fingerPrint[5]
== 0x01)
return true;
else
return false;