পোর্টালে TLS ব্যবহার করা

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

আপনি পোর্টালটিকে TLS ব্যবহার করার জন্য কনফিগার করতে পারেন। পোর্টালের জন্য TLS কনফিগারেশন পদ্ধতিটি নির্ভর করে আপনি পোর্টালটি কীভাবে স্থাপন করেছেন তার উপর:

  • ক্লাউড : পোর্টালটির জন্য ক্লাউড-ভিত্তিক হোস্টিং পরিষেবা Pantheon বা Acquia থেকে TLS কনফিগার করুন।
  • প্রাইভেট ক্লাউডের জন্য Apigee Edge : পোর্টাল হোস্টিং সার্ভারে অন-প্রিমিসেস TLS কনফিগার করুন।

টিএলএস এবং পোর্টাল

নিচের ছবিতে সেই দুটি স্থান দেখানো হয়েছে যেখানে পোর্টালটি TLS ব্যবহার করে:

  1. পোর্টাল এবং এজ ম্যানেজমেন্ট এপিআই-এর মধ্যে যোগাযোগের জন্য।

    পোর্টালটি একটি স্বতন্ত্র সিস্টেম হিসেবে কাজ করে না। বরং, পোর্টালটি যে তথ্য ব্যবহার করে তার বেশিরভাগই Edge-এ সংরক্ষিত থাকে, যা ক্লাউডে অথবা প্রাইভেট ক্লাউড ইনস্টলেশন হিসেবে অন-প্রিমিজে স্থাপন করা যেতে পারে। প্রয়োজনে, পোর্টালটি তথ্য পুনরুদ্ধার করতে বা পাঠাতে Edge ম্যানেজমেন্ট API-এর কাছে একটি HTTP বা HTTPS অনুরোধ পাঠায়।

    আপনার পোর্টাল তৈরি করার সময়, আপনাকে যে প্রথম পদক্ষেপগুলো অবশ্যই পালন করতে হবে তার মধ্যে একটি হলো এজ ম্যানেজমেন্ট এপিআই (Edge management API)-এর ইউআরএল (URL) নির্দিষ্ট করা। এজ ম্যানেজমেন্ট এপিআই কীভাবে কনফিগার করা হয়েছে তার উপর নির্ভর করে, সেই ইউআরএলটি টিএলএস (TLS) ব্যবহার করতে পারে। আরও জানতে ‘ডেভেলপার পোর্টাল তৈরি করা’ দেখুন।
  2. ডেভেলপার এবং পোর্টালের মধ্যে যোগাযোগের জন্য।

    যখন আপনি আপনার এপিআই (API) ডেপ্লয় করার জন্য ডেভেলপার সার্ভিসেস পোর্টাল ব্যবহার করেন, তখন আপনার ডেভেলপাররা অ্যাপ রেজিস্টার করতে এবং এপিআই কী (API key) গ্রহণ করতে পোর্টালে লগ ইন করেন। লগইন ক্রেডেনশিয়াল এবং এপিআই কী হলো স্বত্বাধিকারযুক্ত তথ্য, যার নিরাপত্তা নিশ্চিত করার জন্য আপনি এগুলো HTTPS-এর মাধ্যমে পাঠাতে চাইবেন। এই ধরনের স্বত্বাধিকারযুক্ত তথ্য HTTPS-এর মাধ্যমেই পাঠানো উচিত।

    এই পরিস্থিতির জন্য আপনি কীভাবে TLS কনফিগার করবেন তা নির্ভর করে আপনি পোর্টালটি কীভাবে স্থাপন করেছেন তার উপর: ক্লাউড নাকি প্রাইভেট ক্লাউডের জন্য Apigee Edge। নিম্নলিখিত বিভাগগুলিতে উভয় পরিস্থিতি বর্ণনা করা হয়েছে।

পোর্টাল এবং এজ ম্যানেজমেন্ট এপিআই-এর মধ্যে টিএলএস কনফিগার করা

Edge ম্যানেজমেন্ট API-এর কনফিগারেশন নির্ধারণ করে যে যোগাযোগের জন্য TLS ব্যবহার করা যাবে কি না। যদি Edge ম্যানেজমেন্ট API-কে TLS ব্যবহারের জন্য কনফিগার করা থাকে, তাহলে পোর্টালটি HTTPS ব্যবহার করতে পারে। অন্যথায়, পোর্টালটি HTTP-এর মাধ্যমে Edge-এর সাথে যোগাযোগ করে। সুতরাং, একজন পোর্টাল ডেভেলপার হিসেবে, পোর্টাল এবং Edge-এর মধ্যে সংযোগ স্থাপন করার জন্য আপনার শুধু Edge কীভাবে কনফিগার করা আছে তা জানাই যথেষ্ট।

Edge ম্যানেজমেন্ট API-এর সাথে সংযোগ কনফিগার করার পদ্ধতির জন্য, “একটি ডেভেলপার পোর্টাল তৈরি করা” দেখুন।

Edge-এর ক্লাউড-ভিত্তিক সংস্করণ

যদি আপনার পোর্টাল Edge-এর ক্লাউড-ভিত্তিক সংস্করণের সাথে সংযুক্ত থাকে, তাহলে Edge ম্যানেজমেন্ট API-এর URL-টি Apigee দ্বারা TLS ব্যবহারের জন্য আগে থেকেই কনফিগার করা থাকে। পোর্টাল কনফিগার করার সময়, আপনি https://api.enterprise.apigee.com/v1 URL-টি ব্যবহার করে Edge ম্যানেজমেন্ট API অ্যাক্সেস করেন।

প্রাইভেট ক্লাউডে Edge ইনস্টলেশন

Edge-এর প্রাইভেট ক্লাউড ইনস্টলেশনের ক্ষেত্রে, Edge ম্যানেজমেন্ট API-এর URL-টি নিম্নলিখিত রূপে থাকে:
http:// EdgePrivateCloudIp :8080/v1
অথবা:
https:// EdgePrivateCloudIp : TLSport /v1

যেখানে EdgePrivateCloudIp হলো Edge Management Server-এর IP অ্যাড্রেস এবং TLSport হলো Edge ম্যানেজমেন্ট API-এর জন্য TLS পোর্ট। উদাহরণস্বরূপ, Edge কনফিগারেশনের উপর ভিত্তি করে পোর্ট নম্বরটি 8443 বা এমনকি 8080-ও হতে পারে।

ডেভেলপার এবং পোর্টালের মধ্যে TLS কনফিগার করা

ডেভেলপার এবং পোর্টালের মধ্যে TLS কীভাবে কনফিগার করবেন তা নির্ভর করে আপনি পোর্টালটি কীভাবে স্থাপন করেছেন তার উপর: ক্লাউড নাকি প্রাইভেট ক্লাউডের জন্য Apigee Edge।

ক্লাউড ভিত্তিক পোর্টাল

প্যান্থিয়ন

প্যান্থিয়ন তার প্ল্যাটফর্মের সমস্ত সাইটের জন্য প্যান্থিয়ন গ্লোবাল সিডিএন এবং লেটস এনক্রিপ্ট ব্যবহার করে বিনামূল্যে স্বয়ংক্রিয় HTTPS প্রদান করে। আরও দেখুন প্যান্থিয়নের গ্লোবাল সিডিএন-এ HTTPS

অ্যাকুইয়া

Acquia ব্যবহার করে TLS/SSL সক্রিয় করতে, SSL সক্রিয়করণ দেখুন।

প্রাইভেট ক্লাউড পোর্টালের জন্য এজ

Apigee দ্বারা সুপারিশকৃত পোর্টালের সকল প্রাইভেট ক্লাউড ইনস্টলেশনের জন্য পোর্টালটিকে একটি লোড ব্যালান্সারের পেছনে রাখতে হয়, যেমনটি নিচে দেখানো হয়েছে:

সুতরাং, অন-প্রিমিসেস ইনস্টলেশনের ক্ষেত্রে TLS কনফিগার করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:

  • লোড ব্যালান্সারে TLS কনফিগার করুন : পোর্টালে নয়, সরাসরি লোড ব্যালান্সারেই TLS কনফিগার করুন। সুতরাং, TLS কনফিগার করার পদ্ধতি লোড ব্যালান্সারের উপর নির্ভরশীল। আরও তথ্যের জন্য আপনার লোড ব্যালান্সারের ডকুমেন্টেশন দেখুন।
  • পোর্টালটিতেই TLS কনফিগার করুন : প্রয়োজনে, আপনি পোর্টালটি হোস্টকারী ওয়েব সার্ভারে TLS কনফিগার করতে পারেন। আরও তথ্যের জন্য HTTPS ব্যবহারের জন্য পোর্টাল কনফিগার করা দেখুন।

প্রোডাকশন এনভায়রনমেন্টে পোর্টালটি স্থাপন করার আগে আপনাকে অবশ্যই আপনার নিজস্ব TLS সার্টিফিকেট সংগ্রহ করতে হবে।

অতিরিক্ত TLS সেটিংস কনফিগার করা

পোর্টালের জন্য TLS-এর কনফিগারেশন পরিবর্তন করতে আপনি sites/default/settings.local.php (ক্লাউড) অথবা sites/default/settings.php (প্রাইভেট ক্লাউড) ফাইলটি সম্পাদনা করতে পারেন।

ফাইলটি সম্পাদনা করার সময়, কোনো প্রপার্টি সেট করার জন্য ini_set() ফাংশনটি যোগ করুন। এই ফাংশনটি সম্পর্কে আরও তথ্যের জন্য দেখুন: http://php.net/manual/en/function.ini-set.php

আপনি sites/default/settings.local.php (ক্লাউড) অথবা sites/default/settings.php (প্রাইভেট ক্লাউড) ফাইলে নিম্নলিখিত প্রোপার্টিগুলো সেট করতে পারেন:

  • cookie_httponly : (প্রস্তাবিত) নির্দিষ্ট করে যে কুকিটি শুধুমাত্র HTTP প্রোটোকলের মাধ্যমে অ্যাক্সেসযোগ্য হবে। এই প্রপার্টিটি এভাবে সেট করুন:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure - (ঐচ্ছিক) এটি নির্দিষ্ট করে যে কুকি শুধুমাত্র সুরক্ষিত সংযোগের মাধ্যমেই পাঠানো যাবে। তবে, এর অর্থ হলো সমস্ত কন্টেন্ট অবশ্যই HTTPS-এর মাধ্যমে পরিবেশন করতে হবে। এই সেটিংটি সক্রিয় করা হলে, সাইটটি HTTP-এর মাধ্যমে কাজ করবে না। এই প্রপার্টিটি এভাবে সেট করুন:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime এবং cookie_lifetime : (ঐচ্ছিক) gc_lifetime নির্দিষ্ট করে যে কত সেকেন্ড পরে ডেটা মুছে ফেলা হতে পারে, এবং cookie_lifetime সেকেন্ডে কুকিটির জীবনকাল নির্দিষ্ট করে। এই প্রোপার্টিগুলো এভাবে সেট করুন:

    ini_set('session.gc_maxlifetime', 3600);
    ini_set('session.cookie_lifetime', 3600);

ডেভেলপার পোর্টাল এবং ক্লায়েন্টদের মধ্যে TLS সেট আপ করার বিষয়ে আরও তথ্যের জন্য, Pantheon ডক সাইটে "Enable SSL for Secure HTTPS Communication" দেখুন।

লোড ব্যালেন্সারের সাথে TLS কনফিগার করা

উন্নত পারফরম্যান্সের জন্য, লোড ব্যালেন্সারগুলোকে কখনও কখনও TLS টার্মিনেশন সম্পাদনের জন্য কনফিগার করা হয়। TLS টার্মিনেশনের মাধ্যমে, লোড ব্যালেন্সারগুলো https:// এর মাধ্যমে পাঠানো মেসেজ ডিক্রিপ্ট করে এবং সেই মেসেজগুলো http:// এর মাধ্যমে ব্যাকএন্ড সার্ভারগুলোতে ফরোয়ার্ড করে দেয়। এর ফলে ব্যাকএন্ড সার্ভারগুলোকে নিজেদের https:// মেসেজ ডিক্রিপ্ট করার অতিরিক্ত কাজ করতে হয় না।

যদি লোড ব্যালেন্সারগুলো একই ডেটা সেন্টারের সার্ভারগুলোতে এনক্রিপ্ট না করা http মেসেজ ফরওয়ার্ড করে, তাহলে নিরাপত্তা নিয়ে কোনো সমস্যা হয় না। তবে, যদি লোড ব্যালেন্সারগুলো ডেটা সেন্টারের বাইরের সার্ভারগুলোতে, যেমন আপনার Apigee ডেভেলপার পোর্টালে, http:// এর মাধ্যমে মেসেজ ফরওয়ার্ড করে, তাহলে মেসেজগুলো এনক্রিপ্ট করা থাকে না, যা একটি নিরাপত্তা ঝুঁকি তৈরি করে।

যদি আপনার ডেভেলপার পোর্টালটি TLS টার্মিনেশন ব্যবহারকারী লোড ব্যালেন্সারের পেছনে থাকে এবং আপনি চান যে সমস্ত ট্র্যাফিক https:// এর মাধ্যমে পরিবেশিত হোক, তাহলে ওয়েবসাইটের পেজগুলিতে শুধুমাত্র https:// লিঙ্ক থাকতে হবে এবং আপনাকে আপনার ডেভেলপার পোর্টালের sites/default/settings.local.php (ক্লাউড) অথবা sites/default/settings.php (প্রাইভেট ক্লাউড) ফাইলে নিম্নলিখিত কোডটি যোগ করতে হবে। যেহেতু লোড ব্যালেন্সার স্বয়ংক্রিয়ভাবে HTML পেজগুলির বিষয়বস্তু রূপান্তর করে না, তাই এই কোডটি নিশ্চিত করে যে ক্লায়েন্টের কাছে পাঠানো সমস্ত লিঙ্ক https:// দিয়ে শুরু হয়।

লোড ব্যালেন্সারের সাথে TLS কনফিগার করতে, sites/default/settings.local.php (ক্লাউড) অথবা sites/default/settings.php (প্রাইভেট ক্লাউড) ফাইলে নিম্নলিখিত লাইনগুলো যোগ করুন:

// Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;

  // Set HTTPS URL of portal 
  $base_url = 'https://developers.myCo.com';

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }

  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    header('HTTP/1.0 301 Moved Permanently');
    // You could optionally substitute a canonical server name for $_SERVER['HTTP_HOST'] here.
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
  }
}

আরও তথ্যের জন্য দেখুন:

পোর্টাল ট্র্যাফিক HTTPS-এ পুনঃনির্দেশিত করা হচ্ছে

আপনার sites/default/settings.local.php (ক্লাউড) অথবা sites/default/settings.php (প্রাইভেট ক্লাউড) ফাইল আপডেট করে আপনি পোর্টালের সমস্ত ট্র্যাফিক HTTPS-এ রিডাইরেক্ট করতে পারেন। আপনি একই হোস্টনেমে নাকি একাধিক হোস্টনেমে HTTPS-এ রিডাইরেক্ট করছেন, তার উপর ভিত্তি করে প্রয়োজনীয় আপডেটগুলো ভিন্ন হয়।

একই হোস্টনেমে HTTPS-এ পুনঃনির্দেশ করা হচ্ছে

সমস্ত পোর্টাল ট্র্যাফিককে একই হোস্টনেমে (উদাহরণস্বরূপ, *.devportal.apigee.io ) HTTPS-এ রিডাইরেক্ট করতে, নিম্নলিখিত কোডটি আপনার sites/default/ settings.local.php (ক্লাউড) অথবা sites/default/ settings.php (প্রাইভেট ক্লাউড) ফাইলে যোগ করুন।

এই পরিস্থিতিতে, যদি কোনো ডেভেলপার live-example.devportal.apigee.io ঠিকানায় আপনার পোর্টালে আসেন, কিন্তু devportal.example.com- এর জন্য আপলোড করা কোনো সার্টিফিকেট অ্যাক্সেস করার প্রয়োজন হয়, তাহলে অনুরোধটি ব্যর্থ হবে।

// Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }

  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
  }
}

একাধিক হোস্টনেমে HTTPS-এ পুনঃনির্দেশ করা হচ্ছে

একাধিক হোস্টনেমে সমস্ত পোর্টাল ট্র্যাফিককে HTTPS-এ রিডাইরেক্ট করতে, নিম্নলিখিত কোডটি আপনার sites/default/ settings.local.php ফাইলে (ক্লাউড) অথবা sites/default/ settings.php ফাইলে (প্রাইভেট ক্লাউড) যোগ করুন।

  // Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;
  // Assume we are not forcing a redirect until proven otherwise.
  $force_redirect = FALSE;

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }
  
  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    // We will force a redirect because HTTPS is required.
    $force_redirect = TRUE;
  }
  
  // This works on Pantheon only; the constant is undefined elsewhere.
  switch (PANTHEON_ENVIRONMENT) {
    case 'dev':
      $canonical_hostname = 'dev.devportal.example.com';
      break;
    case 'test':
      $canonical_hostname = 'test.devportal.example.com';
      break;
    case 'live':
      $canonical_hostname = 'devportal.example.com';
      break;
    default:
      $canonical_hostname = strtolower($_SERVER['HTTP_HOST']);
      break;
  }
  if ($canonical_hostname != strtolower($_SERVER['HTTP_HOST'])) {
    // We will force a redirect because hostname is not canonical.
    $force_redirect = TRUE;
  }

  if ($force_redirect) {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: https://' . $canonical_hostname . $_SERVER['REQUEST_URI']);
    exit;
  }
}