---
title: "Настройки безопасности CDN-ресурса"
description: "Настройки безопасности CDN-ресурса. Документация и инструкции по работе с облачными сервисами Timeweb Cloud."
---

# Безопасность

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Для настройки параметров безопасности:

1.  Перейдите в раздел «Сети» → «CDN» и кликните на нужный ресурс.
2.  На вкладке «Управление» нажмите «Настроить» в блоке «Безопасность».
3.  Включите необходимые опции и настройте их параметры.
4.  Нажмите «Сохранить».

## Редирект с HTTP на HTTPS

Автоматически перенаправляет все запросы с HTTP на защищенный протокол HTTPS.

Это позволяет защищать данные пользователей, соответствовать требованиям браузеров и улучшать показатели SEO.

**Как работает:**

-   Пользователь обращается по протоколу HTTP.
-   CDN возвращает редирект (301/302) на HTTPS.
-   Дальнейшее взаимодействие идет по защищенному соединению.

Настройка применяется на уровне CDN и не требует дополнительной конфигурации на уровне сервера-источника.

Перед включением опции убедитесь, что для доменов раздачи [выпущен SSL-сертификат](https://timeweb.cloud/docs/cdn/ssl).

## Secure token

Ограничивает доступ к контенту с помощью подписанных URL. 

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

**Может использоваться для:**

-   защиты приватного или платного контента;
-   ограничения срока действия ссылок;
-   предотвращения прямого распространения ссылок;
-   ограничения доступа по IP-адресу.

**Как работает:**

-   К URL добавляется специальная подпись (token), сгенерированная на основе секретного ключа.
-   CDN проверяет валидность подписи.
-   Если подпись корректна, доступ разрешается, если нет — возвращается ошибка 403 Forbidden.

В поле «Секретный ключ» укажите произвольный секретный ключ, который будет использоваться для генерации подписей URL.

**Ключ:**

-   создается и хранится на стороне клиента;
-   должен быть известен только вашему приложению и CDN;
-   используется при формировании подписанных ссылок.

Рекомендуется использовать случайную строку длиной не менее 16 символов. Сгенерировать ее можно, например, так:

```bash
openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 32; echo
```

Строка будет такого вида:

```shell
OCr2qxnZvdvMLtcy904EkABxn1eVPZLP
```

После включения Secure token ваше приложение должно формировать подписанные URL для доступа к контенту согласно алгоритму.

#### Алгоритм формирования подписи

Подписанный URL формируется на основе секретного ключа и параметров запроса.

**1\. Формирование строки для подписи**

Для расчета подписи используется строка вида:

```shell
<secret_key><path><ip><expires>
```

-   `<secret_key>` — секретный ключ, указанный в настройках;
-   `<path>` — путь к запрашиваемому ресурсу;
-   `<ip>` — IP-адрес пользователя (используется только если включена проверка по IP);
-   `<expires>` — время истечения ссылки.

Если проверка по IP или времени отключена, соответствующие значения в строку не добавляются.

**2\. Вычисление подписи**

-   От полученной строки вычисляется MD5-хэш;
-   Результат кодируется в `base64` и приводится к URL-safe-формату:
    -   символ `=` удаляется;
    -   `+` заменяется на `-`;
    -   `/` заменяется на `_`.

**3\. Использование подписи в URL**

Полученное значение используется как токен в пути URL ресурса:

```shell
http://<cdn-domain>/md5(<signature>,<expires>)/<resource-path>
```

#### Примечания

-   Домен CDN не участвует в расчете подписи.
-   Один и тот же ресурс может использоваться по HTTP и HTTPS с одной и той же подписью.

#### Пример генерации подписанных ссылок:

Python

```py
import hashlib
import base64
import time

SECRET = "your_secret_key"
CDN_DOMAIN = "https://example.cdn.twcstorage.ru"
PATH = "/example.txt"  # путь к файлу
EXPIRES = int(time.time()) + 3600  # ссылка действует 1 час
IP = ""  # укажите IP, если используется ограничение

# Формирование строки для подписи
raw = SECRET + PATH + IP + str(EXPIRES)

# MD5-хэш
md5_hash = hashlib.md5(raw.encode()).digest()

# base64 + URL-safe формат
token = base64.b64encode(md5_hash).decode()
token = token.replace("+", "-").replace("/", "_").replace("=", "")

# Итоговый URL
signed_url = f"{CDN_DOMAIN}/md5({token},{EXPIRES}){PATH}"

print(signed_url)
```

NodeJS

```js
const crypto = require('crypto');

const SECRET = 'your_secret_key';
const CDN_DOMAIN = 'https://example.cdn.twcstorage.ru';
const PATH = '/example.txt'; // путь к файлу
const EXPIRES = Math.floor(Date.now() / 1000) + 3600; // ссылка действует 1 час
const IP = ''; // укажите IP, если используется ограничение

// Формирование строки для подписи
const raw = `${SECRET}${PATH}${IP}${EXPIRES}`;

// MD5-хэш
const md5Hash = crypto
  .createHash('md5')
  .update(raw)
  .digest();

// base64 + URL-safe формат
let token = md5Hash.toString('base64');

token = token
  .replace(/\+/g, '-')
  .replace(/\//g, '_')
  .replace(/=/g, '');

// Итоговый URL
const signedUrl = `${CDN_DOMAIN}/md5(${token},${EXPIRES})${PATH}`;

console.log(signedUrl);
```

Где:

-   `SECRET` — ключ, сгенерированный ранее.
    
-   `CDN_DOMAIN` — домен CDN-ресурса.
    
-   `PATH` — путь к файлу, начиная с `/`. Домен указывать не нужно.
    
-   `EXPIRES` — время истечения ссылки в формате Unix timestamp.
    
-   `IP` — указывается только если включено ограничение по IP. Если не используется, оставьте пустую строку.
    

## Ограничение по IP

Доступно при включенной опции «Secure token».

Разрешает доступ к контенту только с определенного IP-адреса. 

**Как работает:**

-   IP-адрес включается в подпись URL.
-   CDN сравнивает IP пользователя с указанным и запрещает доступ при несовпадении.
