SSL сертификаты

SSL (Secure Sockets Layer) — это криптографический протокол, обеспечивающий безопасную передачу данных между клиентом и сервером. На практике используется современная версия протокола — TLS (Transport Layer Security), но термин SSL в веб-разработке сохраняется в обиходе. Основная цель SSL — защита данных от перехвата и подмены, а также подтверждение подлинности сервера. Для веб-приложений на Fresh это особенно важно, так как большинство приложений обрабатывают пользовательские данные, а также выполняют взаимодействие с внешними API.

Ключевые функции SSL:

  • Шифрование данных: предотвращает перехват и чтение информации злоумышленниками.
  • Аутентификация сервера: подтверждает, что клиент соединяется именно с нужным сервером.
  • Целостность данных: защищает данные от изменения в процессе передачи.

Типы SSL-сертификатов

SSL-сертификаты различаются по уровню проверки и области действия. Основные типы:

  1. Domain Validation (DV) — проверка владения доменом. Сертификат выдается быстро, подходит для небольших сайтов и тестовых приложений.
  2. Organization Validation (OV) — помимо домена, проверяется организация, владеющая сайтом. Подходит для коммерческих проектов.
  3. Extended Validation (EV) — строгая проверка компании и домена, отображается в браузере зелёной строкой адреса, повышает доверие пользователей.

Также различают WildCard-сертификаты, покрывающие все поддомены, и Multi-Domain сертификаты, поддерживающие несколько доменных имён.

Генерация и установка SSL в Fresh

Fresh построен на Deno и ориентирован на серверные рендеринг-приложения. Для работы с SSL можно использовать встроенные возможности Deno или сторонние утилиты.

Основные шаги установки сертификата:

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

    • Бесплатные: Let’s Encrypt.
    • Платные: Comodo, DigiCert и другие.
  2. Настройка HTTPS-сервера В Fresh можно использовать Deno HTTP сервер с поддержкой TLS:

import { serveTLS } from "https://deno.land/std@0.200.0/http/server.ts";
import { app } from "./main.ts"; // Fresh приложение

serveTLS(app.fetch, {
  hostname: "0.0.0.0",
  port: 443,
  certFile: "./cert.pem",
  keyFile: "./key.pem",
});

Пояснения к коду:

  • serveTLS создает HTTPS-сервер.
  • certFile и keyFile указывают путь к сертификату и закрытому ключу.
  • app.fetch — точка входа для обработки запросов Fresh.
  1. Перенаправление HTTP на HTTPS Для обеспечения безопасного соединения все HTTP-запросы можно перенаправлять на HTTPS:
import { serve } from "https://deno.land/std@0.200.0/http/server.ts";

serve((req) => {
  const url = new URL(req.url);
  if (url.protocol === "http:") {
    url.protocol = "https:";
    return Response.redirect(url.toString(), 301);
  }
  return app.fetch(req);
}, { port: 80 });

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

Сертификаты Let’s Encrypt действуют 90 дней, поэтому важно настроить автоматическое обновление. Для Fresh можно использовать acme.sh или встроенные Deno скрипты, которые периодически обновляют сертификат и перезапускают сервер.

Пример автоматического обновления через скрипт:

#!/bin/bash
acme.sh --renew -d example.com --fullchain-file ./cert.pem --key-file ./key.pem
systemctl restart fresh-app

Обработка ошибок SSL

При работе с HTTPS возможны следующие ошибки:

  • ERR_CERT_COMMON_NAME_INVALID — несоответствие домена сертификату.
  • ERR_CERT_EXPIRED — сертификат просрочен.
  • ERR_CERT_REVOKED — сертификат отозван.

В Fresh ошибки SSL чаще всего проявляются на этапе запуска сервера, поэтому важно проверять соответствие файлов сертификата и ключа, а также корректность доменного имени.

Рекомендации по безопасности

  • Использовать только актуальные версии TLS (TLS 1.2 или 1.3).
  • Хранить закрытые ключи вне публичного доступа.
  • Настроить HSTS (HTTP Strict Transport Security) для принудительного использования HTTPS:
const handler = (req) => {
  const res = await app.fetch(req);
  res.headers.set("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
  return res;
}
  • Проверять регулярные обновления сертификатов и их срок действия.

Интеграция с сторонними прокси

Если Fresh приложение разворачивается за Nginx или Cloudflare, SSL можно настроить на прокси, а внутренние соединения оставлять HTTP. Это снижает сложность и упрощает управление сертификатами, но при этом важно настроить корректную передачу заголовков X-Forwarded-Proto для обработки редиректов и безопасности.


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