3

我有一个 Windows/.NET 弹性 beanstalk 实例,在负载均衡器上设置了 SSL 证书。默认情况下,这会创建一个从 https/443 到 http/80 的端口转发。我希望负载均衡器上的 443/https 转发到 beanstalk 实例上的 443 https。

我试图做这里记录的事情:

我重新配置了相应的 EC2 实例 EC2-->Load Balancers-->Listeners,以便 HTTPS 转发到使用我的 SSL 证书配置的 HTTPS,问题是当我尝试发出 HTTPS 请求之后它只是超时。似乎 ElasticBeanstalk 实例不喜欢我修改 EC2 侦听器。

有任何想法吗?

4

3 回答 3

2

To get SSL to work in between the LoadBalancer and the Elastic beanstalk I need several things:

  1. Configure the EC2 LoadBalancer to forward port 443 to port 443 (on SSL). I already had this part in the question above.

  2. Configure the IIS on the EC2 instance like any other site with SSL: a). Install SSL Cert on EC2 instance in IIS. b). Add https/443 binding with the SSL cert.

The problem was I was expecting #2 for free. On Windows Azure this is pretty much free when you configure certificates on your instance, but as of now this is not the case on AMZN ElasticBeanstalk for windows.

I also would expect #2 to be scriptable so I could scale up or down instances without have to manually do #2. I was looking for some easy way to tie in power-shell scripts on my EB instances but they apparently don't have this feature either.

My final solution was to create a custom vm images (AMI) with the SSL cert installed an the https binding already added. If I do this I can deploy the ElasticBeanstalk image with my SSL stuff already setup. Doing this then allows me to scale up or down without any configuration.

于 2012-12-04T04:58:34.063 回答
1

对于我的 ASP.NET MVC 项目和各种 OAuth 提供程序,这对我来说是一个特别的问题。基本上任何应该使用 https 的东西都在 Elastic Beanstalk 下被破坏了。我尝试通过寻找 X-Forwarded-Proto HTTP 标头来围绕它进行编码,但它非常讨厌。所以我真的希望 SSL 直接连接到我的 EC2 实例。

我可能花了 3 小时才弄清楚如何在不使用 AMI 的情况下做到这一点,所以希望这对某人有所帮助。

我之前尝试过自定义 AMI 方法,虽然它有效,但它存在两个问题:

  1. 我必须修补和维护自己的 AMI,这很耗时。如果我使用标准图像,我可以在有更新的图像可用时重建环境。
  2. 我无法对我的配置设置进行源代码控制——它们只是嵌入在云中某处的不透明 AMI 中。

我从这篇文章中改编了这个。

首先,您需要在您的 Visual Studio Web 项目的根目录中添加一个名为: 的目录.ebextensions

在其中创建一个名为environment.config- 我们将在此处使用 YAML 的文本文件,因此不要在 Visual Studio 中编辑它,以防它认为它是应用程序配置文件并添加选项卡 - YAML 对空格敏感。该文件的语法记录在 Amazon 上

我的文件有许多其他用于调整 IIS 的设置,但相关位如下所示:

container_commands:
  site_add_ssl_binding:
    command: PowerShell -ExecutionPolicy Bypass -File "C:\\inetpub\\wwwroot\\.ebextensions\\ssl.ps1"

这将执行一个名为ssl.ps1. 所以让我们在.ebextensions目录中创建它:

# If there is no existing SSL binding
if ( -not(Get-WebBinding "Default Web Site" -Port 443) ) {

    # Import the .pfx file into the certificate store
    $securepwd = ConvertTo-SecureString -String "YOUR_PFX_PASSWORD_HERE" -Force -AsPlainText
    $cert = Import-PfxCertificate -FilePath C:\inetpub\wwwroot\.ebextensions\my-certificate.pfx cert:\localMachine\my -Password $securepwd

    # Create site binding in IIS
    New-WebBinding -Name "Default Web Site" -IP "*" -Port 443 -Protocol https
    New-Item IIS:SslBindings\0.0.0.0!443 -value $cert
}

执行时,此命令会将 .pfx 文件导入证书存储区,然后在您网站的端口 443 上创建 SSL 绑定。

使用我引用的原始代码,我遇到了各种不可靠的字符编码问题。因此,如果您复制/粘贴此示例但它不起作用,您可以通过远程连接到您的 EC2 实例、打开命令提示符并直接执行命令来对其进行测试:PowerShell -ExecutionPolicy Bypass -File "C:\inetpub\wwwroot\.ebextensions\ssl.ps1"

您还需要将 .pfx 文件添加到.ebextensions目录中。在 Visual Studio 中,确保所有文件都包含在项目中,并具有内容的构建操作(提示在解决方案资源管理器中选择文件并按 F4)。解决方案资源管理器应如下所示:

  • 网络项目.csproj
    • .ebextensions
      • 环境配置
      • 我的证书.pfx
      • ssl.ps1
  • ...

然后使用AWS Toolkit for Visual Studio,右键单击您的项目并选择Publish to AWS并按照提示操作。这会将您的部署包上传到您的 Elastic Beanstalk 环境并进行安装。您的自定义将在部署期间执行,或者在配置新的 EC2 实例时执行。

成功执行后,该.ebextensions目录将被删除。

如果不想在 Visual Studio 项目中包含 .pfx 文件, 原始示例使用 PowerShell 从 S3 实例下载 .pfx 文件。您还可以通过引用 Elastic Beanstalk 环境变量来避免在 .ps1 中嵌入密码。

要使此端到端工作,您还需要:

  1. 将负载均衡器配置为将 443 流量转发到 EC2 实例上的端口 443 - 默认切换到端口 80。
  2. 在负载均衡器之外配置安全组以允许 443 流量。
  3. 将安全组配置到 EC2 实例中以允许 443 流量。
于 2015-01-26T01:09:48.943 回答
0

对于某些实例类型,您可以通过配置文件配置 Elastic Beanstalk 应用程序服务器。您可以使用此技术来启用 SSL。

有关示例配置,请参阅从 Elastic Beanstalk 应用程序实例提供 HTTPS 。

于 2013-04-09T17:18:46.673 回答