В конкретном случае я расскажу, как бесплатно получить и настроить SSL
сертификат от отличного проекта Let’s Encrypt для панели управления
Vesta. Предполагаю, что у вас установлен Git и вы используете CP Vesta.
Если Git не установлен, то его нужно установить. Все команды я выполняю
под системой CentOS 6.x Для других сборок, суть не меняется.
Для максимального удобства можно создать bash скрипт, который можно назвать, например, ssl.sh:
#!/bin/bash
USERNAME = 'username'
DOMAIN = 'mydomain.com'
cd /usr/local
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
mkdir -p /etc/letsencrypt/webroot
ln -s /usr/local/letsencrypt-vesta/letsencrypt.conf /etc/httpd/conf.d/letsencrypt.conf
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
service httpd restart
yum install at
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. Для этого в конфиге nginx.conf для конкретного сайта прописываете строчку ниже server_name:
return 301 https://$host$request_uri;
Сертификат будет действителен только 90 дней. Поэтому, последние строки в
скрипте делают возможным получать новый сертификат каждые 60 дней в
автоматическом режиме.
Если вы используете фреймворк Laravel 5.4, то вы столкнетесь с
трудностью, что все ваши изображения и ссылки не работают через https, а
продолжают использовать http протокол. О чем незамедлительно будет
показана ошибка для пользователя.
Для решения этой проблемы есть простое и элегантное решение. Нужно всего-навсего «форсировать» ссылки в AppServiceProvider.php:
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// If production site.
if (env('APP_ENV') === 'production') {
// Change all links to https.
\URL::forceScheme('https');
}
}
Суть форсирования заключается в автоматической замене всех ссылок на новый протокол, что видно из кода.
В Laravel 5.3 использовался старый метод
\URL::forceSchema('https');
Вот и все. Хотите проделать этот фокус для разных своих сайтов, то просто меняете домен в скрипте на нужный.
Что мы имеем в финале? Запуск одного скрипта одной строчкой: sh ssl.sh И
ваш сайт уже работает по защищенному протоколу, без никому ненужной
головной боли. Всем удачи.
П.С. В последней версии Vesta уже внедрили сертификат от LE. Так что все стало вообще проще. Достаточно только включить SSL из панели и выбрать флажок сертификата. Обновляйте свою панель и пользуйтесь чудесной возможностью получить бесплатный SSL.
Комментарии (0):