【问题标题】:Is there a way to force an application to post using https instead of http有没有办法强制应用程序使用 https 而不是 http 发布
【发布时间】:2017-10-07 02:07:49
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: apache http web service tcp


    【解决方案1】:

    由于您无法更改应用程序的源代码(因为它已编译),并且您也无法更改 Web 服务(因为它是第 3 方),所以解决此问题的唯一方法是制作 应用程序和网络服务之间的代理。为此,您需要(假设代理在 localhost 中运行):

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

    当然,你也可以使用逆向工程(Java Decompiler)来获取应用程序的“源代码”,改变web服务的URL,然后再次编译成webapp。但是,由于应用程序可能需要更新/升级,并且可能不受您的控制,因此不建议使用这种逆向工程方法。

    【讨论】:

      【解决方案2】:

      您可以使用代理脚本。用你想要的任何服务器端语言编写它,例如 PHP,将 API URL 设置为此脚本,脚本为你执行 https 请求并将结果传递回你的应用程序。

      您也可以使用 Apache 本身作为代理,并使用类似:Apache config: how to proxypass http requests to https

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-10
        • 2015-08-15
        • 2011-01-17
        • 2019-11-02
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        相关资源
        最近更新 更多