# Работа с SSL

Source: https://docs.sisk-framework.org/ru/docs/ssl.html

Работа с SSL в процессе разработки может быть необходима при работе в контекстах, требующих безопасности, таких как большинство сценариев веб‑разработки. Sisk работает поверх HttpListener, который не поддерживает нативный HTTPS, только HTTP. Тем не менее, существуют обходные пути, позволяющие работать с SSL в Sisk. См. ниже:

## Через Sisk.Cadente.CoreEngine

- Доступно на: Linux, macOS, Windows
- Сложность: легко

Можно использовать экспериментальный движок [**Cadente**](https://docs.sisk-framework.org/ru/docs/cadente.md) в проектах Sisk, не требуя дополнительной настройки на компьютере или в проекте. Вам потребуется установить пакет `Sisk.Cadente.CoreEngine` в ваш проект, чтобы иметь возможность использовать сервер Cadente в сервере Sisk.

Для настройки SSL вы можете использовать методы `UseSsl` и `UseEngine` билдера:

```csharp
using var http = HttpServer.CreateBuilder()
    .UseEngine<CadenteHttpServerEngine>()
    .UseSsl(CertificateHelper.CreateTrustedDevelopmentCertificate("localhost"))
```

> Примечание: этот пакет всё ещё находится в экспериментальной фазе.

## Через IIS в Windows

- Доступно на: Windows
- Сложность: средняя

Если вы используете Windows, вы можете воспользоваться IIS для включения SSL на вашем HTTP‑сервере. Чтобы это работало, рекомендуется предварительно пройти [этот учебник](https://docs.sisk-framework.org/ru/docs/registering-namespace.md), если вы хотите, чтобы ваше приложение слушало хост, отличный от «localhost».

Для этого необходимо установить IIS через компоненты Windows. IIS доступен бесплатно пользователям Windows и Windows Server. Чтобы настроить SSL в вашем приложении, подготовьте SSL‑сертификат, даже если он самоподписан. Далее вы можете посмотреть [как настроить SSL в IIS 7 и выше](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis).

## Через mitmproxy

- Доступно на: Linux, macOS, Windows
- Сложность: легко

**mitmproxy** — это инструмент перехватывающего прокси, позволяющий разработчикам и специалистам по безопасности инспектировать, изменять и записывать HTTP и HTTPS трафик между клиентом (например, веб‑браузером) и сервером. Вы можете использовать утилиту **mitmdump** для запуска обратного SSL‑прокси между вашим клиентом и приложением Sisk.

1. Сначала установите [mitmproxy](https://mitmproxy.org/) на ваш компьютер.
2. Запустите ваше приложение Sisk. Для этого примера будем использовать порт 8000 как небезопасный HTTP‑порт.
3. Запустите сервер mitmproxy, чтобы он слушал защищённый порт 8001:

```sh
mitmdump --mode reverse:http://localhost:8000/ -p 8001
```

И всё готово! Вы уже можете получить доступ к вашему приложению по адресу `https://localhost:8001/`. Ваше приложение не обязано быть запущено, чтобы вы могли запустить `mitmdump`.

В качестве альтернативы вы можете добавить ссылку на [mitmproxy helper](https://github.com/sisk-http/core/tree/main/extensions/Sisk.Helpers.mitmproxy) в ваш проект. Это всё равно требует, чтобы mitmproxy был установлен на вашем компьютере.

## Через пакет Sisk.SslProxy

- Доступно на: Linux, macOS, Windows
- Сложность: легко

> [!IMPORTANT]
>
> Пакет Sisk.SslProxy устарел в пользу пакета `Sisk.Cadente.CoreEngine` и более не будет поддерживаться.

Пакет Sisk.SslProxy — простой способ включить SSL в вашем приложении Sisk. Однако это **крайне экспериментальный** пакет. Работа с ним может быть нестабильной, но вы можете стать частью небольшого процента людей, которые помогут сделать этот пакет пригодным и стабильным. Чтобы начать, вы можете установить пакет Sisk.SslProxy с помощью:

```sh
dotnet add package Sisk.SslProxy
```

> [!NOTE]
>
> Необходимо включить опцию «Include prerelease» в менеджере пакетов Visual Studio, чтобы установить Sisk.SslProxy.

Опять же, это экспериментальный проект, так что даже не думайте о его использовании в продакшене.

В данный момент Sisk.SslProxy может обрабатывать большинство функций HTTP/1.1, включая HTTP Continue, Chunked-Encoding, WebSockets и SSE. Подробнее о SslProxy читайте [здесь](https://docs.sisk-framework.org/ru/docs/extensions/ssl-proxy.md).
