apache - 有没有办法强制应用程序使用 https 而不是 http 发布

标签 apache http web service tcp

我有一个向 Web 服务发送请求的应用程序。不幸的是,该应用程序已编译并且指向 Web 服务的链接作为 http 嵌入到应用程序中。 (是的,我知道那有多蠢,我没有写)

最近3rd party公司不再允许http请求,一切都必须是https。

该应用程序在 Tomcat 上作为 Web 应用程序运行。服务器是windows服务器。

有没有办法拦截对这个网络服务的调用并强制它使用 https?

最佳答案

因为你不能改变应用程序的源代码(因为它是编译好的),你也不能改变网络服务(因为它是第 3 方),解决这个问题的唯一方法是制作 应用程序和网络服务之间的代理。为此,您需要(假设代理在本地主机中运行):

  1. 由于 Web 服务 URL 嵌入到已编译的应用程序中,为了让应用程序向我们的代理发送 HTTP 请求,需要更改主机映射(例如 /etc/hosts)以覆盖 DNS。例如,如果应用程序中的 HTTP 请求是 GET http://example.com/api/sample,则在 /etc/hosts 中,example.com 需要映射到 127.0.0.1
  2. 在本地创建一个代理网络服务器,并打开与网络服务相同的端口。这个代理是一个非常简单的网络服务器(任何后端编程技术都可以做到),它只负责请求转发。这样,当应用程序向example.com发送HTTP请求时,它会将请求发送给代理服务器。
  3. 代理服务器收到来自应用程序的 HTTP 请求后,提取请求 URL/header/body 并将 HTTPS 请求发送到 example.com 的真实 IP 地址。请注意:在此 HTTPS 请求中,应添加值为 example.com 的 header host。第 3 方网络服务可能会检查此 header 。
  4. example.com返回真正的响应后,proxy会返回给应用。

当然,您也可以使用逆向工程(Java反编译器)获取应用程序的“源代码”,更改网络服务URL,然后再次编译为网络应用程序。但是,由于应用程序可能需要更新/升级并且它可能不在您的控制之下,因此不建议使用这种逆向工程方法。

关于apache - 有没有办法强制应用程序使用 https 而不是 http 发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43858365/

相关文章:

php - htaccess 将通配符子域重定向到 https(包括 www)

php - MySQL 32 位或 64 位 - Apache 32 位 Windows 64 位?

performance - 优化 Node.js 入站/出站连接

web - Google Polymer 没有元素样式

html - 在水平主菜单上鼠标悬停时的垂直子菜单

node.js - 无法访问react和非node js后端(apache)服务器应用程序中的进程对象

spring - HTTP session 和 Web session 有什么区别?

.net - 如何在 HttpWebRequest 中设置自定义 "Host" header ?

python - Flask APP - ValueError : signal only works in main thread

logging - 如何限制 Apache 访问日志的大小,并限制其保留的归档日志的数量?