2016-03-19 4 views
5

के साथ aws क्लाउडफ़्रंट https के लिए हस्ताक्षरित कुकीज़ सेट अप करना मैं क्लाउडफ़्रंट के माध्यम से एक एचएलएस स्ट्रीमिंग सेवा स्थापित कर रहा हूं और सामग्री सुरक्षा के लिए कई सुरक्षा उपायों को लागू कर रहा हूं। मैंने इसे सफलतापूर्वक http के तहत काम किया है, मैं वीडियो स्ट्रीम कर सकता हूं और इसे बहुत सारी सामग्री सुरक्षा सुरक्षा उपायों के साथ अपनी वेबसाइट में देख सकता हूं। मैं http के लिए इसे कैसे काम करने में कामयाब रहा हूं, इस बारे में अधिक जानकारी के लिए आप drupal.org में किए गए एक पोस्ट में secure hls streaming पर पोस्ट कर सकते हैं।phs एसडीके

लेकिन अब मुझे सूत्र में https जोड़ने की आवश्यकता है क्योंकि एचएलएस एन्क्रिप्टेड सेगमेंट के लिए कुछ एन्क्रिप्शन कुंजी प्रसारित की जा रही हैं, लेकिन मुझे समस्याएं आ रही हैं। अब मैं सूत्र में https जोड़ने के लिए काम कर रहा हूं। मैंने अपनी साइट पर एक प्रमाणपत्र जोड़ा है और मैंने क्लडफ्रंट में एक अलग प्रमाणपत्र जोड़ा है क्योंकि मेरा प्रमाणपत्र वाइल्डकार्ड नहीं है।

मेरे subdomain.mydomain.com

मेरे CloudFront प्रमाण पत्र के लिए साइट प्रमाणपत्र कार्यों के लिए है * .mydomain.com

मेरे CloudFront वितरण cdn.mydomain.com

के लिए CNAME

जब मैं है कुकी मैं कॉल में सच करने के लिए सुरक्षित पैरामीटर सेट (डोमेन के बाद 6 पैरामीटर) बनाने के लिए:

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"; 

मुझे अपनी वेबसाइट में फ़ाइल की सामग्री नहीं दिखाई देती है, लेकिन त्रुटि संदेश।

तो ऐसा लगता है कि मुझे क्लाउडफ़्रंट पर हस्ताक्षर किए गए कुकीज़ को https के तहत काम करने के लिए और अधिक चीजों की आवश्यकता है। कोई मदद?

उत्तर

0

बस setcookie() के $secure पैरामीटर को सेट करने से हस्ताक्षरित कुकी नहीं बनाया गया है। एक हस्ताक्षरित कुकी बनाने की प्रक्रिया थोड़ा जटिल है। सबसे पहले, Using Signed Cookies की समीक्षा करें, विशेष रूप से डिब्बाबंद और कस्टम नीति अनुभाग। आपको creating a Policy, base64encoding that Policy and creating a Signature from the encoded policy के साथ स्वयं को परिचित करने की आवश्यकता होगी।

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(); 
} 
:

इस्तेमाल here में उल्लिखित कोड उदाहरण, मैं तो निम्न कोड अपने ऐप्लिकेशन के कुछ ही में कुकी सेट करने का उपयोग