22

我有一场 Java 战争,我想在 AWS 上的弹性 beanstalk 上进行托管。我有一个证书,但我不知道如何将它附加到我的单实例应用程序中。

所有howtos都描述了如何将证书附加到弹性负载均衡器,但没有关于如何在没有负载均衡器(即单实例)的情况下执行此操作的文档。

我不想使用负载均衡器,因为它需要额外费用(并且在测试环境中不需要)。

任何帮助将不胜感激。

4

2 回答 2

19

Elastic Beanstalk 单实例类型不支持通过管理控制台或 API 进行的 SSL。您可以在AWS 论坛中找到更多信息。

但是您可以使用配置文件来自定义您的实例以启用 SSL。请看下面的例子。

  1. .ebextensions在源包的顶层创建一个目录。
  2. SSLCertificateFile.crt, SSLCertificateKeyFile.key,SSLCertificateChainFile.crtssl.conf(apache2 ssl 模块配置) 复制到.ebextensions
  3. 创建一个配置文件,/your_app/.ebextensions/01ssl.config. 在配置文件中键入以下内容 01ssl.config以配置 ssl 设置
  4. 在您的安全组中打开 443 端口

01ssl.config

packages:
  yum:
    mod_ssl: []
container_commands:
  add-SSLCertificateFile-label:
    command: cp .ebextensions/SSLCertificateFile.crt /home/ec2-user/SSLCertificateFile.crt

  add-SSLCertificateKeyFile-label:
    command: cp .ebextensions/SSLCertificateKeyFile.key /home/ec2-user/SSLCertificateKeyFile.key

  add-SSLCertificateChainFile-label:
    command: cp .ebextensions/SSLCertificateChainFile.crt /home/ec2-user/SSLCertificateChainFile.crt

  replace-ssl-configuration-label:
    command: cp .ebextensions/ssl.conf /etc/httpd/conf.d/ssl.conf

ssl.conf示例

您的 WAR 结构应如下所示

web_app.war
          |
          |_.ebextensions
          |   |_ 01ssl.config
          |   |_ SSLCertificateFile.crt
          |   |_ SSLCertificateKeyFile.key
          |   |_ SSLCertificateChainFile.crt
          |   |_ ssl.conf
          |
          |_META-INF
          |
          |_WEB-INF
               |_ classes
               |_ lib
               |_ web.xml

2013/11/14 更新。

  1. 使用配置文件要注意安全问题,因为 .ebextensions 文件夹中的文件是所有人都可以访问的。这在通常情况下可能不会发生。
  2. AWS 现在还提供了一个示例配置文件,用于为单实例类型配置 SSL
于 2013-09-04T17:44:29.720 回答
6

此解决方案使用 LetsEncrypt 免费证书,并且不需要将您的证书存储在配置文件中。而且它很容易在不同的领域重用。

http://bluefletch.com/blog/domain-agnostic-letsencrypt-ssl-config-for-elastic-beanstalk-single-instances/

摘要:一个带有容器命令的配置文件,可以自动下载 certbot、获取证书并将 nginx 指向证书。

于 2016-07-06T17:35:55.647 回答