Membuat keystore dan truststore menggunakan Edge management API

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

Dokumen ini menjelaskan cara membuat, memodifikasi, dan menghapus keystore dan truststore untuk Edge untuk Cloud dan untuk Edge bagi Private Cloud versi 4.18.01 dan yang lebih baru.

Pengantar

Untuk mengonfigurasi fungsi yang mengandalkan infrastruktur kunci publik, seperti TLS, Anda perlu membuat keystore dan truststore yang menyediakan kunci dan sertifikat digital yang diperlukan.

Untuk pengenalan keystore, truststore, dan alias, lihat Keystore dan Truststore.

Membuat keystore

Keystore khusus untuk lingkungan di organisasi Anda, misalnya lingkungan pengujian atau produksi. Oleh karena itu, jika ingin menguji keystore di lingkungan pengujian sebelum men-deploy-nya ke lingkungan produksi, Anda harus membuatnya di kedua lingkungan.

Untuk membuat keystore dalam lingkungan:

  1. Gunakan panggilan API di bagian ini untuk membuat keystore.
  2. Membuat alias dan mengupload pasangan sertifikat/kunci ke alias. Cara mengupload sertifikat dan kunci didasarkan pada format pasangan sertifikat/kunci tersebut. Bagian berikut menjelaskan cara mengupload setiap jenis pasangan sertifikat/kunci:

Untuk membuat keystore, tentukan nama keystore ke Create a Keystore atau Truststore API. Nama keystore hanya boleh berisi karakter alfanumerik:

curl -X POST -u orgAdminEmail:password -H "Content-Type: text/xml" \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores \
-d '<KeyStore name="myKeystore"/>'

Contoh respons:

{
  "certs" : [ ],
  "keys" : [ ],
  "name" : "myKeystore"
}

Upload sertifikat dan kunci sebagai file JAR

Pertama-tama, Anda harus membuat file JAR dengan kunci pribadi, sertifikat, dan manifes. File JAR harus berisi file dan direktori berikut:

/META-INF/descriptor.properties
myCert.pem
myKey.pem

JAR keystore dapat berisi hanya tiga file tersebut. Jika Anda memiliki rantai sertifikat, semua sertifikat dalam rantai tersebut harus ditambahkan ke dalam satu file PEM, dan sertifikat terakhir harus ditandatangani oleh root CA. Sertifikat harus ditambahkan ke file PEM dalam urutan yang benar, dengan baris kosong di antara setiap sertifikat, yang berarti:

cert -> intermediate cert(1) -> intermediate cert(2) -> … -> root

Di direktori yang berisi pasangan kunci dan sertifikat Anda, buat direktori yang diberi nama /META-INF. Kemudian, buat file bernama deskriptor.properties di /META-INF dengan konten berikut:

certFile={myCertificate}.pem
keyFile={myKey}.pem

Buat file JAR yang berisi pasangan kunci dan sertifikat Anda:

jar -cf myKeystore.jar myCert.pem myKey.pem

Tambahkan descriptor.properties ke file JAR Anda:

jar -uf myKeystore.jar META-INF/descriptor.properties

Sekarang Anda dapat mengupload file JAR yang berisi sertifikat dan kunci pribadi menggunakan API Membuat alias dari file JAR atau PKCS:

curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F file="@myKeystore.jar" -F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=keycertjar"

di mana opsi -F menentukan jalur ke file JAR.

Dalam panggilan ini, Anda menentukan:

  • alias_name - Mengidentifikasi sertifikat dan kunci di key store. Saat membuat host virtual, Anda mereferensikan sertifikat dan kunci dengan nama aliasnya.
  • key_pword - Sandi untuk kunci pribadi. Hapus parameter ini jika kunci pribadi tidak memiliki sandi.

Pastikan keystore Anda diupload dengan benar:

curl -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

Contoh respons:

{  
 "certs" : [ "myCertificate" ],
 "keys" : [ "myKey" ],
 "name" : "myKeystore"
}

Upload sertifikat dan kunci sebagai file PEM

Upload file PEM yang berisi sertifikat dan kunci pribadi dengan menggunakan Membuat alias dari sertifikat dan file PEM kunci:

curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F keyFile="@server.key" -F certFile="@signed.crt" \
-F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=keycertfile"

dengan opsi -F menentukan jalur ke file PEM.

Dalam panggilan ini, Anda menentukan:

  • alias_name - Mengidentifikasi sertifikat dan kunci di key store. Saat membuat host virtual, Anda mereferensikan sertifikat dan kunci dengan nama aliasnya.
  • key_pword - Sandi untuk kunci pribadi. Hapus parameter ini jika kunci pribadi tidak memiliki sandi.

Pastikan keystore Anda diupload dengan benar:

curl -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

Contoh respons:

{  
 "certs" : [ "myCertificate" ],
 "keys" : [ "myKey" ],
 "name" : "myKeystore"
}

Upload sertifikat dan kunci sebagai file PKCS12/PFX

Upload file PKCS12/PFX yang berisi sertifikat dan kunci pribadi dengan menggunakan Membuat alias dari file JAR atau PKCS API:

curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" \
-F file="@myKeystore.p12" -F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=pkcs12"

dengan opsi -F menentukan jalur ke file P12.

Dalam panggilan ini, Anda menentukan:

  • alias_name - Mengidentifikasi sertifikat dan kunci di key store. Saat membuat host virtual, Anda mereferensikan sertifikat dan kunci dengan nama aliasnya.
  • key_pword - Sandi untuk kunci pribadi. Hapus parameter ini jika kunci pribadi tidak memiliki sandi.

Pastikan keystore Anda diupload dengan benar:

curl -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

Contoh respons:

{  
 "certs" : [ "myCertificate" ],
 "keys" : [ "myKey" ],
 "name" : "myKeystore"
}

Buat serta upload sertifikat dan kunci yang ditandatangani sendiri

Anda dapat menggunakan API Create an alias dengan membuat sertifikat yang ditandatangani sendiri untuk membuat sertifikat dan kunci yang ditandatangani sendiri dan menguploadnya ke alias. Panggilan berikut hanya menentukan informasi yang diperlukan untuk membuat sertifikat yang ditandatangani sendiri. Anda dapat mengubah panggilan ini untuk menambahkan informasi tambahan:

curl -u orgAdminEmail:password -X POST --header "Content-Type: application/json"  \
-d "{
    "alias": "selfsigned",
    "subject": {
        "commonName": "mycert"
    }
}" \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?format=selfsignedcert"

Respons seharusnya terlihat seperti ini:

{
  "alias": "selfsigned",
  "certsInfo": {
    "certInfo": [
      {
        "basicConstraints": "CA:FALSE",
        "expiryDate": 1491497204000,
        "isValid": "Yes",
        "issuer": "CN=mycert",
        "publicKey": "RSA Public Key, 2048 bits",
        "serialNumber": "00:d1:b4:78:e1",
        "sigAlgName": "SHA256withRSA",
        "subject": "CN=mycert",
        "subjectAlternativeNames": [],
        "validFrom": 1459961204000,
        "version": 3
      }
    ],
    "certName": "selfsigned-cert"
  },
  "keyName": "selfsigned"
}

Membuat truststore

API yang Anda gunakan untuk membuat truststore sama dengan yang digunakan untuk membuat keystore. Satu-satunya perbedaan adalah Anda hanya mengupload file sertifikat, dalam bentuk file PEM, ke truststore.

Jika sertifikat adalah bagian dari rantai, Anda harus mengupload semua sertifikat dalam rantai secara terpisah ke truststore, atau membuat satu file yang berisi semua sertifikat. Anda harus menyisipkan baris kosong di antara setiap sertifikat dalam file.

Jika Anda ingin mengupload beberapa sertifikat yang ditandatangani sendiri dan bukan bagian dari rantai, gunakan teknik yang sama: jika ada beberapa sertifikat yang ingin Anda percayai, upload sertifikat tersebut dalam satu file.

Sertifikat akhir biasanya ditandatangani oleh penerbit sertifikat. Misalnya, dalam truststore, Anda mengupload sertifikat klien,client_cert_1, dan sertifikat penerbit sertifikat klien, ca_cert.

Selama autentikasi TLS dua arah, autentikasi klien akan berhasil saat server mengirim client_cert_1 ke klien sebagai bagian dari proses handshake TLS.

Atau, Anda memiliki sertifikat kedua, client_cert_2, ditandatangani oleh sertifikat yang sama, ca_cert. Namun, Anda tidak mengupload client_cert_2 ke truststore. Truststore masih berisi client_cert_1 dan ca_cert.

Ketika server meneruskan client_cert_2 sebagai bagian dari handshake TLS, permintaan akan berhasil. Ini karena Edge mengizinkan verifikasi TLS untuk berhasil jika client_cert_2 tidak ada di truststore tetapi ditandatangani oleh sertifikat yang ada di truststore. Jika Anda menghapus sertifikat CA, ca_cert, dari truststore, verifikasi TLS akan gagal.

Buat truststore kosong di lingkungan menggunakan Create a Keystore atau Truststore, API yang sama yang Anda gunakan untuk membuat keystore:

curl -u orgAdminEmail:password -X POST -H "Content-Type: text/xml" \
-d '<KeyStore name="myTruststore"/>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores

Setelah membuat truststore, upload sertifikat sebagai file PEM ke truststore menggunakan Membuat alias dari file PEM sertifikat API:

curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F certFile="@cert.pem" \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myTruststore/aliases?alias=myTruststore&format=keycertfile"

dengan opsi -F menentukan jalur ke file PEM.

Mendapatkan detail tentang keystore atau truststore yang ada

Periksa lingkungan Anda untuk menemukan keystore yang ada menggunakan List Keystores dan Truststores API:

curl -u orgAdminEmail:password -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores

Bagi pelanggan cloud, keystore default disediakan untuk organisasi uji coba gratis baik di lingkungan pengujian maupun produksi. Anda akan melihat hasil berikut untuk panggilan ini untuk kedua lingkungan:

[ "freetrial" ]

Anda dapat menggunakan keystore default ini untuk menguji API dan mengirim API ke produksi, tetapi biasanya Anda membuat keystore sendiri, dengan sertifikat dan kunci Anda sendiri, sebelum men-deploy ke produksi.

Untuk pelanggan Private Cloud, array yang ditampilkan masih kosong sampai Anda membuat keystore pertama.

Periksa konten keystore menggunakan Get a Keystore or Truststore API. Untuk pelanggan cloud, Anda akan melihat sertifikat TLS server tunggal, yaitu sertifikat default yang disediakan Apigee Edge untuk akun uji coba gratis.

curl -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/freetrial

Respons seharusnya terlihat seperti ini:

{
 "certs" : [ "wildcard.apigee.net.crt" ],
 "keys" : [ "freetrial" ],
 "name" : "freetrial"
}

Mendapatkan detail tentang alias

Dapatkan daftar semua alias untuk keystore menggunakan API List alias:

curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases"

Respons seharusnya terlihat seperti ini:

[
  "alias1",
  "alias2",
  "alias3",
]

Untuk mendapatkan semua informasi tentang alias, seperti tanggal habis masa berlaku dan penerbit, gunakan Get alias API dan tentukan nama alias:

curl  -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}"

Respons seharusnya terlihat seperti ini:

{
  "alias": "alias1",
  "certsInfo": {
    "certInfo": [
      {
        "basicConstraints": "CA:TRUE",
        "expiryDate": 1459371335000,
        "isValid": "No",
        "issuer": "EMAILADDRESS=foo@bar.com, CN=smg, OU=doc, O=Internet Widgits Pty Ltd, L=noho, ST=Some-State, C=AU",
        "publicKey": "RSA Public Key, 1024 bits",
        "serialNumber": "00:86:a0:9b:5b:91:a9:fe:92",
        "sigAlgName": "SHA256withRSA",
        "subject": "EMAILADDRESS=foo@bar.com, CN=smg, OU=doc, O=Internet Widgits Pty Ltd, L=noho, ST=Some-State, C=AU",
        "subjectAlternativeNames": [],
        "validFrom": 1456779335000,
        "version": 3
      }
    ],
    "certName": "new\-cert"
  },
  "keyName": "newssl20"
}

Untuk mendownload sertifikat untuk alias, gunakan API Ekspor sertifikat untuk alias:

curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/e/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}/certificate"

Respons seharusnya terlihat seperti ini:

-----BEGIN CERTIFICATE-----
MIIDojCCAwugAwIBAgIJAIagm1uRqf6SMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD
...
RBUkaTe/570sLHY0tvkIm5tEX36ESw==
-----END CERTIFICATE-----

Jika sertifikat yang telah habis masa berlakunya dan ingin memperpanjangnya, Anda dapat mendownload Permintaan Penandatanganan Sertifikat (CSR). Kemudian, Anda mengirimkan CSR ke CA untuk mendapatkan sertifikat baru. Agar dapat membuat CSR untuk alias, gunakan API Membuat CSR untuk alias:

curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}/csr"

Respons seharusnya terlihat seperti ini:

-----BEGIN CERTIFICATE REQUEST-----
MIIB1DCCAT0CAQAwgZMxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRl
...
RF5RMytbkxkvPxIE17mDKJH0d8aekv/iEOItZ+BtQg+EibMUkkjTzQ==
-----END CERTIFICATE REQUEST-----

Menambahkan sertifikat ke truststore untuk TLS dua arah

Saat menggunakan TLS dua arah untuk koneksi masuk, yang berarti permintaan API ke Edge, truststore berisi sertifikat atau rantai CA untuk setiap klien yang diizinkan membuat permintaan ke Edge.

Saat pertama kali mengonfigurasi truststore, Anda dapat menambahkan semua sertifikat untuk klien yang dikenal. Namun, seiring waktu, Anda mungkin ingin menambahkan sertifikat tambahan ke truststore saat menambahkan klien baru.

Untuk menambahkan sertifikat baru ke truststore yang digunakan untuk TLS dua arah:

  1. Pastikan Anda menggunakan referensi ke truststore di host virtual.
  2. Upload sertifikat baru ke truststore seperti yang dijelaskan di atas di Membuat truststore.
  3. Perbarui referensi truststore untuk menetapkannya ke nilai yang sama. Update ini menyebabkan Edge memuat ulang truststore dan sertifikat baru.

    Lihat Mengubah referensi untuk mengetahui informasi selengkapnya.

Menghapus keystore/truststore atau alias

Anda harus berhati-hati saat menghapus keystore/truststore atau alias. Jika Anda menghapus keystore, truststore, atau alias yang digunakan oleh host virtual, endpoint target, atau server target, semua panggilan API melalui host virtual atau server endpoint/target target akan gagal.

Biasanya, proses yang Anda gunakan untuk menghapus keystore/truststore atau alias adalah:

  1. Buat keystore/truststore atau alias baru seperti yang dijelaskan di atas.
  2. Untuk koneksi masuk, yang berarti permintaan API ke Edge, perbarui konfigurasi host virtual agar mereferensikan keystore dan alias kunci baru.
  3. Untuk koneksi keluar, yang berarti dari Apigee ke server backend:
    1. Update konfigurasi TargetEndpoint untuk setiap proxy API yang mereferensikan keystore dan alias kunci lama agar mereferensikan keystore dan alias kunci baru. Jika TargetEndpoint Anda mereferensikan TargetServer, perbarui definisi TargetServer agar merujuk pada keystore dan alias kunci baru.
    2. Jika keystore dan truststore direferensikan langsung dari definisi TargetEndpoint, Anda harus men-deploy ulang proxy. Jika TargetEndpoint merujuk ke definisi TargetServer, dan definisi TargetServer merujuk ke keystore dan truststore, deployment ulang proxy tidak diperlukan.
    3. Pastikan proxy API Anda berfungsi dengan benar.
    4. Hapus keystore/truststore atau alias.

Lihat Memperbarui sertifikat di alias untuk mengetahui info selengkapnya.

Menghapus keystore atau truststore

Anda dapat menghapus keystore atau truststore menggunakan Delete a Keystore or Truststore API:

curl -u orgAdminEmail:password -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myKeystoreName

Jika Anda menghapus dan membuat ulang keystore atau truststore yang digunakan oleh host virtual, Anda harus men-deploy ulang proxy API.

Menghapus alias

Anda dapat menghapus alias di keystore atau truststore menggunakan Delete alias API:

curl -u orgAdminEmail:password -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myKeystoreName/aliases/{alias_name}