Konfigurowanie dostępu TLS do interfejsu API dla chmury prywatnej

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Host wirtualny w Edge określa domeny i porty, na których jest udostępniany serwer proxy interfejsu API, a co za tym idzie – adres URL, którego aplikacje używają do uzyskiwania dostępu do serwera proxy interfejsu API.

Host wirtualny określa też, czy dostęp do serwera proxy interfejsu API jest uzyskiwany za pomocą protokołu HTTP czy szyfrowanego protokołu HTTPS, który używa protokołu TLS. Konfigurując hosta wirtualnego do korzystania z protokołu HTTPS i TLS, tworzysz hosta wirtualnego w Edge i konfigurujesz go tak, aby używał magazynu kluczy i magazynu zaufanych certyfikatów.

Więcej informacji:

Co jest potrzebne do utworzenia hosta wirtualnego

Zanim utworzysz hosta wirtualnego, musisz mieć te informacje:

  • Publiczna nazwa domeny hosta wirtualnego. Musisz na przykład wiedzieć, czy publiczna nazwa to api.myCompany.com, myapi.myCompany.com, itp. Te informacje są używane podczas tworzenia hosta wirtualnego oraz podczas tworzenia rekordu DNS dla hosta wirtualnego.
  • W przypadku protokołu TLS jednokierunkowego musisz utworzyć magazyn kluczy, który zawiera: następujące elementy:
    • certyfikat TLS – certyfikat podpisany przez urząd certyfikacji lub łańcuch certyfikatów, w którym ostatni certyfikat jest podpisany przez urząd certyfikacji;
    • klucz prywatny – Edge obsługuje klucze o długości do 2048 bitów. Hasło jest opcjonalne.
  • W przypadku protokołu TLS dwukierunkowego potrzebujesz magazynu kluczy i magazynu zaufania, w którym będzie przechowywany certyfikat klienta oraz opcjonalnie łańcuch urzędu certyfikacji. Magazyn zaufania jest potrzebny nawet wtedy, gdy certyfikat jest podpisany przez urząd certyfikacji.

Więcej informacji o tworzeniu magazynów kluczy i magazynów zaufania znajdziesz w artykule Magazyny kluczy i magazyny zaufania.

Konfiguracja hosta wirtualnego na potrzeby protokołu TLS

Aby utworzyć hosta wirtualnego, utwórz obiekt XML, który go definiuje. Ten obiekt XML używa elementu <SSLInfo> do zdefiniowania hosta wirtualnego na potrzeby konfiguracji protokołu TLS jednokierunkowego przez 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>

W tym przykładzie element <Enabled> ma wartość true, co oznacza, że protokół TLS jednokierunkowy jest włączony, a elementy <KeyStore> i <KeyAlias> określają magazyn kluczy i klucz używany przez połączenie TLS.

Aby włączyć protokół TLS dwukierunkowy, ustaw element <ClientAuthEnabled> na true, i określ magazyn zaufanych certyfikatów za pomocą elementu <TrustStore>. Magazyn zaufania zawiera certyfikat klienta oraz opcjonalnie łańcuch urzędu certyfikacji.

Określanie sposobu podawania nazwy magazynu kluczy i magazynu zaufania w hoście wirtualnym

W powyższym przykładzie hosta wirtualnego magazyn kluczy został określony za pomocą odwołania. Odwołanie to zmienna, która zawiera nazwę magazynu kluczy, a nie bezpośrednio nazwę magazynu kluczy.

Zaletą używania odwołania jest to, że możesz zmienić jego wartość, aby zmienić magazyn kluczy używany przez hosta wirtualnego. Zwykle jest to spowodowane tym, że certyfikat w bieżącym magazynie kluczy wkrótce wygaśnie. Zmiana wartości odwołania nie wymaga ponownego uruchomienia routera Edge.

Możesz też użyć w hoście wirtualnym nazwy magazynu kluczy w postaci literału. Jeśli jednak kiedykolwiek zmodyfikujesz hosta wirtualnego, aby zmienić nazwę magazynu kluczy, musisz ponownie uruchomić routery Edge.

Ograniczenia dotyczące używania odwołań do magazynów kluczy i magazynów zaufania

Podczas używania odwołań do magazynów kluczy i magazynów zaufania musisz wziąć pod uwagę to ograniczenie:

  • Odwołań do magazynów kluczy i magazynów zaufanych certyfikatów możesz używać w hostach wirtualnych tylko wtedy, gdy obsługujesz SNI i kończysz protokół SSL na routerach Apigee.
  • Jeśli przed routerami Apigee masz system równoważenia obciążenia i kończysz protokół TLS na systemie równoważenia obciążenia, nie możesz używać odwołań do magazynów kluczy i magazynów zaufania w hostach wirtualnych.

Modyfikowanie istniejącego hosta wirtualnego w celu używania odwołań do magazynu kluczy i magazynu zaufania

Apigee zdecydowanie zaleca, aby hosty wirtualne używały odwołań do magazynów kluczy i magazynów zaufania. Odwołania umożliwiają zmianę magazynu kluczy i magazynu zaufania używanego przez hosta wirtualnego bez konieczności ponownego uruchamiania routerów Edge.

Jeśli hosty wirtualne są obecnie skonfigurowane tak, aby używały nazwy magazynu kluczy lub magazynu zaufania w postaci literału, możesz je przekonwertować na używanie odwołań. Aby to zrobić, zaktualizuj hosta wirtualnego, aby używał odwołań, a następnie ponownie uruchom routery Edge.

Ustawianie szyfrów i protokołów TLS w Edge 4.15.07 i starszych wersjach

Jeśli używasz Edge w wersji 4.15.07 lub starszej, protokół TLS i szyfry używane przez hosta wirtualnego ustawiasz za pomocą tagów podrzędnych <Ciphers> i <Protocols> tagu <SSLInfo>. Te tagi zostały opisane w tabeli poniżej.

Na przykład:

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

Tag <Cipher> używa nazwy szyfru w języku Java i JSSE. Na przykład w przypadku Javy 8 zobacz http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

Określanie szyfrów i protokołów TLS w Edge 4.16.01–4.16.09

W Edge 4.16.01–4.16.09 domyślne szyfry i protokoły dla hostów wirtualnych ustawiasz globalnie na routerze. Te ustawienia domyślne są stosowane do wszystkich hostów wirtualnych.

Do określania domyślnych protokołów i szyfrów używaj tokenów:

  • Aby określić domyślne protokoły, użyj tokena conf_load_balancing_load.balancing.driver.server.ssl.protocols.
  • Aby określić domyślne szyfry routera, użyj tokena conf_load_balancing_load.balancing.driver.server.ssl.ciphers.

Domyślna wartość tokena conf_load_balancing_load.balancing.driver.server.ssl.protocols to:

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

To ustawienie określa, że router obsługuje protokół TLS w wersjach 1.0, 1.1 i 1.2. W tokenie podaj listę wartości rozdzielonych spacjami.

Domyślna wartość tokena conf_load_balancing_load.balancing.driver.server.ssl.ciphers to:

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

To ustawienie określa:

  • wymagana długość klucza to co najmniej 128 bitów (HIGH);
  • wykluczanie szyfrów bez uwierzytelniania (!aNULL);
  • wykluczanie zestawów szyfrów używających MD5 (!MD5);
  • wykluczanie zestawów szyfrów używających DH (w tym anonimowego DH, efemerycznego DH i stałego DH) ORAZ potrójnego DES (!DH+3DES)
  • wykluczanie zestawów szyfrów używających wymiany kluczy RSA ORAZ potrójnego DES (!RSA+3DES).

Informacje o składni i wartościach dozwolonych przez ten token znajdziesz w artykule Szyfry OpenSSL. Pamiętaj, że ten token używa nazw szyfrów OpenSSL, takich jak AES128-SHA256, a nie nazw szyfrów Java/JSSE, takich jak TLS_RSA_WITH_AES_128_CBC_SHA256.

Aby ustawić token dla routera:

  1. Edytuj plik /opt/apigee/customer/application/router.properties. Jeśli ten plik nie istnieje, utwórz go.
  2. Ustaw token conf_load_balancing_load.balancing.driver.server.ssl.ciphers. Aby na przykład określić tylko TLSv1.2 i wykluczyć zestawy szyfrów używające kluczy wstępnie udostępnionych, dodaj!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. Sprawdź, czy plik router.properties jest własnością użytkownika apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Ponownie uruchom router Edge:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. Sprawdź wartość tokena:
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Ustawianie parametrów hosta wirtualnego TLS w Edge w wersji 4.17.01 i nowszych

Jeśli używasz Edge w wersji 4.17.01 lub nowszej, możesz ustawić niektóre właściwości TLS dla poszczególnych hostów wirtualnych, takie jak protokół TLS i szyfr, za pomocą tagu podrzędnego <Properties> tagu <VirtualHost>. Te tagi zostały opisane w artykule Informacje o właściwościach hosta wirtualnego.

Na przykład:

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

Informacje o składni i wartościach dozwolonych przez token ssl_ciphers znajdziesz w artykule Szyfry OpenSSL. Pamiętaj, że ten token używa nazw szyfrów OpenSSL, takich jak AES128-SHA256, a nie nazw szyfrów Java/JSSE, takich jak TLS_RSA_WITH_AES_128_CBC_SHA256.

Tworzenie hosta wirtualnego, który używa protokołu HTTPS

W tym przykładzie magazyn kluczy jest określany w hoście wirtualnym za pomocą odwołania. Użycie a odwołania umożliwia zmianę magazynu kluczy bez konieczności ponownego uruchamiania routerów.

Aby utworzyć hosta wirtualnego:

  1. Utwórz i skonfiguruj magazyn kluczy o nazwie myTestKeystore , wykonując czynności opisane w artykule Magazyny kluczy i magazyny zaufania. Upewnij się, że magazyn kluczy używa aliasu myKeyAlias dla certyfikatu i klucza prywatnego.
  2. Aby utworzyć odwołanie o nazwie keystoreref do utworzonego powyżej magazynu kluczy, użyj tego wywołania interfejsu API POST:

    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
    

    Odwołanie określa nazwę magazynu kluczy i typ odwołania jako KeyStore.

    Aby wyświetlić odwołanie, użyj tego wywołania interfejsu API GET:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. Utwórz hosta wirtualnego za pomocą interfejsu API Tworzenie hosta wirtualnego, gdzie <ms-IP> to adres IP lub nazwa domeny węzła serwera zarządzania.

    Pamiętaj, aby określić prawidłowe odwołanie do magazynu kluczy i alias klucza:

    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. Utwórz rekord DNS dla hosta wirtualnego, który pasuje do aliasu hosta.
  5. Jeśli masz już jakieś serwery proxy interfejsu API, dodaj hosta wirtualnego do elementu <HTTPConnection> w ProxyEndpoint. Host wirtualny jest automatycznie dodawany do wszystkich nowych serwerów proxy interfejsu API.

    Więcej informacji znajdziesz w sekcji Aktualizowanie serwera proxy interfejsu API po utworzeniu hosta wirtualnego w artykule Informacje o hostach wirtualnych.

Po zaktualizowaniu serwera proxy interfejsu API, aby używał hosta wirtualnego, i utworzeniu rekordu DNS dla aliasu hosta możesz uzyskać dostęp do serwera proxy interfejsu API w sposób opisany poniżej:

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

Na przykład:

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

Tworzenie i modyfikowanie odwołań do magazynu kluczy lub magazynu zaufania

Możesz opcjonalnie skonfigurować hosta wirtualnego tak, aby używał odwołania do magazynu kluczy lub magazynu zaufania. Zaletą używania odwołania jest to, że możesz je zaktualizować, aby wskazywało inny magazyn kluczy lub magazyn zaufania, i zaktualizować certyfikat TLS bez konieczności ponownego uruchamiania routera.

Poniżej znajdziesz przykład hosta wirtualnego, który używa odwołania do magazynu kluczy:

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

Aby utworzyć odwołanie o nazwie keystoreref, użyj tego wywołania interfejsu API POST:

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

Odwołanie określa nazwę magazynu kluczy i jego typ.

Aby wyświetlić odwołanie, użyj tego wywołania interfejsu API GET:

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

Aby później zmienić odwołanie tak, aby wskazywało inny magazyn kluczy, upewnij się, że alias ma taką samą nazwę, i użyj tego wywołania 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