Free SSL для CP Vesta — легко. И SSL для Laravel

Привет, друзья. Не для кого не открою секрет, что работа сайтов через https протокол становится не просто нормой жизни, а уже и обязательным условием. Но очень многие сайты все еще продолжают работать через незащищенный http протокол. Однако, большое количество владельцев сайтов уже подумывает о переходе на SSL. При поиске информации о том, как приобрести сертификат безопасности, владельцы ресурсов сталкиваются с рядом трудностей. Это и выбор типа сертификата, цена, необходимость в сложной регистрации, подтверждение своей личности и другое. Многих, неискушенных пользователей, это отталкивает, отодвигая переход на безопасный протокол в долгий ящик. Но выход есть! Простой, бесплатный и быстрый.

В конкретном случае я расскажу, как бесплатно получить и настроить SSL сертификат от отличного проекта Let’s Encrypt для панели управления Vesta. Предполагаю, что у вас установлен Git и вы используете CP Vesta. Если Git не установлен, то его нужно установить. Все команды я выполняю под системой CentOS 6.x Для других сборок, суть не меняется.

Для максимального удобства можно создать bash скрипт, который можно назвать, например, ssl.sh:

#!/bin/bash
# How to Install Let’s Encrypt Certificate on VestaCP

USERNAME = 'username'
DOMAIN = 'mydomain.com'

# Go to folder
cd /usr/local

# Clone git repositories
git clone https://github.com/letsencrypt/letsencrypt.git
git clone https://github.com/interbrite/letsencrypt-vesta.git
git clone https://github.com/certbot/certbot.git

# Create the “webroot” directory where Let’s Encrypt will write the files needed for domain verification.
mkdir -p /etc/letsencrypt/webroot

# Now also symlink the Apache conf file in your Apache conf.d directory.
ln -s /usr/local/letsencrypt-vesta/letsencrypt.conf /etc/httpd/conf.d/letsencrypt.conf

# Symlink letsencrypt-auto and letsencrypt-vesta in /usr/local/bin for easier access. 
ln -s /usr/local/letsencrypt/letsencrypt-auto /usr/local/bin/letsencrypt-auto
ln -s /usr/local/letsencrypt-vesta/letsencrypt-vesta /usr/local/bin/letsencrypt-vesta

# Restart server
service httpd restart

# Install at
yum install at

# Command for get SSL certificate and automatic Renewals every 60 days
letsencrypt-vesta -a 60 $USERNAME $DOMAIN

Пару слов пояснений. В переменной USERNAME необходимо указать пользователя для которого будет получен сертификат. Для Vesta по умолчанию — это admin. DOMAIN — это переменная домена, для которого вы хотите получить сертификат. Указывать нужно голый хост, например, site.com

Далее все идет, как по маслу. Произойдет переход в нужную для установки директорию, будут клонированы репозитории с github. Будет создана директория для хранения файлов настроек. После чего будут созданы ссылки конфигов и будет перезапущен Apache сервер.

После перезапуска сервера произойдет запрос на сервер Let’s Encrypt для формирования и получения сертификата для конкретного пользователя и домена. Все сертификаты и конфиги будут созданы для Vesta полностью автоматически, а сайт в настройках будет помечен, как поддерживающий работу по SSL.

Если ваш пользователь имеет имя admin, то в директории /home/admin/conf/web будут скопированы сертификаты для указанного вами домена, плюс появится два дополнительных конфига: shttpd.conf и snginx.conf. Первый для Apache, второй для Nginx. Если необходимо поправить пути для вашей root директории, то это можно сделать в этих конфигах, так как пути будут прописаны по умолчанию к public_html.

Итак, заходите по ssh на свой сервер под root. Создаете скрипт или просто вводите команды вручную. Если создали скрипт, то не забудьте поставить права на исполнение — 755. Запускаете скрипт и вуаля. Ваш сайт уже имеет сертификат. Останется только сделать 301 редирект с http на https.

Сертификат будет действителен только 90 дней. Поэтому, последние строки в скрипте делают возможным получать новый сертификат каждые 60 дней в автоматическом режиме.

Если вы используете фреймворк Laravel 5.3, то вы столкнетесь с трудностью, что все ваши изображения и ссылки не работают через https, а продолжают использовать http протокол. О чем незамедлительно будет показана ошибка для пользователя.

Для решения этой проблемы есть простое и элегантное решение. Нужно всего-навсего «форсировать» ссылки в AppServiceProvider.php:

    public function boot()
    {
        // If production site.
        if (env('APP_ENV') === 'production') {
            // Change all links to https.
            \URL::forceSchema('https');
        }
    }


Суть форсирования заключается в автоматической замене всех ссылок на новый протокол, что видно из кода.

Вот и все. Хотите проделать этот фокус для разных своих сайтов, то просто меняете домен в скрипте на нужный.

Что мы имеем в финале? Запуск одного скрипта одной строчкой: sh ssl.sh И ваш сайт уже работает по защищенному протоколу, без никому ненужной головной боли. Всем удачи.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 25

    0
    При поиске информации о том, как приобрести сертификат безопасности, владельцы ресурсов сталкиваются с рядом трудностей. Это и выбор типа сертификата, цена, необходимость в сложной регистрации, подтверждение своей личности и другое.

    В чём проблема? Про тип сертификата расскажут на каждом углу (на хабре уже было N раз), подтверждение личности/компании нужно только для OV и выше, которое отпугнёт ценой тех, кому это не нужно. Сложной регистрации у большинства реселлеров уже давно нет.

      +3
      Скоро «Установка SSL сертификата от Lets'encrypt c помощью jQuery»
        0
        Если вы используете фреймворк Laravel 5.3, то вы столкнетесь с трудностью, что все ваши изображения и ссылки не работают через https, а продолжают использовать http протокол. О чем незамедлительно будет показана ошибка для пользователя.


        Это что за бредерунда? 9 проектов и везде всё хорошо. Может, не в laravel дело?
          0

          Он корретно детектит SSL на nginx, но на апаче может отвалится в некоторых конфигурациях (ловили проблему на elastic beanstalk).

          +3
          Камрады из VestaCP и народ на Гитхаб трудились-трудились, чтобы все делалось кнопкой, проще и доступнее. А вы костыли принесли :) Не поймите неправильно, свой велосипед всегда интереснее, но… не проще и в перспективе не безглючнее.
            0
            Так это и есть решение от камрадов с Гитхаб. https://github.com/interbrite/letsencrypt-vesta — это вполне себе толковое решение, написанное на питоне конкретно для весты. А по кнопочке веста создает не подписанный сертификат, от которого толку ноль. Если бы веста из коробки делала валидный сертификат, то и проекта на гитхабе не было бы, и этой статьи тоже. Веста — штука хорошая, но не такая уж и продвинутая, как хотелось бы. Развитие очень слабое, нет вообще поддержки разных версий пыхи и баз. До сих пор ставят пыху 5.5 из коробки, и кучу всякого статья. После установки нужно работать напильником. Но все равно — это, пожалуй, лучшее решение панелей, простое, как угол дома, но со всем необходимым.
              +2
              А по кнопочке веста создает не подписанный сертификат, от которого толку ноль

              Что-что? Вы вот сейчас так неаккуратно пошутили?

              letsencrypt-vesta появилась чуть раньше поддержки из коробки, однако не повод сейчас использовать костыль. Поэтому причинно-следственная связь между валидностью и проектом на гитхабе, толкуется вами не очень верно.

              До сих пор ставят пыху 5.5 из коробки, и кучу всякого статья

              Вы же в курсе, что причина этого — репы самой ОС, к которым разработчики стараются относиться крайне бережно.

              но не такая уж и продвинутая, как хотелось бы


              Так ведь добро пожаловать :)
              Участвуйте и дело пойдет быстрее.

                0
                На всякий случай, вот пример LE на VestaCP:
                https://demosite.vestacp.com/
                  0
                  Да, вы правы. Поддержку уже запилили. Только что обновил свою весту и включил галку, все заработало. Процесс был тот же самый. Единственное отличие, так это обновление сертификата в весте по крону. А так, все тоже.
                    0
                    Конечно тоже самое — одни и те же механизмы.

                    Кстати, не так давно Vesta переделали сертификаты с StartSSL на LE на основном сайте и на форуме. Так что шагает и шагать будет LE ;-)
                      0
                      Это очень хорошо. Я недавно натолкнулся на ряд статей, где пользователи писали, что StartSSL без объяснения отзывал сертификаты. Мол причина в том, что они бесплатны только для некоммерческого использования. А команда LE просто молодцы. Очень серьезно наступили на горло тем, кто продает аналогичные решения.
              +4
              Что я только что прочитал?
                +1
                В последней Vesta CP поддержка Let’s Encrypt уже реализована из коробки.
                  0
                  Честно говоря, только что зашел на документацию по весте и все перерыл там. Но так и не нашел упоминания про использование подписанного Let’s Encrypt сертификата. SSL из коробки в весте с незапамятных времен, только вот сертификат не подписанный и не доверенный. Толку от него было, как с козла молока. Может быть я чего-то не замечаю, тогда киньте мне пожалуйста ссылку, я почитаю.
                    0
                    Взгляните в сторону Perfect-серверов.
                      0
                      пруф только я тут вижу галку с Lets Encrypt Support?
                        0
                        Да, вы правы! Я только что обновил свою весту и у меня тоже появилась эта галка. Но почему-то в документации этого не написали. Спасибо. А еще вопрос, как происходит автообновление сертификата, по крону?
                          0
                          да
                            0
                            В кроне после добавления хоть одного сайта появляется задание
                            sudo /usr/local/vesta/bin/v-update-letsencrypt-ssl
                            Оно и будет обновлять.
                      0
                      Для решения этой проблемы есть простое и элегантное решение. Нужно всего-навсего «форсировать» ссылки в AppServiceProvider.php:
                          public function boot()
                          {
                              // If production site.
                              if (env('APP_ENV') === 'production') {
                                  // Change all links to https.
                                  \URL::forceSchema('https');
                              }
                          }
                      

                      Для тех, кто обновился или будет обновляться до Laravel 5.4: метод forceSchema был переименован в forceScheme.
                        0
                        Спасибо за замечание.
                        0
                        Очень актуальная статья!
                        Я тоже недавно перевел все свои сайты на HTTPS. Использовал сертификат Let’s Encrypt через вот такого посредника — https://www.sslforfree.com/
                        Для тех, у кого есть сайт на Wordpress — для трансформации ссылок в постах можно использовать вот такие запросы к БД:
                        UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://yoursite.com', 'https://yoursite.com');
                        UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.yoursite.com', 'https://www.yoursite.com');
                          0

                          Зачем нужен посредник, если можно взять certbot, первый раз запустить руками и добавить после этого в cron, чтобы через 3 месяца не бегать в мыле, обновляя сертификат руками?

                            0
                            Если нужно например на 1 раз или временно сделать, к примеру в тестовых целях
                            Мне тоже сложно придумать реальный кейс, но подозреваю, что кому-то может пригодится.
                              0

                              Плюс нужно предварительно убедится, что web crypto api поддерживается браузером, провести хотя бы базовый аудит, чтобы убедиться, что приватный ключ не уезжает к ним. И стандартный способ подтверждения — дать им доступ к ftp/sftp. По сравнению со standalone приложением от eff или из репозитория дистрибутива — выглядит куда более печально

                        Only users with full accounts can post comments. Log in, please.