Utilizzo di TLS sul portale

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Puoi configurare il portale in modo che utilizzi TLS. La procedura di configurazione TLS per il portale dipende dal modo in cui hai eseguito il deployment del portale:

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

TLS e il portale

Nell'immagine seguente vengono mostrate le due posizioni in cui il portale utilizza TLS:

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

    Il portale non funziona come un sistema autonomo. Invece, gran parte delle informazioni utilizzate dal portale vengono effettivamente archiviate su Edge, dove è possibile eseguire il deployment di Edge nel cloud oppure on-premise come un'installazione di cloud privato. Se necessario, il portale invia una richiesta HTTP o HTTPS all'API di gestione perimetrale per recuperare o inviare informazioni.

    Quando crei il portale, uno dei primi passaggi da eseguire è specificare l'URL dell'API Edge Management. A seconda di come è configurata l'API Edge Management, quell'URL può utilizzare TLS. Per saperne di più, consulta la sezione Creazione di un portale per gli sviluppatori.
  2. Per la comunicazione tra gli sviluppatori e il portale.

    Quando utilizzi il portale Servizi per gli sviluppatori per eseguire il deployment delle API, i tuoi 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 devono essere inviate tramite HTTPS.

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

Configurazione di TLS tra il portale e l'API di gestione perimetrale

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

Per la procedura che utilizzi per configurare la connessione all'API Edge Management, consulta Creazione di un portale per gli sviluppatori.

Versione di Edge basata su cloud

Se il tuo portale si connette alla versione basata su cloud di Edge, l'URL per l'API di gestione perimetrale è preconfigurato da Apigee per l'utilizzo di TLS. Durante la configurazione del portale, accedi all'API Edge Management utilizzando l'URL https://api.enterprise.apigee.com/v1.

Installazione di Edge nel cloud privato

Per un'installazione di Edge nel cloud privato, il formato dell'URL dell'API di gestione perimetrale è:
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 perimetrale. Ad esempio, il numero di porta potrebbe essere 8443 o anche 8080, a seconda della configurazione perimetrale.

Configurazione di TLS tra gli sviluppatori e il portale

Il modo in cui configuri TLS tra gli sviluppatori e il portale dipende dal modo in cui hai eseguito il deployment del portale: cloud o Apigee Edge per il cloud privato.

Portali basati su cloud

Panteonte

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

Acquisto

Per attivare TLS/SSL tramite Acquia, consulta Attivazione di SSL.

Portali Edge per cloud privato

Tutte le installazioni di cloud privato consigliate da Apigee del portale richiedono che il portale sia protetto da 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 che utilizzi per configurare TLS dipende quindi dal bilanciatore del carico. Per ulteriori informazioni, consulta la documentazione sul bilanciatore del carico.
  • Configura TLS sul portale stesso: se necessario, puoi configurare TLS sul server web che ospita il portale. Per ulteriori informazioni, consulta Configurazione del portale per l'utilizzo di HTTPS.

Devi ottenere il tuo certificato TLS prima di poter eseguire il deployment del portale in un ambiente di produzione.

Configurazione di impostazioni TLS aggiuntive

Puoi modificare il file sites/default/settings.local.php (cloud) o sites/default/settings.php (private cloud) 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 ulteriori informazioni su questa funzione, vedi: http://php.net/manual/en/function.ini-set.php.

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

  • cookie_httponly: (consigliato) Specifica il cookie come 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 viene 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 è possibile che i dati possano essere potenzialmente ripuliti, mentre 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 gli sviluppatori e i client, consulta la sezione Attivare il protocollo SSL per la comunicazione HTTPS sicura nel sito della documentazione di Pantheon.

Configurazione di TLS con bilanciatori del carico

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

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

Se il tuo portale per sviluppatori si trova dietro bilanciatori del carico che utilizzano la terminazione TLS e vuoi che tutto il traffico venga gestito su https://, le pagine del sito web dovranno contenere solo link https:// e dovrai aggiungere il seguente codice al file del portale per sviluppatori sites/default/settings.local.php (cloud) o sites/default/settings.php (Private Cloud). Poiché il bilanciatore del carico non trasforma automaticamente i contenuti delle pagine HTML, il codice garantisce che tutti i link trasmessi 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 (Private Cloud):

// 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 ulteriori informazioni, vedi:

Reindirizzamento del traffico del portale a HTTPS

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

Reindirizzamento a HTTPS sullo stesso nome host

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

In questo scenario, se uno sviluppatore visita il tuo portale all'indirizzo live-example.devportal.apigee.io, ma deve accedere a un certificato che è stato caricato per devportal.example.com, la richiesta avrà esito negativo.

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

Reindirizzamento a HTTPS su più nomi host

Aggiungi il seguente codice al tuo file sites/default/settings.local.php (cloud) o sites/default/settings.php (Private Cloud) 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;
  }
}