С помощью консоли в настоящее время нет способа назначить сертификат, созданный в диспетчере сертификатов, в среду Beanstalk.
Для этого вам необходимо использовать AWS CLI. Я смог это сделать, и, к счастью, это легко.
Короче говоря, вам нужно:
- создать файл Elb-acm.json и поместите его где-нибудь в вашем веб-корень. Я положил ум прямо в корень сети моего приложения.
- перейти к менеджеру сертификатов и получить ARN идентификатор вашего сертификата
- использовать команду
update environment
, чтобы применить сертификат к среде
aws elasticbeanstalk update-environment --environment-name Your-Environment --option-settings file://PATH-TO-JSON/elb-acm.json
Для меня путь был просто file://elb-ecm.json
так (Я считаю, причина в том, потому что) Я выполнял команду в то время как в корневой папке, и файл находился в том же каталоге This article goes into detail (и работал для меня). Удачи!
Обратите внимание, что вы не должны назначать сертификат непосредственно через консоль Load Balancer (EC2> Load Balancers), потому что балансировщик нагрузки будет сдуваться и воссоздаваться всякий раз, когда вы перестраиваете среду Beanstalk.
Кроме того, убедитесь, что вы настроили сертификат, как хотите, прежде чем применять его в своей среде Beanstalk. Например, если вы хотите, чтобы * .mydomain.com и naked 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);
}
}
}
Tx для этого. Что касается aws cli - мы говорим о «awsebcli» или просто «aws» cli? Я скоро проверю эту процедуру. Между тем мне действительно удалось установить это, изменив EC2> Load Balancer настолько хорошо, что вы упомянули, что это будет заменено на обновления. – drorsun
Довольно уверен, что это главный «aws» cli. Эта статья, которую я связал с Анандом Капуром, неплоха. –