Mengonfigurasi akses TLS ke API untuk Private Cloud

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Host virtual di Edge menentukan domain dan port tempat proxy API diekspos, dan dengan , URL yang digunakan aplikasi untuk mengakses proxy API.

{i>Host<i} virtual juga menentukan apakah proxy API diakses menggunakan protokol HTTP, atau oleh protokol HTTPS terenkripsi yang menggunakan TLS. Saat mengonfigurasi {i>host<i} virtual untuk menggunakan HTTPS dan TLS, membuat host virtual di Edge dan mengonfigurasi host virtual agar menggunakan keystore dan truststore.

Pelajari lebih lanjut:

Yang diperlukan untuk membuat host virtual

Sebelum membuat host virtual, Anda harus memiliki informasi berikut:

  • Nama domain dari host virtual yang dapat dilihat secara publik. Misalnya, Anda harus mengetahui apakah nama yang dapat dilihat publik adalah api.myCompany.com, myapi.myCompany.com, dll. Informasi itu digunakan saat Anda membuat {i>host<i} virtual dan juga saat Anda membuat catatan DNS untuk {i>host<i} virtual.
  • Untuk TLS satu arah, Anda perlu membuat keystore yang berisi keystore hal berikut:
    • Sertifikat TLS - baik sertifikat yang ditandatangani oleh otoritas sertifikat (CA), atau rantai sertifikat di mana sertifikat terakhir ditandatangani oleh CA.
    • Kunci pribadi - Edge mendukung ukuran kunci hingga 2048 bit. Frasa sandi bersifat opsional.
  • Untuk TLS dua arah, Anda memerlukan keystore dan memerlukan truststore untuk menyimpan sertifikat klien dan, opsional, rantai CA sertifikat. Anda memerlukan truststore meskipun sertifikat tersebut ditandatangani oleh CA.

Lihat Keystore dan Truststore untuk informasi selengkapnya tentang cara membuat keystore dan truststore.

Konfigurasi host virtual untuk TLS

Untuk membuat host virtual, buat objek XML yang mendefinisikan host virtual. Objek XML berikut menggunakan elemen <SSLInfo> untuk mendefinisikan untuk konfigurasi TLS satu arah melalui 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>

Dalam contoh ini, elemen <Enabled> disetel ke benar (true) untuk mengaktifkan TLS satu arah, dan elemen <KeyStore> serta <KeyAlias> menentukan keystore dan kunci yang digunakan oleh koneksi TLS.

Untuk mengaktifkan TLS dua arah, tetapkan elemen <ClientAuthEnabled> ke true, dan menentukan truststore menggunakan <TrustStore> . Truststore menyimpan sertifikat klien dan, secara opsional, CA sertifikat jaringan.

Menentukan cara menentukan keystore dan nama truststore di host virtual

Pada contoh host virtual di atas, Anda menentukan keystore menggunakan referensi. J adalah variabel yang berisi nama keystore, bukan menentukan nama keystore secara langsung.

Keuntungan menggunakan referensi adalah bahwa Anda dapat mengubah nilai referensi untuk mengubah keystore yang digunakan oleh host virtual, biasanya karena sertifikat di keystore saat ini berakhir dalam waktu dekat. Mengubah nilai referensi tidak mengharuskan Anda memulai ulang Router Edge.

Atau, Anda dapat menggunakan nama keystore literal di host virtual. Namun, jika Anda pernah memodifikasi host virtual untuk mengubah nama keystore, Anda harus memulai ulang Router Edge.

Batasan dalam penggunaan referensi ke keystore dan truststore

Anda harus mempertimbangkan batasan berikut saat menggunakan referensi ke keystore dan truststore:

  • Anda hanya dapat menggunakan referensi keystore dan truststore di host virtual jika Anda mendukung SNI dan Anda menghentikan SSL di Router Apigee.
  • Jika Anda memiliki load balancer di depan Router Apigee, dan menghentikan TLS pada Anda tidak dapat menggunakan keystore dan referensi truststore di load balancer virtual {i>host<i}.

Memodifikasi host virtual yang ada untuk menggunakan referensi ke keystore dan truststore

Apigee sangat merekomendasikan agar host virtual menggunakan referensi ke keystore dan truststore. Referensi memungkinkan Anda mengubah keystore dan truststore yang digunakan oleh host virtual tanpa memulai ulang Router Edge.

Jika host virtual Anda saat ini dikonfigurasi untuk menggunakan nama literal untuk keystore atau {i>truststore<i}, Anda dapat mengonversinya untuk menggunakan referensi. Untuk melakukannya, perbarui {i> virtual host<i} untuk menggunakan referensi, lalu mulai ulang Router Edge.

Menyetel penyandian dan protokol TLS untuk Edge 4.15.07 dan versi sebelumnya

Jika menggunakan Edge versi 4.15.07 dan yang lebih lama, Anda perlu menyetel protokol dan cipher TLS yang digunakan oleh host virtual dengan menggunakan tag turunan <Ciphers> dan <Protocols> dari tag <SSLInfo>. Tag ini dijelaskan dalam tabel di bawah.

Contoh:

    <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> menggunakan nama penyandian Java dan JSSE. Misalnya, untuk Java 8, lihat http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

Menentukan penyandian dan protokol TLS untuk Edge 4.16.01 hingga 4.16.09

Di Edge 4.16.01 hingga 4.16.09, Anda menetapkan cipher dan protokol default untuk host virtual secara global di {i>Router<i}. Setelan default ini kemudian berlaku untuk semua {i>host<i} virtual.

Gunakan token untuk menentukan protokol dan cipher default:

  • Untuk menentukan protokol default, gunakan token conf_load_balancing_load.balancing.driver.server.ssl.protocols
  • Guna menentukan cipher default untuk Router, gunakan token conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Nilai default token conf_load_balancing_load.balancing.driver.server.ssl.protocols adalah:

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

Pengaturan ini menetapkan bahwa Router mendukung TLS versi 1.0, 1.1, dan 1.2. Tentukan daftar nilai yang dipisahkan spasi ke token.

Nilai default token conf_load_balancing_load.balancing.driver.server.ssl.ciphers adalah:

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

Setelan ini menentukan:

  • Diperlukan panjang kunci 128 bit atau lebih (HIGH).
  • Kecualikan cipher tanpa autentikasi (!aNULL)
  • Kecualikan cipher suite menggunakan MD5 (!MD5)
  • Kecualikan cipher suite menggunakan DH (termasuk DH anonim, DH efemeral, dan DH tetap) DAN tiga DES (!DH+3DES)
  • Kecualikan cipher suite menggunakan pertukaran kunci RSA DAN DES tiga kali lipat (!RSA+3DES)

Untuk mengetahui informasi tentang sintaksis dan nilai yang diizinkan oleh token ini, lihat penyandian OpenSSL. Perhatikan, token ini menggunakan nama penyandian OpenSSL, seperti AES128-SHA256, dan bukan Nama cipher Java/JSSE, seperti TLS_RSA_WITH_AES_128_CBC_SHA256.

Untuk menetapkan token untuk Router:

  1. Edit /opt/apigee/customer/application/router.properties . Jika file tersebut tidak ada, buat file tersebut.
  2. Setel conf_load_balancing_load.balancing.driver.server.ssl.ciphers sebelumnya yang benar. Misalnya, untuk menentukan TLSv1.2 saja dan mengecualikan rangkaian penyandian menggunakan {i>pre-shared key<i}, tambahkan!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. Pastikan file router.properties dimiliki oleh {i>apigee<i}:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Mulai ulang Router Edge:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. Periksa nilai token:
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Latar (Setting) Parameter host virtual TLS untuk Edge versi 4.17.01 dan yang lebih baru

Jika Anda menggunakan Edge versi 4.17.01 dan yang lebih baru, maka Anda dapat mengatur beberapa properti TLS untuk host virtual individual, seperti protokol dan cipher TLS, dengan menggunakan tag turunan <Properties> dari <VirtualHost> . Tag ini dijelaskan di bagian Referensi properti host virtual.

Contoh:

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

Untuk mengetahui informasi tentang sintaksis dan nilai yang diizinkan oleh token ssl_ciphers, lihat penyandian OpenSSL. Perhatikan, token ini menggunakan nama penyandian OpenSSL, seperti AES128-SHA256, dan bukan nama penyandian Java/JSSE, seperti TLS_RSA_WITH_AES_128_CBC_SHA256.

Membuat host virtual yang menggunakan HTTPS

Contoh ini menentukan keystore ke host virtual dengan menggunakan referensi. Menggunakan memungkinkan Anda mengubah keystore tanpa harus memulai ulang Router.

Gunakan prosedur berikut untuk membuat host virtual:

  1. Buat dan konfigurasi keystore bernama myTestKeystore menggunakan metode prosedur yang dijelaskan di sini: Keystore dan Truststore. Pastikan keystore menggunakan nama alias myKeyAlias untuk sertifikat dan kunci pribadi.
  2. Gunakan panggilan POST API berikut untuk membuat referensi bernama keystoreref ke keystore yang Anda buat di atas:

    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
    

    Referensi menentukan nama keystore dan jenis referensi sebagai KeyStore.

    Gunakan panggilan GET API berikut untuk melihat referensi:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. Buat host virtual dengan menggunakan perintah Create a Virtual Host API, dengan <ms-IP> sebagai alamat IP atau nama domain dari node Server Pengelolaan.

    Pastikan untuk menentukan referensi keystore dan alias kunci yang benar:

    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. Buat data DNS untuk {i>host<i} virtual yang cocok dengan alias {i>host<i}.
  5. Jika Anda memiliki proxy API yang sudah ada, tambahkan host virtual ke elemen <HTTPConnection> di ProxyEndpoint. Host virtual ditambahkan secara otomatis ke semua proxy API baru.

    Lihat Memperbarui proxy API setelah membuat host virtual di Tentang host virtual.

Setelah memperbarui proxy API agar dapat menggunakan host virtual, dan membuat data DNS untuk host alias, Anda dapat mengakses proxy API seperti yang ditampilkan di bawah ini:

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

Contoh:

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

Membuat dan mengubah referensi ke keystore atau truststore

Secara opsional, Anda dapat mengonfigurasi host virtual untuk menggunakan referensi ke keystore atau truststore. Keuntungan menggunakan referensi adalah Anda dapat memperbarui referensi ke mengarahkan ke keystore atau truststore yang berbeda untuk memperbarui sertifikat TLS tanpa harus memulai ulang {i>Router<i}.

Misalnya, di bawah ini adalah host virtual yang menggunakan referensi ke keystore:

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

Gunakan panggilan POST API berikut untuk membuat referensi bernama 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

Referensi menentukan nama keystore dan jenisnya.

Gunakan panggilan GET API berikut untuk melihat referensi:

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

Untuk mengubah referensi di lain waktu agar mengarah ke keystore yang berbeda, pastikan alias memiliki dengan nama yang sama, gunakan panggilan PUT berikut:

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