# 使用 SSL

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

在开发中使用 SSL 可能是必要的，尤其是在需要安全性的环境下，例如大多数 Web 开发场景。Sisk 基于 HttpListener 实现，而 HttpListener 本身不支持原生 HTTPS，只支持 HTTP。不过，仍有一些变通办法可以让你在 Sisk 中使用 SSL。下面介绍几种方式：

## 通过 Sisk.Cadente.CoreEngine

- 可用平台：Linux、macOS、Windows
- 工作量：容易

可以在 Sisk 项目中使用实验性的 [**Cadente**](https://docs.sisk-framework.org/zh-cn/docs/cadente.md) 引擎，而无需在计算机或项目中进行额外配置。你需要在项目中安装 `Sisk.Cadente.CoreEngine` 包，才能在 Sisk 服务器中使用 Cadente 服务器。

要配置 SSL，可以使用构建器的 `UseSsl` 和 `UseEngine` 方法：

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

> Note: this package is still in the experimental phase.

## 通过 Windows 上的 IIS

- 可用平台：Windows
- 工作量：中等

如果你使用 Windows，可以通过 IIS 为你的 HTTP 服务器启用 SSL。为此，建议先阅读 [此教程](https://docs.sisk-framework.org/zh-cn/docs/registering-namespace.md)，尤其是当你的应用需要监听除 “localhost” 之外的主机时。

要实现此功能，需要通过 Windows 功能安装 IIS。IIS 对 Windows 和 Windows Server 用户免费提供。要在应用中配置 SSL，请准备好 SSL 证书，即使是自签名证书也可以。随后，你可以参考 [在 IIS 7 或更高版本上设置 SSL 的方法](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** 实用程序在客户端和 Sisk 应用之间启动一个反向 SSL 代理。

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 包（已停用）

> [!CAUTION]
>
> Sisk.SslProxy 包已在 NuGet 上停用并弃用。它已无法针对当前的 Cadente API 编译。请勿使用它：改为使用 [Cadente 引擎](#through-the-siskcadentecoreengine) 的原生 SSL 支持。
