使用 SSL / HTTPS 的 Spring Boot 项目无法在 AWS Elastic Beanstalk 上运行

Posted

技术标签:

【中文标题】使用 SSL / HTTPS 的 Spring Boot 项目无法在 AWS Elastic Beanstalk 上运行【英文标题】:Spring Boot project with SSL / HTTPS not working on AWS Elastic Beanstalk 【发布时间】:2019-03-01 13:42:42 【问题描述】:

我的 Spring Boot 项目在 https / ssl 上运行良好,在本地服务时使用 p12 证书,但在上传到 AWS Elastic Beanstalk 时失败。

以下是application.properties的配置:

security.require-ssl=true
server.use-forward-headers=true

server.port=8443
server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: jonathan
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat

WebSecurityConfigurerAdapter 子类 configure(HttpSecurity http) 方法包含以下行,用于启用 HTTPS/SSL:

http.requiresChannel().antMatchers("/**").requiresSecure();

附加的是经典的负载配置器配置,在 AWS 弹性 beanstalk 控制台内:

这是在 AWS Certificate Manager 下使用 Grasshapper.net 域颁发的 SSL 证书:

我还有 .ebextensions 下的设置,带有路径的文件是 src/main/resources/.ebextensions/.config(甚至不确定是否需要):

option_settings:
  aws:elb:listener:8443:
    SSLCertificateId: [keeping private]
    ListenerProtocol: HTTPS
    InstancePort: 80
    InstanceProtocol: HTTP
  aws:elb:listener:80:
    ListenerEnabled: false

注意 (SSLCertifcateId):ID 取自 ARN,我的 AWS 证书管理器 SSL 证书(如果展开 SSL 证书,您将看到 ARN)。

【问题讨论】:

【参考方案1】:

代理是否有可信的 IP 地址?

默认情况下,10/8、192.168/16、169.254/16 和 127/8 中的 IP 地址是 信任。您可以通过添加 application.properties 的入口,如下例所示:

server.tomcat.internal-proxies=192\.168\.\d1,3\.\d1,3

参考:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/howto-embedded-web-servers.html#howto-customize-tomcat-behind-a-proxy-server

【讨论】:

以上是关于使用 SSL / HTTPS 的 Spring Boot 项目无法在 AWS Elastic Beanstalk 上运行的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSL / HTTPS 的 Spring Boot 项目无法在 AWS Elastic Beanstalk 上运行

168. Spring Boot 使用SSL-HTTPS

如何使用 AES-256 在 Spring Boot 上设置 SSL (TLS) / HTTPS?

如何使用 AES-256 在 Spring Boot 上设置 SSL (TLS) / HTTPS?

Https系列之二:https的SSL证书在服务器端的部署,基于tomcat,spring boot

spring boot - undertow https 会话不会过期或停止 ssl 握手