当前位置: 首页 > 知识库问答 >
问题:

在Glassfish 2上使用HTTP和HTTPS的单一端口

宣望
2023-03-14

我有一个部署在Glassfish上的应用程序,并侦听端口8181以获取HTTPS流量(当前)。问题是在部署时,客户很少为服务器创建有效证书。这意味着HTTPS无法通过证书检查。

在我们的应用程序中,我们希望通过HTTP获取某些类型的内容,因为它是静态的,并且获取未加密这一事实不是问题。

我们确实存在的问题是,只有端口8181可供用户使用(防火墙等不能更改)。

因此,我们需要一种方法让Glassfish侦听端口8181上的传入连接,并识别正在尝试的协议(< code > https://my server:8181 或< code > http://my server:8181 )。

我看过一个Tomcat的解决方案:https://server fault . com/questions/47876/handling-http-and-https-requests-using-a-single-port-with-nginx # comment-37501

关于如何使用Glassfish做到这一点有什么想法吗?我们可以在其中实现一个钩子并适当地传递给任何一个处理程序(HTTP或HTTPS)吗?

共有2个答案

舒飞捷
2023-03-14

我看了那里的所有答案,它们告诉我们的几乎是一样的:这是不可能的,因为HTTP和HTTPS之间存在差异。甚至浏览器也使用不同的默认端口来处理HTTP/HTTPS。

发生这种情况的原因:HTTP基本上是文本协议,浏览器只是通过TCP-IP发送HTTP(文本)报头。HTTPS不仅仅是HTTP上的SSL。首先,浏览器执行“握手”,然后它从服务器接收证书,从服务器到浏览器的所有信息(反之亦然)都使用握手期间协商的对称密钥进行编码。

由于非对称加密中使用的2个密钥(公钥和私钥),因此没有人(除了知道私钥的人)无法嗅探或更改信息。

实验:尝试以下操作:将https更改为http,并在末尾显式添加“443”(类似http://google.com:443)您得到了“连接已重置”或存储二进制文件(例如证书)的建议。

注意:通常服务器设置为拒绝此类请求。

因此,即使您使用相同的连接器来处理HTTP和HHTPS连接,您也应该使用不同的连接处理程序(我们在实现基于Netty的高负载服务器时遇到了这个问题)。

在同一个端口上使用HTTP和HTTPS的唯一可能性是使用“魔术识别器”,它将检查纯文本或二进制握手。如果我们将识别器放在容器端(Glassfish协议处理程序),它会有相当大的性能开销(检查每个请求是否是SSL的!).如果我们把它放在代理服务器端(例如nginx或其他非阻塞服务器,如Netty ),性能不会受到太大影响,但无论如何这并不能保证100%的成功。

注意:代理服务器只是识别,然后将请求转发到两个不同的端口!

作为结论:总的来说,这是可能的,但从我的角度来看,所需的工作不值得结果。

编辑:正如@Bruno所回答的,现在有现成的魔法识别器,但Glassfish并不正式支持它。

南门飞
2023-03-14

你试图做的是所谓的“港口统一”,应该得到Glassfish的支持,就像在灰熊中实现的那样。

 类似资料:
  • 我有一个使用http和https的SpringBoot 2.0应用程序。因此,在端口9080上,它服务于http协议,在端口9443上,它工作正常。我唯一想要的是重定向,如果用户输入例如:http://localhost:9443/e1 综上所述: http://localhost:9080/e1 https://localhost:9443/e1 http://localhost:9443/e1

  • 我有一个应用程序,它通常在https中工作。Tomcat监听端口8443: Apache监听80并重定向到8443: 最后,我在web.xml中添加了: 不幸的是,我必须将带有http站点的IFRAME添加到我的一个网站中。那里的安全不是问题。我的问题是Tomcat配置。我想我会用阿帕奇调度交通。但现在我的问题是如何设置Tomcat,这样我就可以为站点http://localhost:8080/s

  • 问题内容: 是否可以创建具有相同路由和相同中间件的,同时侦听HTTP和HTTPS的Express服务器? 目前,我在高速上的HTTP做到这一点,有安全通道隧道HTTPS来表达,但我更喜欢一个纯粹的节点解决方案。 我可以使用以下代码来做到这一点,但是可以使用标记为私有的方法: 问题答案: 您可以通过以下方式共享实现:

  • 问题内容: 我正在尝试获取用户输入的网址的图标,例如 我使用HttpUrlConnection 从主机URL 的扩展名中获取网站图标的位图。 但是,由于用户可能不会指定或,所以我必须自己添加它。我遇到的问题是,如果我在url前面添加,一切都会正常运行,但是对于,某些网站会返回该网站图标,而其他网站只会给我null。我如何找出使用哪个页面?我应该为每种情况添加吗?是否有任何网站严格限制并会返回nul

  • 问题内容: 我的问题很简单,但我找不到答案,也没有自己进行测试的资源。我可以从一个域向另一个HTTPS域发出HTTPS CORS请求吗?我可以从一个域向另一个HTTPS域发出HTTP CORS请求吗?我知道,我可以执行从一个域到另一个HTTP域的HTTP CORS请求,但是当使用HTTPS时,我不知道是否存在任何区别。 谢谢, 菲利普 问题答案: 是的,您可以从一个HTTPS域向另一个HTTPS域

  • 状态码 定义 1xx 报告 接收到请求,继续进程 2xx 成功 步骤成功接收,被理解,并被接受 3xx 重定向 为了完成请求,必须采取进一步措施 4xx 客户端出错 请求包括错的顺序或不能完成 5xx 服务器出错 服务器无法完成显然有效的请求 403: Forbidden 404: Not Found HTTPS握手,对称加密,非对称加密,TLS/SSL,RSA