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中指定一个端口).

上一篇:使用Java编写使用ssl / tls的客户端-服务器应用程序,而又无法使用keytool


下一篇:java-确保已发行证书不会自行发行证书