Utilizzo di TLS sul portale

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Puoi configurare il portale per utilizzare TLS. La procedura di configurazione di TLS per il portale dipende dalla modalità di deployment del portale:

  • Cloud: configura TLS da Pantheon o Acquia, i servizi di hosting basati sul cloud per il portale.
  • Apigee Edge per il cloud privato: configura TLS on-premise sul server che ospita il portale.

TLS e il portale

L'immagine seguente mostra i due punti in cui il portale utilizza TLS:

  1. Per la comunicazione tra il portale e l'API di gestione Edge.

    Il portale non funziona come sistema autonomo. La maggior parte delle informazioni utilizzate da il portale viene archiviata in Edge, dove Edge può essere sottoposto a deployment nel cloud o on-premise come installazione di Private Cloud. Quando necessario, il portale effettua una richiesta HTTP o HTTPS all'API di gestione Edge per recuperare o inviare informazioni.
    Quando crei il portale, uno dei primi passaggi da eseguire è specificare l'URL dell'API di gestione Edge.
    A seconda della configurazione dell'API di gestione Edge, l'URL può utilizzare TLS. Per saperne di più, consulta Creare un portale per gli sviluppatori.
  2. Per la comunicazione tra gli sviluppatori e il portale.

    Quando utilizzi il portale dei servizi per gli sviluppatori per eseguire il deployment delle API, gli sviluppatori accedono al portale per registrare le app e ricevere le chiavi API. Le credenziali di accesso e la chiave API sono informazioni proprietarie che vuoi inviare tramite HTTPS per garantirne la sicurezza. Questo tipo di informazioni proprietarie deve essere inviato tramite HTTPS.

    Il modo in cui configuri TLS per questo scenario dipende dalla modalità di deployment del portale: cloud o Apigee Edge per il cloud privato. Le sezioni seguenti descrivono entrambi gli scenari.

Configurare TLS tra il portale e l'API di gestione Edge

La configurazione dell'API di gestione Edge determina se la comunicazione può utilizzare TLS. Se l'API di gestione Edge è configurata per utilizzare TLS, il portale può utilizzare HTTPS. In caso contrario, il portale comunica con Edge tramite HTTP. Pertanto, in qualità di sviluppatore del portale, devi solo sapere come è configurato Edge per impostare la connessione tra il portale ed Edge.

Per la procedura da utilizzare per configurare la connessione all'API di gestione Edge, consulta Creare un portale per gli sviluppatori.

Versione di Edge basata sul cloud

Se il portale si connette alla versione di Edge basata sul cloud, l'URL dell'API di gestione Edge è preconfigurato da Apigee per utilizzare TLS. Quando configuri il portale, accedi all' API di gestione Edge utilizzando l'URL https://api.enterprise.apigee.com/v1.

Installazione di Edge nel cloud privato

Per un'installazione di Edge nel cloud privato, l'URL dell'API di gestione Edge ha il seguente formato:
http://EdgePrivateCloudIp:8080/v1
oppure:
https://EdgePrivateCloudIp:TLSport/v1

dove EdgePrivateCloudIp è l'indirizzo IP del server Edge Management Server e TLSport è la porta TLS per l'API di gestione Edge. Ad esempio, il numero di porta potrebbe essere 8443 o anche 8080 in base alla configurazione di Edge.

Configurare TLS tra gli sviluppatori e il portale

Il modo in cui configuri TLS tra gli sviluppatori e il portale dipende dalla modalità di deployment del portale: cloud o Apigee Edge per il cloud privato.

Portali basati sul cloud

Pantheon

Pantheon fornisce HTTPS automatico senza costi per tutti i siti sulla sua piattaforma tramite la CDN globale di Pantheon e utilizzando Let's Encrypt. Consulta anche HTTPS sulla CDN globale di Pantheon.

Acquia

Per attivare TLS/SSL utilizzando Acquia, consulta Attivare SSL.

Portali Edge per il cloud privato

Tutte le installazioni di Private Cloud del portale consigliate da Apigee richiedono che il portale sia dietro un bilanciatore del carico, come mostrato di seguito:

Pertanto, per le installazioni on-premise, hai due opzioni per configurare TLS:

  • Configura TLS sul bilanciatore del carico: configura TLS sul bilanciatore del carico stesso e non sul portale. La procedura da utilizzare per configurare TLS dipende quindi dal bilanciatore del carico. Per saperne di più, consulta la documentazione del bilanciatore del carico per maggiori informazioni.
  • Configura TLS sul portale stesso: se necessario, puoi configurare TLS su il server web che ospita il portale. Per saperne di più, consulta Configurare il portale per utilizzare HTTPS.

Prima di poter eseguire il deployment del portale in un ambiente di produzione , devi ottenere il tuo certificato TLS.

Configurare impostazioni TLS aggiuntive

Puoi modificare il file sites/default/settings.local.php (cloud) o sites/default/settings.php (cloud privato) per apportare modifiche alla configurazione di TLS per il portale.

Quando modifichi il file, aggiungi istanze della funzione ini_set() per impostare una proprietà. Per saperne di più su questa funzione, consulta: http://php.net/manual/en/function.ini-set.php.

Puoi impostare le seguenti proprietà nel file sites/default/settings.local.php (cloud) o sites/default/settings.php (cloud privato):

  • cookie_httponly: (consigliato) specifica che il cookie è accessibile solo tramite il protocollo HTTP. Imposta questa proprietà come:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure - (facoltativo) specifica che i cookie possono essere inviati solo tramite connessioni sicure. Tuttavia, ciò significa che tutti i contenuti devono essere pubblicati tramite HTTPS. Se questa impostazione è attivata, il sito non funzionerà tramite HTTP. Imposta questa proprietà come:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime e cookie_lifetime: (facoltativo) gc_lifeteime specifica il numero di secondi dopo i quali i dati possono essere potenzialmente eliminati e cookie_lifetime specifica la durata del cookie in secondi. Imposta queste proprietà come:

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

Per saperne di più sulla configurazione di TLS tra il portale per sviluppatori e i client, consulta Attivare SSL per la comunicazione HTTPS sicura sul sito di documentazione di Pantheon.

Configurazione TLS con i bilanciatori del carico

Per migliorare le prestazioni, a volte i bilanciatori del carico vengono configurati per eseguire la terminazione TLS. Con la terminazione TLS, i bilanciatori del carico decriptano i messaggi inviati tramite https:// e li inoltrano ai server di backend tramite http://. In questo modo, i server di backend non devono decriptare autonomamente i messaggi https://.

Se i bilanciatori del carico inoltrano messaggi http non criptati ai server nello stesso data center, la sicurezza non è un problema. Tuttavia, se i bilanciatori del carico inoltrano messaggi tramite http:// a server esterni al data center, ad esempio il portale per sviluppatori Apigee, i messaggi non vengono criptati, il che apre una falla di sicurezza.

Se il portale per sviluppatori si trova dietro i bilanciatori del carico che utilizzano la terminazione TLS e vuoi che tutto il traffico venga gestito tramite https://, le pagine del sito web dovranno contenere solo link https:// e dovrai aggiungere il seguente codice al file sites/default/settings.local.php (cloud) o sites/default/settings.php (cloud privato) del portale per sviluppatori. Poiché il bilanciatore del carico non trasforma automaticamente i contenuti delle pagine HTML, il codice garantisce che tutti i link passati al client inizino con https://.

Per configurare TLS con i bilanciatori del carico, aggiungi le seguenti righe al file sites/default/settings.local.php (cloud) o sites/default/settings.php (cloud privato):

// 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;
  }
}

Per saperne di più, consulta:

Reindirizzare il traffico del portale a HTTPS

Puoi reindirizzare tutto il traffico del portale a HTTPS aggiornando il file sites/default/settings.local.php (cloud) o sites/default/settings.php (cloud privato). Gli aggiornamenti richiesti variano a seconda che tu stia reindirizzando a HTTPS sullo stesso nome host o su più nomi host.

Reindirizzare a HTTPS sullo stesso nome host

Aggiungi il seguente codice al file sites/default/settings.local.php (cloud) o sites/default/settings.php (cloud privato) per reindirizzare tutto il traffico del portale a HTTPS sullo stesso nome host (ad esempio *.devportal.apigee.io).

In questo scenario, se uno sviluppatore visita il portale all'indirizzo live-example.devportal.apigee.io, ma deve accedere a un certificato caricato per devportal.example.com, la richiesta non andrà a buon fine.

// 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;
  }
}

Reindirizzare a HTTPS su più nomi host

Aggiungi il seguente codice al file sites/default/settings.local.php (cloud) o sites/default/settings.php (cloud privato) per reindirizzare tutto il traffico del portale a HTTPS su più nomi host.

  // 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;
  }
}