【问题标题】:setup grails spring security on single instance elastic beanstalk在单实例弹性beantalk上设置grails spring security
【发布时间】:2015-09-02 17:36:53
【问题描述】:

我已成功让我的应用与负载均衡器一起工作。作为一项削减成本的措施,我将我的应用程序移至 Amazon AWS Elastic Beanstalk 上的单个实例。

我能够使用 singlessl.config 创建一个 .ebextensions 文件,并通过手动转到 https://www.example.com/login 正确让我的 SSL 证书在 WAR 文件中工作

所以我知道我的 war 文件/ssl 可以在单个实例上工作。

我没能去工作的是让 spring security 工作。

无论我尝试何种配置变体,浏览器总是因“错误太多重定向”而死机。当我只输入没有 https (http://example.com) 的应用程序主页时,就会发生这种情况

我认为重定向是从 http 到 https 并返回,或者 app/apache/tomcat 中的某些内容在不同端口之间返回。

spring security、apache 和/或 tomcat 之间存在一些问题,但我不确定是什么。

此时,如果整个网站都是安全的,我会采用它而不是安全/非安全页面。

我的 grails spring 安全配置(我尝试的最后一个变体,我尝试了大约 10 个)是:

grails.serverURL = "https://www.example.com"
grails.plugins.springsecurity.portMapper.httpPort = 80
grails.plugins.springsecurity.portMapper.httpsPort = 443
grails.plugins.springsecurity.auth.forceHttps = true
grails.plugin.springsecurity.secureChannel.definition = [
        '/**': 'REQUIRES_SECURE_CHANNEL'

我必须在 Tomcat 或 Apache 中做些什么才能让它在 Elastic Beanstalk 中工作?

【问题讨论】:

  • 我知道您只有 1 个实例,但您的实例是否位于 ELB 后面?如果负载平衡器有 SSL 终止,我遇到了 HTTP 重定向的棘手情况,所有调用都通过 HTTP 到达网络服务器,这会导致重定向循环。 (我必须检查 X_Forwarded_Proto 标头而不是传入端口。)
  • 我正在尝试移除负载均衡器,这样我就不必支付 2 倍的费用。负载均衡器一切正常。当我转到一个实例时,一切都崩溃了。 X_Forwarded_Proto 不适用于单个实例。
  • 你显然在 Grails 层中有一个重定向。你有什么关于tomcat/beanstalk级别的吗?能否确认单实例前面没有ELB?
  • 我删除ELB后的应用程序面植,所以我知道我成功删除了它。那时我必须创建一个 .ebextensions 文件才能让 SSL 在单个实例中工作。我可以直接去example.com。我不能做的是转到example.com 并将其重定向到example.com。这就是浏览器中的 ERR_TOO_MANY_REDIRECTS 发生的时候。 AWS上EBS自带的tomcat/apache默认配置我还没碰过。

标签: grails amazon-web-services spring-security amazon-elastic-beanstalk


【解决方案1】:

检查 here 以获取 spring 安全通道安全配置。您可能还需要提供:

grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto'
grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http'
grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto'
grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https'

在 .ebextensions 中,您可以将 server.xml 放置在其中:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- Add this line --> 
    <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto" internalProxies="10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|169\.254\.\d+\.\d+|127\.\d+\.\d+\.\d+|172\.(1[6-9]|2[0-9]|3[0-1])\.\d+\.\d+" />

  </Host>

应用于像tomcat这样的服务器容器。我对 internalProxies 了解不多。

【讨论】:

    猜你喜欢
    • 2014-03-19
    • 2020-08-29
    • 2019-03-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2015-12-28
    相关资源
    最近更新 更多