SSL (Secure Sockets Layer) — это криптографический протокол, обеспечивающий безопасную передачу данных между клиентом и сервером. На практике используется современная версия протокола — TLS (Transport Layer Security), но термин SSL в веб-разработке сохраняется в обиходе. Основная цель SSL — защита данных от перехвата и подмены, а также подтверждение подлинности сервера. Для веб-приложений на Fresh это особенно важно, так как большинство приложений обрабатывают пользовательские данные, а также выполняют взаимодействие с внешними API.
Ключевые функции SSL:
SSL-сертификаты различаются по уровню проверки и области действия. Основные типы:
Также различают WildCard-сертификаты, покрывающие все поддомены, и Multi-Domain сертификаты, поддерживающие несколько доменных имён.
Fresh построен на Deno и ориентирован на серверные рендеринг-приложения. Для работы с SSL можно использовать встроенные возможности Deno или сторонние утилиты.
Основные шаги установки сертификата:
Получение сертификата
Настройка 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.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
При работе с HTTPS возможны следующие ошибки:
В Fresh ошибки SSL чаще всего проявляются на этапе запуска сервера, поэтому важно проверять соответствие файлов сертификата и ключа, а также корректность доменного имени.
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-приложений.