Configurazione dell'accesso TLS a un'API per il cloud privato

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

Un host virtuale su Edge definisce i domini e le porte su cui è esposto un proxy API e, per estensione, l'URL che le app utilizzano per accedere a un proxy API.

Un host virtuale definisce inoltre se l'accesso al proxy API è tramite il protocollo HTTP o il protocollo HTTPS criptato che utilizza TLS. Quando configuri un host virtuale per l'utilizzo di HTTPS e TLS, crei un host virtuale su Edge e configuri l'host virtuale in modo che utilizzi un archivio chiavi e un archivio attendibilità.

Scopri di più:

Requisiti per creare un host virtuale

Prima di creare un host virtuale, è necessario disporre delle seguenti informazioni:

  • Il nome di dominio visibile al pubblico dell'host virtuale. Ad esempio, dovresti sapere se il nome visibile pubblicamente è api.myCompany.com, myapi.myCompany.com e così via. Queste informazioni vengono utilizzate quando crei l'host virtuale e anche quando crei il record DNS per l'host virtuale.
  • Per TLS unidirezionale, devi creare un archivio chiavi in cui l'archivio chiavi contenga quanto segue:
    • Certificato TLS: un certificato firmato da un'autorità di certificazione (CA) o una catena di certificati in cui l'ultimo certificato è firmato da una CA.
    • Chiave privata: Edge supporta dimensioni della chiave fino a 2048 bit. La passphrase è facoltativa.
  • Per TLS bidirezionale, sono necessari un archivio chiavi e un archivio attendibilità in cui conservare il certificato del client e, facoltativamente, la catena CA del certificato. L'archivio attendibilità è necessario anche se il certificato è firmato da una CA.

Consulta Keystore e truststore per ulteriori informazioni sulla creazione di archivi chiavi e truststore.

Configurazione dell'host virtuale per TLS

Per creare un host virtuale, crea un oggetto XML che definisca l'host virtuale. Il seguente oggetto XML utilizza l'elemento <SSLInfo> per definire un host virtuale per una configurazione TLS unidirezionale su HTTPS:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

In questo esempio, l'elemento <Enabled> è impostato su true per abilitare TLS unidirezionale, mentre gli elementi <KeyStore> e <KeyAlias> specificano l'archivio chiavi e la chiave utilizzati dalla connessione TLS.

Per abilitare TLS bidirezionale, imposta l'elemento <ClientAuthEnabled> su true e specifica un archivio attendibilità utilizzando l'elemento <TrustStore>. L'archivio attendibilità contiene il certificato del client e, facoltativamente, la catena di CA del certificato.

Decidere come specificare il nome dell'archivio chiavi e dell'archivio attendibilità nell'host virtuale

Nell'esempio di host virtuale riportato sopra, hai specificato l'archivio chiavi mediante un riferimento. Un riferimento è una variabile contenente il nome dell'archivio chiavi anziché specificare direttamente il nome dell'archivio chiavi.

Il vantaggio dell'utilizzo di un riferimento è che puoi modificare il valore del riferimento per modificare l'archivio chiavi utilizzato dall'host virtuale, di solito perché il certificato nell'archivio chiavi corrente scadrà nel prossimo futuro. La modifica del valore del riferimento non richiede il riavvio del router perimetrale.

In alternativa, puoi utilizzare il nome letterale dell'archivio chiavi nell'host virtuale. Tuttavia, se mai modifichi l'host virtuale per cambiare il nome dell'archivio chiavi, devi riavviare i router perimetrali.

Limitazioni nell'utilizzo dei riferimenti agli archivi chiavi e all'archivio attendibilità

Quando utilizzi i riferimenti ad archivi chiavi e truststore, devi tenere conto della seguente limitazione:

  • Puoi utilizzare i riferimenti dell'archivio chiavi e dell'archivio attendibilità negli host virtuali solo se supporti SNI e termini SSL sui router Apigee.
  • Se disponi di un bilanciatore del carico davanti ai router Apigee e termini TLS sul bilanciatore del carico, non puoi utilizzare i riferimenti dell'archivio chiavi e dell'archivio attendibilità negli host virtuali.

Modifica di un host virtuale esistente per utilizzare i riferimenti all'archivio chiavi e all'archivio attendibilità

Apigee consiglia vivamente che gli host virtuali utilizzino il riferimento ad archivi chiavi e truststore. I riferimenti consentono di modificare l'archivio chiavi e l'archivio attendibilità utilizzati dall'host virtuale senza dover riavviare i router perimetrali.

Se gli host virtuali sono attualmente configurati per utilizzare il nome letterale dell'archivio chiavi o dell'archivio attendibilità, puoi convertirli in modo da utilizzare riferimenti. Per farlo, aggiorna l'host virtuale in modo da utilizzare i riferimenti, quindi riavvia i router perimetrali.

Impostazione delle crittografie e dei protocolli TLS per Edge 4.15.07 e versioni precedenti

Se utilizzi Edge 4.15.07 e versioni precedenti, devi impostare il protocollo TLS e le crittografie utilizzate dall'host virtuale utilizzando i tag secondari <Ciphers> e <Protocols> del tag <SSLInfo>. Questi tag sono descritti nella tabella seguente.

Ad esempio:

    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>myTestKeystore</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
        <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>false</ClientAuthEnabled>
            <KeyStore>myTestKeystore</KeyStore>
            <KeyAlias>myKeyAlias</KeyAlias>
            <Ciphers>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher>
            </Ciphers>
            <Protocols>
                <Protocol>TLSv1.2</Protocol>
            </Protocols>
        </SSLInfo>
   </SSLInfo>

Il tag <Cipher> utilizza i nomi Java e JSSE della crittografia. Ad esempio, per Java 8, consulta http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

Specificare le crittografie TLS e i protocolli per Edge da 4.16.01 a 4.16.09

In Edge dalla versione 4.16.01 alla 4.16.09, puoi impostare crittografie e protocolli predefiniti per gli host virtuali a livello globale sul router. Queste impostazioni predefinite vengono quindi applicate a tutti gli host virtuali.

Utilizza i token per specificare i protocolli e le crittografie predefiniti:

  • Per specificare i protocolli predefiniti, utilizza il token conf_load_balancing_load.balancing.driver.server.ssl.protocols
  • Per specificare le crittografie predefinite per il router, utilizza il token conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Il valore predefinito del token conf_load_balancing_load.balancing.driver.server.ssl.protocols è:

conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2

Questa impostazione specifica che il router supporta le versioni TLS 1.0, 1.1 e 1.2. Specifica un elenco di valori delimitati da spazi per il token.

Il valore predefinito del token conf_load_balancing_load.balancing.driver.server.ssl.ciphers è:

conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES

Questa impostazione specifica:

  • La lunghezza della chiave deve essere pari o superiore a 128 bit (HIGH).
  • Escludi crittografie senza autenticazione (!aNULL)
  • Escludi le suite di crittografia utilizzando MD5 (!MD5)
  • Escludi i pacchetti di crittografia utilizzando DH (inclusi DH anonimo, DH temporaneo e DH fisso) E triplo DES (!DH+3DES)
  • Escludi le suite di crittografia utilizzando lo scambio di chiavi RSA E triple DES (!RSA+3DES)

Per informazioni sulla sintassi e sui valori consentiti da questo token, consulta l'articolo Crittografia OpenSSL. Tieni presente che questo token utilizza i nomi della crittografia OpenSSL, come AES128-SHA256, e non i nomi di crittografia Java/JSSE, come TLS_RSA_WITH_AES_128_CBC_SHA256.

Per impostare il token per il router:

  1. Modifica il file /opt/apigee/customer/application/router.properties. Se il file non esiste, crealo.
  2. Imposta il token conf_load_balancing_load.balancing.driver.server.ssl.ciphers. Ad esempio, per specificare solo TLSv1.2 ed escludere le suite di crittografia utilizzando chiavi precondivise, aggiungi!PSK:
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
    conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
  3. Assicurati che il file router.properties sia di proprietà di apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Riavvia il router Edge:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. Controlla il valore del token:
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Impostazione dei parametri dell'host virtuale TLS per Edge versione 4.17.01 e successive

Se utilizzi Edge 4.17.01 e versioni successive, puoi impostare alcune proprietà TLS per un singolo host virtuale, ad esempio il protocollo TLS e la crittografia, utilizzando il tag secondario <Properties> del tag <VirtualHost>. Questi tag sono descritti nel Riferimento per le proprietà dell'host virtuale.

Ad esempio:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
    <Properties>
        <Property name="proxy_read_timeout">50</Property>
        <Property name="keepalive_timeout">300</Property>
        <Property name="proxy_request_buffering">off</Property>
        <Property name="proxy_buffering">off</Property>
        <Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property>
        <Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property>
    </Properties>
</VirtualHost>

Per informazioni sulla sintassi e sui valori consentiti dal token ssl_ciphers, consulta l'articolo sulla crittografia OpenSSL. Tieni presente che questo token utilizza i nomi della crittografia OpenSSL, come AES128-SHA256, e non i nomi di crittografia Java/JSSE, come TLS_RSA_WITH_AES_128_CBC_SHA256.

Creazione di un host virtuale che utilizza HTTPS

Questo esempio specifica l'archivio chiavi per l'host virtuale mediante un riferimento. L'utilizzo di un riferimento consente di modificare l'archivio chiavi senza dover riavviare i router.

Utilizza la procedura seguente per creare l'host virtuale:

  1. Crea e configura un archivio chiavi denominato myTestKeystore utilizzando la procedura descritta qui: archivi chiavi e archivi attendibilità. Assicurati che l'archivio chiavi utilizzi un nome alias di myKeyAlias per il certificato e la chiave privata.
  2. Utilizza la seguente chiamata API POST per creare il riferimento denominato keystoreref all'archivio chiavi creato in precedenza:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="keystoreref">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>'
      -u email:password
    

    Il riferimento specifica il nome dell'archivio chiavi e il tipo di riferimento come KeyStore.

    Utilizza la seguente chiamata API GET per visualizzare il riferimento:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. Per creare l'host virtuale, utilizza l'API Crea un host virtuale, dove <ms-IP> è l'indirizzo IP o il nome di dominio del nodo del server di gestione.

    Assicurati di specificare il riferimento all'archivio chiavi e l'alias chiave corretti:

    curl -X POST -H "Content-Type:application/xml" \
      http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \
      -d '<VirtualHost  name="newTLSTrustStore2">
        <HostAliases>
          <HostAlias>apiTLS.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>9005</Port>
        <OCSPStapling>off</OCSPStapling>
        <SSLInfo>
          <Enabled>true</Enabled>
          <ClientAuthEnabled>false</ClientAuthEnabled>
          <KeyStore>ref://keystoreref</KeyStore>
          <KeyAlias>myKeyAlias</KeyAlias>
        </SSLInfo>
      </VirtualHost>' \
      -u email:password
  4. Crea un record DNS per l'host virtuale che corrisponda all'alias host.
  5. Se disponi di proxy API esistenti, aggiungi l'host virtuale all'elemento <HTTPConnection> in ProxyEndpoint. L'host virtuale viene aggiunto automaticamente a tutti i nuovi proxy API.

    Consulta la sezione Aggiornamento di un proxy API dopo la creazione di un host virtuale in Informazioni sugli host virtuali.

Dopo aver aggiornato un proxy API per utilizzare l'host virtuale e aver creato il record DNS per l'alias host, puoi accedere al proxy API come mostrato di seguito:

https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}

Ad esempio:

https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282

Creazione e modifica dei riferimenti a un archivio chiavi o un archivio attendibilità

Facoltativamente, puoi configurare l'host virtuale in modo da utilizzare un riferimento all'archivio chiavi o all'archivio attendibilità. Il vantaggio dell'utilizzo di un riferimento è che puoi aggiornare il riferimento in modo che rimandi a un archivio chiavi o un archivio di attendibilità diverso per aggiornare il certificato TLS senza dover riavviare un router.

Ad esempio, di seguito è riportato un host virtuale che utilizza un riferimento all'archivio chiavi:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://keystoreref</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

Utilizza la seguente chiamata API POST per creare il riferimento denominato keystoreref:

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password

Il riferimento specifica il nome e il tipo dell'archivio chiavi.

Utilizza la seguente chiamata API GET per visualizzare il riferimento:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

Per modificare in un secondo momento il riferimento in modo che rimandi a un altro archivio chiavi, assicurandoti che l'alias abbia lo stesso nome, utilizza la seguente chiamata PUT:

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password