Установка SSL сертификата на Ubuntu - пошаговая инструкция 2024 | AdminWiki

Установка SSL на Ubuntu: Полное руководство для разработчиков и DevOps

18 декабря 2025 8 мин. чтения #https настройка #lets encrypt ubuntu #ssl сертификат #ubuntu ssl #web сервер #безопасность сайта

Представь, что твой сайт работает по HTTP — это как отправлять открытую почтовую открытку через интернет. Любой может прочитать содержимое. SSL/TLS шифрует эту "открытку", превращая её в защищённый конверт. В этой статье я, как Senior DevOps, покажу тебе все этапы установки SSL на Ubuntu — от базовых понятий до продвинутых настроек.

Что такое SSL и зачем он нужен?

SSL (Secure Sockets Layer) и его преемник TLS (Transport Layer Security) — это криптографические протоколы, которые обеспечивают безопасную передачу данных между клиентом и сервером. Основные преимущества:

  • Шифрование данных — защита от перехвата информации
  • Аутентификация — подтверждение подлинности сервера
  • Целостность данных — гарантия, что данные не были изменены
  • SEO-преимущества — Google ранжирует HTTPS-сайты выше
  • Доверие пользователей — браузер показывает "безопасное соединение"
Важно: С 2018 года Chrome и Firefox помечают HTTP-сайты как "небезопасные". SSL стал стандартом де-факто для любого веб-проекта.

Подготовка Ubuntu сервера к установке SSL

Перед тем как начать установку SSL на Ubuntu, убедись, что у тебя есть:

  • Ubuntu 20.04 LTS или новее (рекомендуется 22.04 LTS)
  • Установленный и настроенный веб-сервер (Apache или Nginx)
  • Доменное имя, указывающее на IP-адрес твоего сервера
  • Открытые порты 80 (HTTP) и 443 (HTTPS) в firewall

Обновление системы и установка зависимостей

Давай начнём с базовой подготовки системы:

bash
# Обновляем пакеты системы
sudo apt update
sudo apt upgrade -y

# Устанавливаем необходимые утилиты
sudo apt install -y curl wget git nano

# Проверяем версию Ubuntu
lsb_release -a

Установка SSL сертификата Let's Encrypt на Ubuntu

Let's Encrypt — это бесплатный, автоматизированный и открытый центр сертификации. Идеальное решение для большинства проектов. Мы будем использовать Certbot — официальный клиент Let's Encrypt.

Установка Certbot

bash
# Добавляем репозиторий Certbot
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:certbot/certbot
sudo apt update

# Устанавливаем Certbot
sudo apt install -y certbot python3-certbot-apache  # Для Apache
# ИЛИ
sudo apt install -y certbot python3-certbot-nginx   # Для Nginx
Внимание: Выбирай пакет в зависимости от твоего веб-сервера. Не устанавливай оба одновременно, если не используешь оба сервера.

Получение SSL сертификата

Теперь получим сертификат для твоего домена. Замени example.com на свой домен:

bash
# Для Apache
sudo certbot --apache -d example.com -d www.example.com

# Для Nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot задаст несколько вопросов:

  • Email для уведомлений о истечении срока
  • Согласие с условиями обслуживания
  • Предпочтение по redirect с HTTP на HTTPS (рекомендуется выбрать вариант 2)

Ручная установка SSL на Ubuntu (без Certbot)

Иногда нужен больший контроль. Давай разберем ручной метод установки SSL на Ubuntu:

Создание директории для сертификатов

bash
sudo mkdir -p /etc/ssl/example.com
sudo chmod 700 /etc/ssl/example.com

Размещение сертификатов

Помести свои сертификаты (полученные от хостинга или CA) в созданную директорию:

bash
# Обычно у тебя будет три файла:
# 1. example.com.crt  - основной сертификат
# 2. example.com.key  - приватный ключ
# 3. ca_bundle.crt    - цепочка доверия (интермедиат)

# Копируем файлы
sudo cp example.com.crt /etc/ssl/example.com/
sudo cp example.com.key /etc/ssl/example.com/
sudo cp ca_bundle.crt /etc/ssl/example.com/

# Устанавливаем правильные права
sudo chmod 600 /etc/ssl/example.com/example.com.key

Настройка веб-серверов для работы с SSL

Настройка Apache для SSL на Ubuntu

Создадим или отредактируем конфигурационный файл:

bash
sudo nano /etc/apache2/sites-available/example.com-ssl.conf
config
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    SSLEngine on
    SSLCertificateFile /etc/ssl/example.com/example.com.crt
    SSLCertificateKeyFile /etc/ssl/example.com/example.com.key
    SSLCertificateChainFile /etc/ssl/example.com/ca_bundle.crt

    # Настройки безопасности
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
    SSLHonorCipherOrder on
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>
bash
# Активируем SSL модуль и сайт
sudo a2enmod ssl
sudo a2ensite example.com-ssl.conf

# Перезапускаем Apache
sudo systemctl restart apache2

Настройка Nginx для SSL на Ubuntu

config
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/ssl/example.com/example.com.crt;
    ssl_certificate_key /etc/ssl/example.com/example.com.key;
    ssl_trusted_certificate /etc/ssl/example.com/ca_bundle.crt;

    # Modern SSL configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # HSTS
    add_header Strict-Transport-Security "max-age=63072000" always;

    root /var/www/example.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}
bash
# Проверяем конфигурацию Nginx
sudo nginx -t

# Перезагружаем Nginx
sudo systemctl reload nginx

Автоматическое обновление SSL сертификатов

Сертификаты Let's Encrypt действительны 90 дней. Настроим автоматическое обновление:

bash
# Тестируем автоматическое обновление
sudo certbot renew --dry-run

# Добавляем задание в cron
sudo crontab -e

Добавь в конец файла crontab:

cron
# Обновление SSL сертификатов каждый день в 3:00
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
# Или для Apache:
# 0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload apache2"

Проверка установки SSL на Ubuntu

Убедимся, что всё работает правильно:

bash
# Проверяем SSL соединение
openssl s_client -connect example.com:443 -servername example.com

# Проверяем цепочку сертификатов
curl -I https://example.com

# Используем онлайн-инструменты:
# 1. SSL Labs (https://www.ssllabs.com/ssltest/)
# 2. Why No Padlock? (https://www.whynopadlock.com/)
# 3. SSL Checker (https://www.sslshopper.com/ssl-checker.html)

Сравнение методов установки SSL на Ubuntu

Метод Сложность Стоимость Автообновление Лучше для
Let's Encrypt (Certbot) Низкая Бесплатно Да Стартапы, блоги, тестовые среды
Ручная установка Высокая Зависит от CA Нет Корпоративные проекты, EV сертификаты
Панели управления (cPanel, Plesk) Очень низкая Бесплатно/Платно Зависит от панели Хостинг-провайдеры, shared hosting

Частые проблемы и их решение

Проблема 1: "SSL_ERROR_RX_RECORD_TOO_LONG" в браузере
Решение: Проверь, что сервер слушает порт 443 и SSL конфигурация корректна
Проблема 2: Сертификат не доверенный (самоподписанный)
Решение: Убедись, что цепочка доверия (CA bundle) правильно указана в конфигурации
Проблема 3: Ошибка "certificate has expired"
Решение: Обнови сертификат: sudo certbot renew

Часто задаваемые вопросы (FAQ)

Как проверить срок действия SSL сертификата на Ubuntu?

Используй команду: echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates. Это покажет даты начала и окончания действия сертификата.

Можно ли использовать один SSL сертификат для нескольких доменов?

Да, для этого нужен Wildcard или Multi-Domain (SAN) сертификат. Let's Encrypt поддерживает Wildcard сертификаты: sudo certbot certonly --manual -d \"*.example.com\" -d example.com

Как перенести SSL сертификат на другой сервер Ubuntu?

Скопируй три файла: приватный ключ (.key), основной сертификат (.crt) и цепочку доверия (.ca-bundle). Никогда не передавай приватный ключ по незащищенным каналам.

Что делать, если Certbot не может пройти верификацию домена?

1. Проверь DNS записи (A/AAAA) домена. 2. Убедись, что порт 80 открыт. 3. Используй DNS-верификацию: sudo certbot certonly --manual --preferred-challenges dns -d example.com

Профессиональный совет: Всегда настраивай мониторинг срока действия SSL сертификатов. Используй Nagios, Zabbix или простой скрипт с уведомлениями в Telegram/Slack. Просроченный SSL = недоступный сайт.

Заключение

Установка SSL на Ubuntu — критически важный этап развертывания любого веб-проекта. Мы рассмотрели два основных подхода: автоматический с Let's Encrypt/Certbot (идеально для большинства случаев) и ручной (для специфических требований).

Ключевые шаги, которые ты должен запомнить:

  1. Подготовь сервер (обновления, зависимости)
  2. Выбери метод получения сертификата
  3. Настрой веб-сервер (Apache/Nginx)
  4. Настрой автоматическое обновление
  5. Протестируй и мониторь

SSL больше не опция — это обязательное требование для современного веба. Потрать время на правильную настройку один раз, и твой сайт будет безопасным, доверенным и SEO-оптимизированным на долгое время.

Поделиться:
Сохранить гайд? В закладки браузера