使用 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 上运行
如何使用 AES-256 在 Spring Boot 上设置 SSL (TLS) / HTTPS?
如何使用 AES-256 在 Spring Boot 上设置 SSL (TLS) / HTTPS?