我有一个Windows / .NET弹性beanstalk实例,在负载均衡器上设置了SSL证书。默认情况下,这会创建从https / 443转发到http / 80的端口。我想在负载均衡器上将443 / https转发到beanstalk实例上的443 https。
我正在尝试记录here:
我重新配置了相应的EC2实例EC2 - > Load Balancers - > Listeners,以便HTTPS转发到使用我的SSL证书配置的HTTPS,问题是当我尝试发出HTTPS请求之后它只是超时。看起来ElasticBeanstalk实例不喜欢我修改EC2监听器。
有什么想法吗?
答案 0 :(得分:2)
要在LoadBalancer和Elastic beanstalk之间使用SSL,我需要做几件事:
配置EC2 LoadBalancer以将端口443转发到端口443(在SSL上)。我在上面的问题中已经有了这一部分。
在EC2实例上配置IIS,就像使用SSL的任何其他站点一样: 一个)。在IIS中的EC2实例上安装SSL证书。 B)。使用SSL证书添加https / 443绑定。
问题是我期待#2免费。在Windows Azure上,当您在实例上配置证书时,这几乎是免费的,但截至目前,AMZN ElasticBeanstalk for Windows的情况并非如此。
我也希望#2可以编写脚本,这样我就可以扩展或缩小实例而无需手动执行#2。我正在寻找一些简单的方法来绑定我的EB实例上的power-shell脚本,但他们显然也没有这个功能。
我的最终解决方案是创建一个自定义虚拟机映像(AMI),并安装了SSL证书,并添加了https绑定。如果我这样做,我可以使用已设置的SSL内容部署ElasticBeanstalk映像。这样做可以让我在没有任何配置的情况下向上或向下扩展。
答案 1 :(得分:0)
对于某些实例类型,您可以通过配置文件配置Elastic Beanstalk应用服务器。您可以使用此技术启用SSL。
请参阅Serve HTTPS From Elastic Beanstalk Application Instances,例如配置。
答案 2 :(得分:0)
对于我的ASP.NET MVC项目以及各种OAuth提供程序,这是一个特别的问题。基本上任何应该使用https的东西都在Elastic Beanstalk下被破坏了。我试着通过寻找X-Forwarded-Proto HTTP头来编码,但它非常讨厌。所以我真的希望SSL直接进入我的EC2实例。
我可能花了3个小时才弄清楚如何在不使用AMI的情况下做到这一点,所以希望这对某人有所帮助。
我之前尝试过自定义AMI方法,虽然它有效,但它提出了两个问题:
我从this post改编了这个。
首先,您需要将一个目录添加到名为.ebextensions
的Visual Studio Web项目的根目录中。
在其中,创建一个名为environment.config
的文本文件 - 我们将在这里使用YAML,因此如果它认为它是一个Application Config文件并添加了标签,请不要在Visual Studio中编辑它 - YAML是空白敏感。该文件的语法记录为on Amazon。
我的文件有许多用于调优IIS的其他设置,但相关位看起来像这样:
container_commands:
site_add_ssl_binding:
command: PowerShell -ExecutionPolicy Bypass -File "C:\\inetpub\\wwwroot\\.ebextensions\\ssl.ps1"
这将执行名为ssl.ps1
的自定义PowerShell脚本。所以让我们在.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)。解决方案资源管理器应该如下所示:
然后使用AWS Toolkit for Visual Studio,右键单击您的项目并选择Publish to AWS
并按照提示操作。这会将您的部署包上传到您的Elastic Beanstalk环境并进行安装。您的自定义将在部署期间执行,或者在配置新的EC2实例时执行。
成功执行后,.ebextensions
目录将被删除。
如果您不想在Visual Studio项目中包含.pfx文件,original example使用PowerShell从S3实例下载.pfx文件。您还可以通过引用Elastic Beanstalk环境变量来避免在.ps1中嵌入密码。
为了让这个端到端工作,您还需要: