【问题标题】:RESTful, web-facing service with SNI (Server Name Indication)带有 SNI(服务器名称指示)的 RESTful、面向 Web 的服务
【发布时间】:2017-04-13 05:24:06
【问题描述】:

我有一个 Spring MVC 应用程序,它通过 HTTP POST 方法从另一个应用程序接收 URL 回调,该方法还将发送 SNI(用于 SSL/TLS 连接的(服务器名称指示)),所以我必须实现一个面向 Web 的 RESTful我的 Spring 应用程序中的服务。 由于我将始终从同一服务器接收 URL 回调,因此我想拒绝来自其他服务器的所有请求。在哪里更好地检查服务器名称?在 Spring MVC 应用程序级别,或者有一种方法可以配置 Apache Web 服务器??

我有一个接受 POST 请求的 @Controller 端点,像这样 http://myserver/MyApp/api/registerUser?userId=E506&lat=41&lng=7&rssi=-127&data=3428102231

但此请求将始终来自服务器 111.222.333.444,因此我只想接受来自该服务器的请求,而不是其他任何人(假设是潜在的黑客)

【问题讨论】:

  • 不确定我是否完全关注...您有一个通过 SSL/TLS 在 Apache 上运行的 Spring 应用程序。你有一个@Controller 端点,它接受一个 POST 请求,这样请求的主体包含用于回调的 URL(例如 webhook)。您是说到您的控制器端点的入站请求将始终来自服务器 X,还是您希望所有回调 url 都具有服务器 X 的目的地?无论哪种情况,我都不确定 SNI 是否是解决方案,但一旦知道答案,或许能够提供更好的建议
  • @CrossOrigin(origins = "http://111.222.333.444") 有用吗?它可能只允许服务器 111.222.333.444 向您的注释端点发送请求。
  • Origin header is added by the user agent to describe the security contexts that caused the user agent to initiate an HTTP request. HTTP servers can use the Origin header to mitigate against Cross-Site Request Forgery (CSRF) vulnerabilities. @CrossOrigin 不适用于 OP 场景。我认为,最好控制来自网关 http 服务器(在本例中为 apache)的访问。

标签: apache rest spring-mvc ssl ssl-certificate


【解决方案1】:

如果您的 Spring 应用程序位于 apache web 服务器后面,充当gateway (a.k.a. reverse proxy),您可以使用以下 apache 配置来限制访问:

<Location "/url/of/the/webservice">
    Require ip 111.222.333.444
</Location>

来自文档:

&lt;Location&gt; 指令通过 URL 限制所附指令的范围。

Require 指令测试经过身份验证的用户是否根据特定的授权提供者和指定的限制获得授权。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 2017-05-23
    • 2013-11-03
    • 2011-07-04
    • 1970-01-01
    • 2019-10-20
    • 2020-05-08
    相关资源
    最近更新 更多