2013-03-15 33 views
3

我可以为http和https会话使用SSLServerSocket类,并且可以听一个端口(自动检测客户端是否带有http或https)?或者必须打开两个端口并使用SSLServerSocket作为https和ServerSocket的http?SSLSocket也适用于不安全的http?

感谢

+0

你想用'SSLServerSocket'与端口443上的客户端进行HTTP通话吗?如果这是可能的,我会很惊讶,但一定要亲自尝试一下。 – 2013-03-15 11:05:59

+3

请检查这个答案,我给了一次,这可能会有所帮助。 http://stackoverflow.com/a/13450695/655756 – n1ckolas 2013-03-15 11:06:17

回答

4

你正在试图做的,什么叫端口统一。例如,它是implemented in Grizzly

你真的不能使用SSLServerSocket直接听HTTP和HTTPS流量,因为它会直接在阅读开始握手,但你可以有一个简单的ServerSocket,接受一个普通的Socket,尝试你什么时候检测通过读取前几个字节获取TLS客户端hello或HTTP请求,然后convert it to an SSLSocket

我不能说我已经试过Socket s,但是您需要提前阅读TLS客户端Hello,并在必要时将其推回,possibly using a PushBackInputStream, as suggested by EJP

(据我所知灰熊使用SSLEngine,而不是SSLSocket这一点。)

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

+0

谢谢,这真的有帮助 – Igor 2013-03-15 12:07:49

相关问题