Mengamankan Domain Kustom dengan SSL

Dukungan SSL App Engine menawarkan endpoint SSL yang terdistribusi secara global dan load balancing bawaan untuk melayani aplikasi Anda dengan aman, andal, dan cepat ke audiens di seluruh dunia.

Secara default, koneksi HTTPS di domain kustom Anda diaktifkan secara otomatis menggunakan sertifikat SSL terkelola. Setelah memetakan domain kustom ke aplikasi dan memperbarui data DNS Anda, App Engine akan menyediakan sertifikat SSL terkelola, memperbarui sertifikat, dan mencabutnya saat Anda menghapus domain kustom dari aplikasi Anda.

Sebelum memulai

  • Pastikan Anda telah menyiapkan domain kustom di project App Engine Anda.

  • Jika Anda menggunakan Cloud Load Balancing dan NEGS serverless untuk merutekan traffic ke aplikasi App Engine, sebaiknya petakan domain kustom Anda ke load balancer, bukan langsung ke aplikasi, dan gunakan sertifikat SSL yang dibuat untuk load balancer. Dengan demikian, Anda tidak perlu mengelola sertifikat SSL terpisah untuk setiap aplikasi serverless. Selain itu, dengan Cloud Load Balancing, Anda dapat menetapkan kebijakan SSL yang mengontrol fitur SSL yang dinegosiasikan oleh load balancer Anda dengan klien. Untuk informasi selengkapnya, lihat halaman berikut:

    Perhatikan batasan berikut:

    • Sebaiknya gunakan kontrol masuk sehingga aplikasi Anda hanya menerima permintaan yang dikirim dari load balancer (dan VPC jika Anda menggunakannya). Jika tidak, pengguna dapat menggunakan URL App Engine aplikasi Anda untuk mengabaikan load balancer, kebijakan keamanan Google Cloud Armor, sertifikat SSL, dan kunci pribadi yang diteruskan melalui load balancer.

Memverifikasi sertifikat terkelola

Setelah Anda menyiapkan domain kustom dan memperbarui data DNS, sertifikat SSL terkelola akan otomatis diberikan dalam beberapa menit. Pemilihan certificate authority dilakukan secara otomatis; sertifikat terkelola ditandatangani oleh Layanan Kepercayaan Google (GTS) atau Let's Encrypt.

Untuk memverifikasi bahwa sertifikat telah disediakan:

  1. Di konsol Google Cloud, buka App Engine > Setelan > Domain Kustom:

    Buka Custom Domains

  2. SSL security ditampilkan sebagai Google-managed.

Memecahkan masalah sertifikat SSL terkelola

  • Anda mungkin harus memperbarui data DNS untuk domain kustom guna memverifikasi nama domain. App Engine tidak dapat menyediakan sertifikat untuk domain yang belum diverifikasi.

  • Anda dapat memeriksa status sertifikat dengan Admin API menggunakan permintaan AuthorizedCertificate.GET.

  • Jika sertifikat terkelola belum disediakan karena data DNS tidak tersedia, kolom ManagedCertificate.ManagementStatus mungkin FAILED_RETRYING_NOT_VISIBLE. Verifikasi bahwa data DNS Anda sudah yang terbaru, tunggu beberapa menit, lalu coba lagi. Diperlukan waktu hingga 24 jam agar data DNS tersedia.

  • Jika statusnya adalah FAILED_PERMANENT, berarti semua upaya perpanjangan gagal. Periksa setelan DNS, lalu perbarui pemetaan domain kustom dengan mengikuti langkah-langkah untuk memperbarui ke sertifikat SSL terkelola.

Mengupgrade ke sertifikat SSL terkelola

Sebelum mengupgrade ke sertifikat SSL yang dikelola Google, perhatikan bahwa sertifikat terkelola tidak mendukung pemetaan karakter pengganti.

Jika Anda menggunakan subdomain dan sertifikat diterbitkan oleh Let's Encrypt, batas per minggu untuk setiap domain dasar adalah 50 sertifikat terkelola. Jika batas ini tercapai, App Engine akan terus mencoba menerbitkan sertifikat terkelola hingga semua permintaan terpenuhi.

Untuk berpindah dari sertifikat SSL Anda sendiri ke sertifikat SSL yang dikelola Google, atau untuk menambahkan sertifikat SSL terkelola ke aplikasi yang sudah ada dengan domain kustom, perbarui pemetaan domain Anda:

  1. Di konsol Google Cloud, buka App Engine > Setelan > Domain Kustom:

    Buka Custom Domains

  2. Pilih domain yang ingin Anda amankan, lalu klik Aktifkan keamanan terkelola.

Menonaktifkan sertifikat SSL terkelola

Untuk menonaktifkan sertifikat SSL terkelola:

  1. Di konsol Google Cloud, buka App Engine > Setelan > Domain Kustom:

    Buka Custom Domains

  2. Pilih domain, lalu klik Disable managed security.

Menggunakan sertifikat SSL Anda sendiri

Anda dapat menggunakan sertifikat sendiri daripada menggunakan sertifikat SSL terkelola. Jika sertifikat Anda tidak memiliki bukti transparansi, aplikasi Anda dapat menampilkan peringatan SSL di Chrome dikarenakan penerapan bukti transparansi sertifikat. Untuk mengetahui informasi selengkapnya tentang bukti transparansi sertifikat dan cara mematuhi, baca Menerapkan Transparansi Sertifikat.

Untuk menggunakan dan mengelola sertifikat SSL sendiri, bukan sertifikat yang dikelola Google:

  1. Pastikan Anda sudah menyiapkan domain kustom di project App Engine Anda.

  2. Nonaktifkan sertifikat default yang dikelola Google.

  3. Dapatkan sertifikat untuk domain Anda dari certificate authority (CA) pilihan Anda. Prosedur pastinya dapat bervariasi tergantung pada otoritasnya, tetapi lihat Mendapatkan sertifikat untuk mengetahui langkah-langkah umumnya.

  4. Konversi file kunci pribadi dan sertifikat SSL Anda ke dalam format yang didukung oleh App Engine. Sebelum dapat mengupload file, kunci pribadi Anda harus dikonversi menjadi kunci pribadi RSA dan sertifikat SSL Anda harus digabungkan menjadi satu file. Untuk informasi selengkapnya, lihat Mengonversi kunci pribadi dan menggabungkan sertifikat SSL.

  5. Pastikan Anda memiliki izin yang tepat di Konsol Google Cloud dan kepemilikan terverifikasi (langkah 3) atas semua domain terkait atau domain induknya. Contoh:

    • Jika sertifikat ini ditujukan untuk www.example.com, Anda dapat memverifikasi kepemilikan www.example.com atau example.com.
    • Jika sertifikat ditujukan untuk www.example.com dan sub.example.com, Anda dapat memverifikasi kepemilikan www.example.com dan sub.example.com, atau example.com.
    • Jika sertifikat ditujukan untuk *.example.com, Anda harus memverifikasi kepemilikan example.com.
  6. Upload kunci pribadi dan sertifikat SSL Anda, lalu petakan domain ke aplikasi Anda:

    1. Di Konsol Google Cloud, buka App Engine > Setelan > Sertifikat SSL:

      Buka Sertifikat SSL

    2. Klik Upload a new certificate.

    3. Upload sertifikat SSL gabungan Anda di bagian PEM encoded X.509 public key certificate, misalnya concat.crt, lalu upload kunci pribadi RSA di bagian Kunci pribadi RSA yang dienkode PEM dan tidak dienkripsi, misalnya myserver.key.pem.
    4. Klik Upload. Setiap sertifikat SSL yang Anda upload akan terlihat dan tersedia untuk digunakan oleh semua project Google Cloud lainnya, sehingga Anda tidak perlu mengupload sertifikat yang sama berulang kali.
    5. Pilih sertifikat yang ingin ditetapkan ke domain, lalu klik Simpan untuk menggunakan SSL untuk domain tersebut.

  7. Uji perubahan dengan mengunjungi domain Anda di browser, menggunakan https, misalnya, https://www.example.com.

Mentransfer pemetaan dari sertifikat penyajian ke sertifikat baru

Menjelang tanggal habis masa berlakunya, Anda harus mengupload sertifikat baru dan mentransfer pemetaan sertifikat lama yang ada ke sertifikat baru tersebut. Prosedur berikut mengasumsikan bahwa sertifikat yang ada belum habis masa berlakunya dan saat ini menyajikan domain kustom Anda.

Untuk mentransfer pemetaan dari sertifikat yang sedang beroperasi:

  1. Dapatkan sertifikat baru untuk domain Anda dari certificate authority (CA) pilihan Anda. Lihat Mendapatkan sertifikat untuk mengetahui langkah-langkah umumnya.

  2. Konversi file kunci pribadi dan sertifikat SSL Anda ke dalam format yang didukung oleh App Engine. Untuk mengetahui detailnya, lihat Mengonversi kunci pribadi dan menggabungkan sertifikat SSL.

  3. Upload kunci pribadi RSA dan sertifikat SSL gabungan Anda:

    1. Upload sertifikat SSL di halaman sertifikat SSL.

      Buka Sertifikat SSL
      1. Klik Upload a new certificate.

      2. Upload sertifikat SSL gabungan Anda pada Public key certificate X.509 yang dienkode PEM, misalnya concat.crt, lalu upload kunci pribadi RSA di bagian Kunci pribadi RSA yang dienkode PEM dan tidak dienkripsi, misalnya myserver.key.pem.
      3. Klik Upload.
    2. Pilih sertifikat baru yang baru saja Anda tambahkan dari daftar sertifikat, lalu pilih domain yang disediakan oleh sertifikat lama.
    3. Klik Simpan untuk mentransfer pemetaan dari sertifikat lama ke sertifikat baru.

Mendapatkan sertifikat

Proses untuk mendapatkan sertifikat SSL akan bervariasi, bergantung pada certificate authority yang Anda gunakan. Petunjuk yang diberikan di sini mungkin perlu sedikit penyesuaian. Biasanya, setiap certificate authority memberikan petunjuk untuk memandu Anda dalam melakukan prosesnya.

Untuk memperoleh sertifikat agar dapat digunakan dengan aplikasi App Engine Anda:

  1. Buat kunci pribadi dan permintaan penandatanganan sertifikat (CSR) menggunakan alat openssl:

    1. Jalankan perintah berikut dari direktori tempat Anda ingin membuat file server.csr:

      openssl req -nodes -newkey rsa:2048 -keyout [MY_PRIVATE_KEY].key -out [MY_CSR].csr
      

      dengan:

      • [MY_PRIVATE_KEY].key adalah file yang dihasilkan untuk menyimpan kunci pribadi Anda. Contoh: myserver.key
      • [MY_CSR].csr adalah file yang dihasilkan untuk permintaan pendaftaran sertifikat Anda. Contoh: server.csr
    2. Jika diminta, masukkan informasi berikut:

      • Kode negara 2 digit Anda, misalnya, US untuk Amerika Serikat.
      • Nama kota Anda.
      • Nama perusahaan Anda. Anda dapat menggunakan nama sendiri jika tidak memiliki perusahaan.
      • Unit organisasi Anda atau NA jika Anda tidak memilikinya.
      • Nama umum yang mewakili domain Anda, misalnya: www.example.com
      • Alamat email Anda.

      Anda tidak perlu memberikan nilai lainnya, semuanya bersifat opsional.

  2. Tentukan certificate authority mana yang sesuai untuk Anda, lalu beli sertifikat. Misalnya, Anda dapat menggunakan: SSLMate, Thawte, Comodo, atau certificate authority lainnya.

    Untuk mengetahui detail tentang jenis sertifikat yang didukung, lihat Dukungan App Engine untuk sertifikat SSL.

  3. Saat CA meminta konten file CSR Anda, ikuti petunjuknya untuk menyalin dan menempelkan konten dari file .csr yang Anda buat sebelumnya, misalnya server.csr.

  4. Ikuti perintah saat CA Anda meminta persetujuan pemilik domain.

  5. Setelah Anda memberikan persetujuan pemilik domain, CA akan mengirimkan sertifikat kepada Anda, yang biasanya berupa file zip. Ekstrak file tersebut ke direktori yang berfungsi sehingga Anda dapat menggabungkan sertifikat tersebut untuk diupload ke App Engine.

Mengonversi kunci pribadi dan menggabungkan sertifikat SSL {#convert_private_keys_and_concatenate_ssl_certificates}

Anda harus mengonversi kunci pribadi menjadi kunci pribadi RSA dan menggabungkan semua sertifikat SSL Anda, sebelum mengupload kunci pribadi dan sertifikat SSL ke App Engine.

  1. Konversi file kunci pribadi yang Anda buat sebelumnya menjadi kunci pribadi RSA yang tidak dienkripsi. Misalnya, Anda dapat menjalankan perintah openssl rsa berikut:

    openssl rsa -in [MY_PRIVATE_KEY].key -out [MY_RSA_KEY].key.pem
    

    dengan:

    • [MY_PRIVATE_KEY].key adalah file yang dihasilkan yang berisi kunci pribadi Anda dan tempat penyimpanannya. Contoh: myserver.key
    • [MY_RSA_KEY].key adalah file yang dihasilkan yang berisi kunci pribadi RSA yang tidak dienkripsi. Contoh: myserver.key.pem

      Contoh:

      openssl rsa -in myserver.key -out myserver.key.pem
      
  2. Gabungkan semua file .crt dari CA Anda ke dalam satu file, menggunakan perintah berikut:

    cat [MY_DOMAIN_CERT].crt [MY_SecureServerCA].crt [MY_TrustCA].crt [MY_TrustExternalCARoot].crt > [MY_CONCAT_CERT].crt
    

    di mana

    • [MY_DOMAIN_CERT].crt adalah sertifikat untuk domain Anda. Contoh: www_example_com.crt
    • [MY_SecureServerCA].crt, [MY_TrustCA].crt, dan [MY_TrustExternalCARoot].crt adalah file sertifikat lain yang disediakan oleh CA Anda.
    • [MY_CONCAT_CERT].crt adalah file gabungan yang berisi semua file sertifikat .crt dari CA Anda. Contoh: concat.crt

      Contoh:

      cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
      
  3. Verifikasi sertifikat SSL dan kunci pribadi Anda:

    1. Untuk memverifikasi bahwa kunci pribadi dan sertifikat cocok, Anda dapat menggunakan perintah openssl x509 dan openssl rsa. Contoh:

      openssl x509 -noout -modulus -in concat.crt | openssl md5
      openssl rsa -noout -modulus -in myserver.key.pem | openssl md5
      

      Baik perintah openssl x509 dan openssl rsa akan menampilkan output yang sama.

    2. Untuk memverifikasi bahwa sertifikat dan rantai CA-nya valid, Anda dapat menggunakan perintah openssl verify. Contoh:

      openssl verify -verbose -CAfile concat.crt concat.crt
      
  4. Jika sudah siap, Anda dapat mengupload kunci pribadi RSA dan sertifikat gabungan ke App Engine.

Dukungan App Engine untuk sertifikat SSL

App Engine mendukung jenis sertifikat berikut:

  • Domain Tunggal/Nama Host
  • Ditandatangani sendiri
  • Karakter pengganti
  • Nama Alternatif Subjek (SAN)/Multi-Domain

Diperlukan beberapa hal dari sertifikat dan kunci Anda:

  • Kunci Pribadi dan Sertifikat harus diupload dalam format PEM.
  • Kunci Pribadi tidak boleh dienkripsi.
  • File sertifikat dapat berisi maksimal lima sertifikat; jumlah ini termasuk sertifikat berantai dan intermediate certificate.
  • Semua nama subjek pada sertifikat host harus cocok atau merupakan subdomain dari domain terverifikasi pengguna.
  • Kunci pribadi harus menggunakan enkripsi RSA.
  • Modulus kunci maksimum yang diizinkan: 2048 bit

Jika sertifikat host memerlukan sertifikat berantai atau intermediate certificate, sebanyak yang diterbitkan Certificate Authority (CA), Anda harus menambahkan sertifikat berantai atau intermediate certificate ke akhir file sertifikat publik.

Beberapa fitur App Engine menggunakan subdomain khusus. Misalnya, aplikasi dapat menggunakan subdomain untuk menangani layanan aplikasi, atau untuk menangani berbagai versi aplikasi Anda. Untuk menggunakannya dengan SSL, sebaiknya Anda menyiapkan sertifikat SAN atau karakter pengganti. Sertifikat karakter pengganti hanya mendukung satu tingkat subdomain.

Menghapus sertifikat SSL kustom

Untuk berhenti menggunakan sertifikat SSL kustom, lakukan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Setelan sertifikat SSL App Engine.

    Buka SSL certificate settings

  2. Klik sertifikat yang ingin dihapus dari domain Anda.

  3. Batalkan pilihan nama domain yang tidak ingin dikaitkan lagi dengan sertifikat SSL-nya, lalu klik Simpan.

Menggunakan header Strict-Transport-Security

Untuk alasan keamanan, semua aplikasi harus menyarankan pada klien untuk menggunakan koneksi https. Untuk memerintahkan browser agar lebih memilih https daripada http, gunakan header Strict-Transport-Security.

Melihat cipher dan versi TLS yang diaktifkan

  1. Instal Network Mapper nmap di komputer Anda jika belum tersedia. Lihat https://nmap.org/ untuk petunjuk penginstalan.

  2. Untuk melihat versi TLS dan cipher yang diaktifkan untuk aplikasi Anda, masukkan perintah berikut:

    nmap -sV --script ssl-enum-ciphers -p 443 HOSTNAME

    Ganti HOSTNAME dengan nama host untuk aplikasi Anda. Anda dapat menggunakan domain kustom atau nama host appspot.com yang dibuat oleh App Engine untuk aplikasi Anda. Contoh:

    nmap -sV --script ssl-enum-ciphers -p 443 example.uc.r.appspot.com

Menonaktifkan cipher dan versi TLS

Jika menggunakan Cloud Load Balancing dan NEGS serverless untuk merutekan traffic ke aplikasi App Engine, Anda dapat menonaktifkan versi atau cipher TLS dengan menetapkan kebijakan keamanan SSL yang menentukan cipher dan versi TLS yang dapat digunakan untuk koneksi HTTPS atau SSL.