В настоящее время через консоль невозможно назначить сертификат, созданный в диспетчере сертификатов, вашей среде Beanstalk.
Для этого вам нужно будет использовать AWS CLI. Мне это удалось, и, к счастью, это легко.
Короче говоря, вам необходимо:
- создайте файл elb-acm.json и поместите его где-нибудь в корневой каталог. Я помещаю разум прямо в корневой каталог своего приложения.
- зайдите в диспетчер сертификатов и получите arn ID вашего сертификата
- используйте команду
update environment
, чтобы применить сертификат к вашей среде
aws elasticbeanstalk update-environment --environment-name Your-Environment --option-settings file://PATH-TO-JSON/elb-acm.json
Для меня путь был просто file://elb-ecm.json
, поскольку (я полагаю, причина в том, что) я выполнял команду, находясь в корневом веб-каталоге, и файл находился в том же каталоге Эта статья подробно описывает (и работала для меня). Удачи!
Обратите внимание, хотя вы и можете, вам НЕ следует назначать сертификат непосредственно через консоль Load Balancer (EC2> Load Balancers), потому что балансировщик нагрузки будет сдувается и воссоздан заново всякий раз, когда вы перестраиваете среду Beanstalk.
Кроме того, убедитесь, что вы настроили свой сертификат так, как хотите, прежде чем применять его в среде Beanstalk. Например, если вы хотите, чтобы * .mydomain.com и голый mydomain.com были безопасными, сначала убедитесь, что они полностью настроены, поскольку нет простого способа «отменить связь» вашего сертификата с вашей средой после выполнения этих команд. (вам в основном нужно будет полностью закрыть свою среду и создать новую, если я не ошибаюсь в этом сценарии).
Кроме того, вы захотите иметь в своем приложении некоторый код перенаправления для выполнения перенаправления 301 для любого небезопасного запроса, поступающего после настройки вашего сертификата. Чтобы выполнить перенаправление, вам нужно будет искать заголовок X-Forwarded-Proto
во входящем запросе. Если это небезопасно, вам следует перенаправить на безопасный порт. Например, вот как выглядит мой код приложения:
// in production, only allow secure requests (https)
public function performSecureRedirect(rc) {
// based on domain comparison
var isLive = myEnvironmentData.isLive;
// setting up the health check url is important for smooth beanstalk deployments
// beanstalk issues this healthcheck request via a non-secure port
var isAmazonHealthcheckUrl = rc.event eq "system.healthcheck";
if (isLive and not isAmazonHealthcheckUrl) {
var headerData = getHTTPRequestData().headers;
// x-forwarded-proto is a special header
// setup by Amazon ELB (Elastic Load Balancer)
var requestProtocol = getHttpRequestData().headers['x-forwarded-proto'];
var isSecureRequest = requestProtocol eq "https";
if (not isSecureRequest) {
location("https://" & cgi.server_name & cgi.path_info, false, 301);
}
}
}
person
Brian FitzGerald
schedule
06.04.2016