Как бесплатно добавить SSL/TLS сертификат и HTTPS протокол на сайт

2
2677

Необязательно покупать сертификат SSL/TLS, чтобы установиться на сайт и включить протокол HTTPS. Можно использоваться и бесплатный вариант. Я рекомендую воспользоваться SSL/TLS от Let’s Encrypt.

Устанавливаем клиент Let’s Encrypt на сервер

Нужно воспользоваться SSH.

Сначала установим наш клиент
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Если у вас не установлен git, то либо установите его следующей командой:
apt-get install git

Нужно проверить все ли у нас получилось

Вводим команду по SSH

./letsencrypt-auto --help

Должно получить так

Устанавливаем Let’s Encrypt на сервер

Ура получилось.

Создаем SSL сертификат для HTTPS протокола на сайт

Перейдем к созданию сертификата Let’s Encrypt. Для этого сначала необходимо остановить nginx:

service nginx stop

и запустить команду создания SSL сертификата:

./letsencrypt-auto certonly --standalone -d pronets.ru -d www.pronets.ru

Если все правильно сделали появиться окно без ошибок

 

Папка с файлами SSL сертификата
В /etc/letsencrypt/live/pronets.ru/ будут следующие файлы:

privkey.pem — приватный ключ для сертификата. В Apache он используется в директиве SSLCertificateKeyFile. В Nginx используется в директиве ssl_certificate_key.

cert.pem — сертификат сервера. Его требует директива Apache SSLCertificateFile.

chain.pem — связка всех сертификатов, которые обслуживаются браузером, за исключением cert.pem. Используется Apache SSLCertificateChainFile.

fullchain.pem — вся связка сертификатов (объединение chain.pem и cert.pem). Используется в Nginx для ssl_certificate.

Все эти файлы понадобятся если нужно будет устанавливать через панель ispmgr

Все запускаем nginx

service nginx start

Настройка HTTPS (SSL/TLS) в Nginx

/etc/nginx/vhosts/userName/
server {
#...
ssl on;
ssl_certificate /etc/letsencrypt/live/devreadwrite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/devreadwrite.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
listen server_ip:443 ssl;
listen server_ip:80;
}

После изменения перезапускам Nginx:

nginx service reload или nginx service restart

Если у Вас панель Ispmgr, то можно сделать редирект прямо от туда. Или ручками

Nginx, 301 редирект с протокола http на https

 

server {

#…

# force https-redirects
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
}

 

Настройка HTTPS (SSL/TLS) в Apache

Apache для сайта (обычно это: /etc/apache2/vhosts/userName/)

Нужно добавить строки на сертификат

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem

ServerAdmin #… webmaster@localhost
DocumentRoot #… /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem

#…

301 редирект с протокола http на https в Apache

код в файл .htaccess вашего сайта:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Как продлить сертификат

./letsencrypt-auto renew

  • alex

    Так же можно посмотреть как это было сделано
    habrahabr. ru /post/301558/

  • alex

    Для Instantcms я прописал вот такой код

    # Initialization
    AddDefaultCharset utf-8
    Options -Indexes
    RewriteEngine on
    RewriteBase /

    # HTTP-HTTPS

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # Hide text files
    RewriteRule ^.htaccess$ - [F]
    RewriteRule ^credits.txt$ - [F]
    RewriteRule ^readme.txt$ - [F]
    RewriteRule ^license.(.*).txt$ - [F]

    # Remove trailing slash from URLs
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ /$1 [R=301,L]

    # Sitemaps
    RewriteRule ^sitemap(.*).xml$ /cache/static/sitemaps/sitemap$1.xml [L]

    # Engine routing
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php [L]