настройка подписанных файлов cookie для облачного фронта AWS с помощью php SDK

Я настраиваю потоковую службу HLS через облачный фронт и внедряю несколько мер безопасности для защиты контента. Я успешно сделал так, чтобы он работал по http, я могу транслировать видео и смотреть его на своем веб-сайте с множеством мер защиты контента. Для получения более подробной информации о том, как мне удалось заставить его работать для http, вы можете обратиться к нему в посте, который я сделал на drupal.org о безопасный поток HLS.

Но теперь мне нужно добавить https в формулу, потому что передаются некоторые ключи шифрования для зашифрованных сегментов hls, но у меня проблемы. Сейчас я работаю над добавлением https в формулу. Я добавил сертификат на свой сайт и добавил другой сертификат в cludfront, потому что мой сертификат не является подстановочным.

Сертификат моего сайта работает на subdomain.mydomain.com

Мой сертификат облачного фронта для * .mydomain.com

Мой дистрибутив с облачным фронтом имеет имя cdn.mydomain.com

Когда я создаю cookie, я устанавливаю для параметра secure значение true в вызове (шестой параметр после домена):

setcookie($name, $value, strtotime('+1 hour'), "/", ".mydomain.com", true, true);

Но когда я пытаюсь получить доступ к некоторым тестовым данным на моем сайте

if (readfile('https://cdn.mydomain.com/privacy_test.txt')==0)
print "Error in cdn access";

Я не вижу содержимое файла на моем веб-сайте, но появляется сообщение об ошибке.

Так что, кажется, мне нужно сделать больше вещей, чтобы подписанные cookie-файлы cloudfront aws работали в https. Любая помощь?

6

Решение

Просто настройка $secure параметр setcookie() не создает подписанный файл cookie. Процесс создания подписанного файла cookie немного сложен. Во-первых, обзор Использование подписанных файлов cookie, конкретно консервированный а также изготовленный на заказ разделы политики. Вам нужно будет ознакомиться с создание политики, кодирование этой базы base64 и создание подписи из кодированной политики.

Использование примеров кода, изложенных в Вот, Затем я использую следующий код в нескольких своих приложениях для установки файлов cookie:

public static function getCustomSignedCookies()
{
$domain = '.' . explode('.', apache_request_headers()['Host'], 2)[1];
$dt = new DateTime();
$dt->add(new DateInterval('P1Y')); // 1 year
$expires = $dt->getTimestamp();
$url = Config::get('cloudfront_url') . '/*';
$policy = self::getCustomPolicy($url, $expires);
$encodedPolicy = self::url_safe_base64_encode($policy);
$signature = self::getSignature($policy);

$cookies = [
[
'name' => 'CloudFront-Policy'
, 'value' => $encodedPolicy
, 'expires' => $expires
, 'path' => '/'
, 'domain' => $domain
, 'secure' => true
, 'httpOnly' => true
],
[
'name' => 'CloudFront-Signature'
, 'value' => $signature
, 'expires' => $expires
, 'path' => '/'
, 'domain' => $domain
, 'secure' => true
, 'httpOnly' => true
],
[
'name' => 'CloudFront-Key-Pair-Id'
, 'value' => self::$keyPair
, 'expires' => $expires
, 'path' => '/'
, 'domain' => $domain
, 'secure' => true
, 'httpOnly' => true
]
];

return $cookies;
}

public static function setCloudFrontCookies()
{
ob_start();

foreach (self::getCustomSignedCookies() as $cookie)
{
setcookie
(
$cookie['name']
, $cookie['value']
, $cookie['expires']
, $cookie['path']
, $cookie['domain']
, $cookie['secure']
, $cookie['httpOnly']
);
}

ob_end_flush();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]