… И до того, как период ожидания закончился
Let's Encrypt - это «некоммерческий центр сертификации, предоставляющий сертификаты TLS 225 миллионам веб-сайтов.
До вчерашнего дня я не знал, что Let's Encrypt имеет ограничение на то, сколько раз вы можете выдавать сертификат для домена или набора доменов в неделю. Я не знал этого ... Я даже не знал, что СМОТРЕТЬ это. Угадайте, когда я узнал о пределе. Верно; когда я его превысил.
TL; DR; Если вы столкнулись с той же проблемой, попробуйте изменить список доменов. Например, если вы ввели свои домены как www.domainname.com и domainname.com, попробуйте добавить test.domainname.com в этот список. (В любом случае хорошо иметь тестовый домен!)
После успешного исправления мне пришло в голову, что я мог бы просто добавить еще один субдомен в список, как я сейчас предлагаю здесь в моем резюме, вместо того, чтобы запускать каждый домен отдельно, что объясняется в этом сообщении, как это сделать. Это сэкономило бы мне время на выяснение того, как изменить файлы Apache, чтобы перенаправление работало, и сделало бы этот пост НАМНОГО короче.
Первый вверх
Я не пытаюсь рассказать вам, как играть с системой; ну, думаю, да, но я надеюсь, что вы сделаете это только после того, как совершите ошибку, которую совершил я, и наткнулись на этот пост.
У них есть предел по какой-то причине. Это некоммерческий проект, финансируемый сообществом, с большим объемом трафика - 225 миллионов сайтов подключены к SSL через Let's Encrypt. Я не понимал, что делаю, когда запускал этот инструмент постоянно; и я согласен с ограничением бесплатного использования шифрования.
Что я делаю?!
Я создаю сайт Django. Я создал МНОГО сайтов, но это мой первый сайт на Django. Это мой первый хостинг через AWS Lightsail с использованием Bitnami, и я также впервые использую Let's Encrypt для создания SSL-сертификата (с помощью инструмента Bitnami bncert). Однако это НЕ первый раз, когда я устроил беспорядок.
Я решил автоматизировать всю настройку, потому что знал, что мне придется делать это более одного раза. Я ни в коем случае не буду забывать вводить все эти команды в правильном порядке. Скажем так, однообразная работа - не моя сильная сторона. И хотя он может где-то существовать, я не мог найти способ полностью автоматизировать то, что хотел автоматизировать.
Конечно, автоматизировать что-то ТАКЖЕ означает запускать это несколько раз, проверять результат, вносить изменения, мыть, полоскать и повторять. Я говорю себе, что это лучший вариант повторения, потому что каждый раз он немного отличается. Я также точно знаю, что делаю, НАМНОГО лучше, чем копирование и вставка инструкций из других мест в свой CLI (интерфейс командной строки).
За несколько дней я автоматизировал всю установку, вплоть до редактирования конфигурации Apache и установки сертификата. Вчера я автоматизировал редактирование конфигурации Apache. Это было довольно просто… а потом?
Битнами BNCERT-ИНСТРУМЕНТ - UhOh
Мне потребовалось несколько попыток, чтобы автоматизировать команду bncert-tool. Помимо того, чтобы заставить скрипт работать, что заняло немного времени, я фактически запускал инструмент пять раз, если быть точным, потому что он не удался на # 6.
Первый раунд запускал его вручную, чтобы увидеть, какие входные данные ему нужны. Затем я использовал сценарий, чтобы передать эти ответы в сценарий bncert-tool.
# What I started with echo “www.$projname.com $projname.com Y Y n Y $su_email Y \\n “ | sudo /opt/bitnami/bncert-tool # figuring out to use \\n cost me some time and possibly a round - I initially had \n. It was supposed to be an Enter, but whatever it sent when I had \n, reported an error.
А затем, поскольку AWS Lightsail / Bitnami / кто бы то ни было, собрал последний установочный пакет, инструмент bncert изменился. Поэтому, когда я его запустил, он задал мне дополнительный вопрос - хочу ли я обновить инструмент? Поскольку я не передал этот ответ в свой сценарий, остальные ответы на вопросы были не по порядку. Еще один раунд.
Я добавил Y, чтобы обновить его, не осознавая значения предупреждения «Вам придется запустить его вручную». Видя, что я был в сценарии, я просто тупо подумал, что он будет продолжаться. Нет. Он вышел. Итак, теперь инструмент обновился. Может, был другой набор вопросов? Мне лучше проверить, прежде чем снова пропихивать скрипт. Этот ручной запуск инструмента был еще одним раундом.
Я приспособился к выходу из обновления инструмента, дважды вызвав его в своем скрипте. В первый раз ему просто передано «Y» для обновления. Второй вызов прошел на него все остальные ответы.
# This is what I had before the next issue...stay tuned... echo "Y" | sudo /opt/bitnami/bncert-tool echo "www.$projname.com $projname.com Y Y n Y $su_email Y \\n " | sudo /opt/bitnami/bncert-tool
Он ошибся, сказав, что не может найти то, что ему нужно. Я посмотрел, а нужный файл действительно был. Я снова запустил его вручную с теми же ответами, что и в коде, и он работал нормально. Еще один раунд.
Хм. Мне просто пришлось бы написать отдельную функцию bash, чтобы получить .bash_aliases в качестве источника, потому что она не будет делать это непосредственно в моем сценарии bash. Что ж, это было так, но он был получен только во время работы этого сценария; чего я не хотел. Я хотел, чтобы bash_aliases был доступен ПОСЛЕ того, как скрипт был запущен.
Во всяком случае, только что сделав это, я подумал, что, может быть, мне и здесь нужно сделать то же самое. Еще один раунд ... или я так подумал ... потому что на этот раз меня выгнали из обработки за выдачу слишком большого количества сертификатов. Оглядываясь назад, я понимаю, что теперь, когда я прочитал намного больше, их доводы, и я это заслужил.
Кстати, вот код автоматизации, который, как я уверен, БУДЕТ работать. Может быть.
# What I ended up with. This updates the tool, creates a script to run it (because I was having trouble getting it to run directly after the update), and runs it. echo "Y" | sudo /opt/bitnami/bncert-tool cat << EOF >> ~/run_bncert_tool.sh #!/usr/bin/bash echo "www.$projname.com $projname.com Y Y n Y $su_email Y \\n " | sudo /opt/bitnami/bncert-tool sudo /opt/bitnami/ctlscript.sh restart EOF sudo chown $USER ~/run_bncert_tool.sh sudo chmod 755 ~/run_bncert_tool.sh source ~/run_bn_cert_tool.sh
bncert-tool никогда ничего не говорил о пределах, пока не ошибся. Я погуглил об ошибке и ТАК узнал подробности.
Ладно, подумал я, просто аннулирую предыдущие. Нет, не решает проблему. Кроме того, он не позволяет мне отозвать, потому что я уже сделал слишком много запросов (ошибка 429). Давайте зашифровать ДЕЙСТВИТЕЛЬНО предоставляет промежуточный URL для большего количества попыток проверить то, что я делал… автоматизация.
Но инструмент bncert является двоичным, поэтому я не могу отредактировать его, чтобы поместить в него промежуточный URL. Мне нужно было найти другой сценарий или выяснить, как запустить его вручную с этим промежуточным URL. И я не знаю, был бы тот же опыт с постановочной версией. Вздох.
Одержимая настойчивость окупается
Я начал пытаться смириться с результатом отсутствия SSL-попыток еще в течение 6 дней. Он даже сказал мне, в какое время я могу вернуться и попробовать еще раз.
Но если я ничто другое, к лучшему или нет, я навязчиво настойчив.
В сообщении об ошибке говорилось одно, что в итоге оказалось секретом исправления… В нем говорилось, что я регистрировал ТОЧНЫЙ набор доменов слишком много раз. Прогулявшись, пообедав и выпив бокал вина… Я придумал, как представить их по отдельности. Предупреждение о спойлере: это сработало ... и тогда я подумал, как лучше это исправить. РЖУ НЕ МОГУ. Конечно
В любом случае, вот что я сделал ...
Думая, что мне удастся выпустить только ОДИН из них, я решил отправить версию без www. Сценарий предупредил меня, что не будет настраивать перенаправление www, потому что www не было в списке доменов. Хорошо. Я принял это.
УСПЕШНО! Что?! Я проверил URL-адрес в браузере, и он оказался безопасным!
Конечно, я испытал удачу… Я запустил его снова, только на этот раз только для домена www. То же самое предупреждение о том, что переадресация не выполняется, я снова принял его. Annnnddd снова УСПЕХ. Вы можете увидеть два новых в верхней части этого списка.
Исправление беспорядка от исправления моего другого беспорядка
Тогда я понял; о, у меня теперь два сертификата; разные. И никакого перенаправления. Я скопировал код переадресации из другого экземпляра, который не удалял, и следующие несколько шагов исправят его.
- Обновите httpd.conf
Я обновил файл httpd.conf и изменил домен на zoombeatz.com вместо www.zoombeatz.com
# httpd.conf removed www from the ServerName ServerName zoombeatz.com:80
2. Добавьте перенаправление без www на www в файл zoombeatz-https-vhosts.conf.
zoombeatz-https-vhosts.conf - The bold part is what I added # END: Support domain renewal when using mod_proxy without Location # BEGIN: Enable non-www to www redirection RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} !^localhost RewriteCond %{HTTP_HOST} !^[0–9]+.[0–9]+.[0–9]+.[0–9]+(:[0–9]+)?$ RewriteCond %{REQUEST_URI} !^/\.well-known RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=permanent,L] # END: Enable non-www to www redirection
3. Добавьте перенаправление без www на www в zoombeatz-vhosts.conf
zoombeatz-vhosts.conf - when I was done with it. The bold part is what I added. # END: Support domain renewal when using mod_proxy without Location # BEGIN: Enable HTTP to HTTPS redirection RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} !^localhost RewriteCond %{HTTP_HOST} !^[0–9]+.[0–9]+.[0–9]+.[0–9]+(:[0–9]+)?$ RewriteCond %{REQUEST_URI} !^/\.well-known RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L] # END: Enable HTTP to HTTPS redirection # BEGIN: Enable non-www to www redirection RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} !^localhost RewriteCond %{HTTP_HOST} !^[0–9]+.[0–9]+.[0–9]+.[0–9]+(:[0–9]+)?$ RewriteCond %{REQUEST_URI} !^/\.well-known RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=permanent,L] # END: Enable non-www to www redirection
4. Перезагрузите Apache, задержите дыхание… проверьте браузер… Сработало! Ух!
Заворачивать
Усовершенствованием bncert-tool было бы добавление предупреждения о том, что нельзя запускать этот инструмент, пока вы НЕ ГОТОВЫ выдать сертификат для REALZ. Инструмент промежуточного тестирования также был бы отличным для людей, автоматизирующих настройку, как я, хотя я не знаю, имитировал бы он тот же процесс, включая вопрос об обновлении.
Усовершенствованием Let's Encrypt было бы то, что кто-то, кто, как и я, получил единовременную плату в размере, скажем, 25 долларов, получил бы еще один шанс, прежде чем им придется ждать свои 7 дней. Это принесло бы компании Let’s Encrypt доход и сэкономило бы таким людям, как я, кучу времени на ожидание или поиск пути решения этой проблемы.
Положительным моментом всего этого является то, что я узнал о сертификатах SSL и других связанных темах гораздо больше, чем мог бы в противном случае.
Когда моя неделя истечет, я вернусь на сайт Let’s Encrypt, чтобы отозвать все эти неиспользованные сертификаты. Я опубликую об этом, когда пройду через этот процесс, так что, если вы сделаете ту же первоначальную ошибку, что и я, вы тоже сможете убрать за собой. Надеюсь, я не совершу новых ошибок, не ошибившись в первых ошибках, но я бы не стал на это делать ставку.
Кроме того ... как я сказал в резюме вверху, после того, как я сделал все это, пока писал этот пост ... мне пришло в голову, что я мог просто отправить сразу три домена, а не два по отдельности. Это соответствовало бы их требованию, чтобы список доменов был «другим», и мне бы не пришлось проделывать все эти обезьяны с файлами conf.
Может, я взорву свой недавно полученный экземпляр и попробую это ... Шучу. Я думаю…. :)
ОБНОВЛЕНИЕ: Я сделал это ... После этого я создал еще один экземпляр ... и на этот раз я запустил инструмент bncert с четырьмя доменами вместо двух. Мне не нужно было обновлять какие-либо файлы conf, и теперь у меня есть четыре домена, защищенных SSL: промежуточный, тестовый, www и без www.
Надеюсь, это кому-то поможет!
Ресурсы
Вы можете получить список сертификатов, выданных для вашего зарегистрированного домена, выполнив поиск на crt.sh, который использует общедоступные журналы Прозрачность сертификатов.