CDN
Secure token. Настроить и использовать
Настройка опции
1. Перейдите в настройки желаемого CDN-ресурса.
2. Включите опцию Secure token.
3. В появившемся поле введите любой набор символов длиной от 6 до 32 символов.
4. Если контент должен быть доступен с любых IP-адресов, оставьте пустым чекбокс «Добавить IP-адрес к токену». Если хотите, чтобы контент был доступен только с одного IP, поставьте в чекбоксе галочку (доверенный IP вы укажете позже, на шаге №6).
5. Сохраните изменения.
6. Эту настройку выполните на сервере-источнике. Добавьте на свой источник скрипт, который генерирует защищённые ссылки на контент. Получившиеся ссылки должны иметь вид:
http://cdn.example.com/photo.jpeg?md5=DMF1ucDxtHCxwYQ&expires=2147483647
Где:
-
http://cdn.example.com/photo.jpeg — путь к файлу.
-
DMF1ucDxtHCxwYQ — результат хэш-функции MD5(String), где String — параметр, полученный слиянием элементов: <время истечения ссылки><путь к файлу><доверенный IP> <ключ, который вы указали на шаге №3>.
-
2147483647 — момент времени, после которого ссылка будет считаться недействительной, в формате UNIX timestamp.
Мы подготовили для вас шаблоны скриптов для PHP, Python и OpenSSL — просто скопируйте один из них из раздела «Скрипты для генерации ссылок». Скрипт начнёт создавать защищённые ссылки на контент.
7. Эту настройку выполните на сервере-источнике. Организуйте свой источник таким образом, чтобы доступ к нужным файлам пользователи получали только по ссылкам с secure token. При этом наша CDN при обращении к серверу-источнику должна получать контент вне зависимости от наличия ключа.
На этом настройка закончена, опция Secure token работает и защищает ваш контент.
Скрипты для генерации ссылок
Генерировать ссылки с secure token на PHP
Скрипт для создания временных ссылок с ограничением доступа по IP. Файлы будут доступны только с доверенного IP, и только пока не истечёт срок жизни ссылки.
<?php
$secret = 'secret_key';
$ip = '1.2.3.4';
$path = '/live/133529_2/chunklist.m3u8';
$expires = time() + 10000;
$link = "$expires$path$ip $secret";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url = "http://cdn.site.com{$path}?md5={$md5}&expires={$expires}";
echo $url;
echo "\n";
Скрипт для создания временных ссылок без ограничения доступа по IP. Файлы будут доступны с любого IP, но только пока не истечёт срок жизни ссылки.
<?php
$secret = 'secret_key';
$path = '/live/133529_2/chunklist.m3u8';
$expires = time() + 10000;
$link = "$expires$path $secret";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url = "http://cdn.site.com{$path}?md5={$md5}&expires={$expires}";
echo $url;
echo "\n"
Где:
-
$secret — секретный ключ,
-
$path — путь к файлу,
-
$ip — IP-адрес, которому разрешено получить контент,
-
$expires — момент времени, после которого ссылка будет считаться недействительной, в формате UNIX timestamp,
-
$url — итоговая ссылка на файл.
Генерировать ссылки с secure token на Python
Скрипт для создания временных ссылок с ограничением доступа по IP. Файлы будут доступны только с доверенного IP и только пока не истечёт срок жизни ссылки.
import base64
from hashlib import md
from time import time
ip = '1.2.3.4'
secret = 'secret_key'
stream_address = '133529_2'
path = f'/live/{stream_address}/playlist.m3u8'
expires = int(time()) + 100000
token = base64.encodebytes(md5(f"{expires}{path}{ip}
{secret}".encode()).digest()).decode().replace("\n", "").replace("+", "-").replace("/", "_").replace("=", "")
secured_url = f"https://cdn.site.com{path}?md5={token}&expires={expires}"
print(secured_url)
Скрипт для создания временных ссылок без ограничения доступа по IP. Файлы будут доступны с любого IP, но только пока не истечёт срок жизни ссылки.
import base64
from hashlib import md5
from time import time
secret = 'secret_key'
stream_address = '133529_2'
path = f'/live/{stream_address}/playlist.m3u8'
expires = int(time()) + 100000
token = base64.encodebytes(md5(f"{expires}{path}
{secret}".encode()).digest()).decode().replace("\n", "").replace("+", "-").replace("/", "_").replace("=", "")
secured_url = f"https://cdn.site.com{path}?md5={token}&expires={expires}"
print(secured_url)
Где:
-
secret — секретный ключ,
-
path — путь к файлу,
-
ip — IP-адрес, которому разрешено получить контент,
-
expires — момент времени, после которого ссылка будет считаться недействительной, в формате UNIX timestamp,
-
secured_url — итоговая ссылка на файл.
Сгенерировать secure token через OpenSSL
Скрипт для создания secure token, который ограничивает время жизни ссылки и открывает доступ к контенту только доверенному IP:echo -n '2147483647/images/1.jpg1.2.3.4 secret_key' |
openssl md5 -binary | openssl base64 | tr +/ -_ |
tr -d ='2147483647/images/1.jpg1.2.3.4 secret_key' = '{expires}{path}{ip} {secret_key}'
Скрипт для создания secure token, который только ограничивает время жизни ссылки:
echo -n '2147483647/images/1.jpg secret_key' |
openssl md5 -binary | openssl base64 | tr +/ -_ |
tr -d = '2147483647/images/1.jpg secret_key' = '{expires}{path} {secret_key}'
Где:
-
2147483647/images/1.jpg — путь к файлу,
-
1.2.3.4 — доверенный IP,
-
secret_key — секретный ключ, который вы ввели на шаге №3 инструкции «Настройка опции».
Скрипты выше только генерируют secure token. Вам нужно самостоятельно создать дополнительный скрипт, который добавляет к ссылкам secure token и время истечения ссылки, а также приводит ссылку к виду:
http://cdn.example.com/photo.jpeg?md5=DMF1ucDxtHCxwYQ&expires=2147483647
Где:
-
http://cdn.example.com/photo.jpeg — путь к файлу,
-
DMF1ucDxtHCxwYQ — secure token,
-
2147483647 — момент времени, после которого ссылка будет считаться недействительной, в формате UNIX timestamp.