编程语言
首页 > 编程语言> > java-SSLSocket还可以用于不安全的http吗?

java-SSLSocket还可以用于不安全的http吗?

作者:互联网

我可以在HTTP和https会话中都使用SSLServerSocket类并侦听一个端口(通过自动检测,客户端附带HTTP还是https)?还是必须打开两个端口并将SSLServerSocket用于https和ServerSocket用于http?

谢谢

解决方法:

您尝试做的事情称为端口统一.例如implemented in Grizzly.

您实际上不能直接使用SSLServerSocket来侦听HTTP和HTTPS通信,因为它会在读取时立即开始握手,但是您可以使用普通的ServerSocket,接受普通的Socket,并尝试检测何时获得TLS客户端向您好或HTTP请求,方法是先读取前几个字节,然后读取convert it to an SSLSocket.

我不能说我已经尝试过使用Sockets,但是您需要一些内容来提前阅读TLS客户端Hello,并在必要时将其推回possibly using a PushBackInputStream, as suggested by EJP.

(据我所知,Grizzly为此使用SSLEngine而不是SSLSocket.)

请注意,使用端口统一是非常不寻常的.我不确定继续阅读的开销是多少.使用多个端口通常不是问题(此外,HTTP和HTTPS具有不同的默认端口,因此您必须至少在两个URL中指定一个端口).

标签:ssl,https,certificate,jsse,java
来源: https://codeday.me/bug/20191031/1973387.html