Konfigurasikan SSL/TLS di Amazon Linux 2 - Amazon Elastic Compute Cloud

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasikan SSL/TLS di Amazon Linux 2

Lapisan Soket Aman/Keamanan Lapisan Pengangkutan (SSL/TLS) membuat saluran terenkripsi antara server web dan klien web yang melindungi data bergerak agar tidak disadap. Tutorial ini menjelaskan cara menambahkan dukungan secara manual untuk SSL/TLS pada instans EC2 dengan Amazon Linux 2 dan server web Apache. Tutorial ini mengasumsikan bahwa Anda tidak menggunakan penyeimbang beban. Jika menggunakan Elastic Load Balancing, Anda dapat memilih untuk mengonfigurasi pemindahan SSL pada penyeimbang beban dengan menggunakan sertifikat dari AWS Certificate Manager sebagai gantinya.

Untuk alasan historis, enkripsi web sering disebut hanya sebagai SSL. Meskipun peramban web masih mendukung SSL, protokol penerusnya, TLS, lebih aman dari serangan. Amazon Linux 2 menonaktifkan dukungan sisi server untuk semua versi SSL secara default. Badan standar keamanan menganggap TLS 1.0 tidak aman. TLS 1.0 dan TLS 1.1 secara resmi usang pada Maret 2021. Tutorial ini berisi panduan yang secara eksklusif didasarkan pada pengaktifan TLS 1.2. TLS 1.3 diselesaikan pada tahun 2018 dan tersedia di Amazon Linux 2 selama pustaka TLS yang mendasarinya (OpenSSL dalam tutorial ini) didukung dan aktif. Klien harus mendukung TLS 1.2 atau versi yang lebih baru pada 28 Juni 2023. Untuk informasi selengkapnya tentang standar enkripsi yang diperbarui, lihat RFC 7568 dan RFC 8446.

Tutorial ini mengacu pada enkripsi web modern hanya sebagai TLS.

penting

Prosedur ini ditujukan untuk digunakan dengan Amazon Linux 2. Kami juga berasumsi bahwa Anda memulai dengan instans Amazon EC2 baru. Jika Anda mencoba untuk mengatur instans EC2 yang menjalankan distribusi berbeda, atau instans yang menjalankan versi lama dari Amazon Linux 2, beberapa prosedur dalam tutorial ini mungkin tidak berfungsi. Untuk AMI Amazon Linux, lihat Konfigurasikan SSL/TLS di Amazon Linux. Untuk Ubuntu, lihat dokumentasi komunitas berikut ini: Buka SSL di Ubuntu. Untuk Red Hat Enterprise Linux, lihat yang berikut ini: Menyiapkan Server Web Apache HTTP. Untuk distribusi lain, lihat dokumentasi spesifik mereka.

catatan

Atau, Anda dapat menggunakan AWS Certificate Manager (ACM) untuk kantong AWS Nitro, yang merupakan aplikasi enclave yang memungkinkan Anda menggunakan sertifikat SSL/TLS publik dan pribadi dengan aplikasi web dan server Anda yang berjalan di instans Amazon EC2 dengan Nitro Enclave. AWS Nitro Enclave adalah kemampuan Amazon EC2 yang memungkinkan pembuatan lingkungan komputasi terisolasi untuk melindungi dan memproses data yang sangat sensitif, seperti sertifikat SSL/TLS dan kunci privat.

ACM for Nitro Enclave bekerja dengan nginx yang berjalan di instans Amazon EC2 Linux Anda untuk membuat kunci privat, mendistribusikan sertifikat dan kunci privat, dan mengelola perpanjangan sertifikat.

Untuk menggunakan ACM for Nitro Enclave, Anda harus menggunakan instans Linux mendukung enclave.

Untuk informasi lebih lanjut, lihat Apa itu Enklaf AWS Nitro? dan AWS Certificate Manager untuk Enklaf Nitro di Panduan Pengguna AWS Nitro Enclave.

Prasyarat

Sebelum memulai tutorial ini, selesaikan langkah-langkah berikut:

  • Luncurkan instans Amazon Linux 2 yang didukung EBS. Untuk informasi selengkapnya, lihat Langkah 1: Luncurkan instans.

  • Konfigurasikan grup keamanan Anda agar instans Anda dapat menerima koneksi di port TCP berikut:

    • SSH (port 22)

    • HTTP (port 80)

    • HTTPS (port 443)

    Untuk informasi selengkapnya, lihat Memberikan otorisasi terhadap lalu lintas masuk untuk instans Linux Anda.

  • Instal server web Apache. Untuk step-by-step petunjuk, lihat Tutorial: Menginstal Server Web LAMP di Amazon Linux 2. Hanya paket httpd dan dependensinya yang diperlukan, jadi Anda dapat mengabaikan instruksi yang melibatkan PHP dan MariaDB.

  • Untuk mengidentifikasi dan mengautentikasi situs web, infrastruktur kunci publik (PKI) TLS mengandalkan Sistem Nama Domain (DNS). Untuk menggunakan instans EC2 guna meng-host situs web publik, Anda perlu mendaftarkan nama domain untuk server web atau mentransfer nama domain yang ada ke host Amazon EC2 Anda. Berbagai pendaftaran domain pihak ketiga dan layanan hosting DNS tersedia untuk ini, atau Anda dapat menggunakan Amazon Route 53.

Langkah 1: Aktifkan TLS di server

Opsi: Selesaikan tutorial ini menggunakan otomatisasi

Untuk menyelesaikan tutorial ini menggunakan AWS Systems Manager Otomasi alih-alih tugas-tugas berikut, jalankan dokumen otomatisasi.

Prosedur ini membawa Anda melalui proses pengaturan TLS di Amazon Linux 2 dengan sertifikat digital yang ditandatangani sendiri.

catatan

Sertifikat yang ditandatangani sendiri dapat diterima untuk pengujian, tetapi bukan produksi. Jika Anda menampilkan sertifikat yang ditandatangani sendiri ke internet, pengunjung ke situs Anda disambut oleh peringatan keamanan.

Untuk mengaktifkan TLS di server
  1. Sambungkan ke instans Anda dan konfirmasi bahwa Apache sedang berjalan.

    [ec2-user ~]$ sudo systemctl is-enabled httpd

    Jika nilai yang dikembalikan bukan "diaktifkan", mulai Apache dan atur Apache untuk memulai setiap kali sistem booting.

    [ec2-user ~]$ sudo systemctl start httpd && sudo systemctl enable httpd
  2. Untuk memastikan bahwa semua paket perangkat lunak Anda telah diperbarui, lakukan pembaruan perangkat lunak cepat di instans Anda. Proses ini mungkin memerlukan waktu beberapa menit, tetapi penting untuk memastikan bahwa Anda memiliki pembaruan keamanan dan perbaikan bug terbaru.

    catatan

    Opsi -y akan menginstal pembaruan tanpa meminta konfirmasi. Jika Anda ingin memeriksa pembaruan sebelum menginstal, Anda dapat menghapus opsi ini.

    [ec2-user ~]$ sudo yum update -y
  3. Setelah instans Anda diperbarui, tambahkan dukungan TLS dengan menginstal modul Apache mod_ssl.

    [ec2-user ~]$ sudo yum install -y mod_ssl

    Instans Anda sekarang memiliki file berikut yang Anda gunakan untuk mengonfigurasi server aman dan membuat sertifikat untuk pengujian:

    • /etc/httpd/conf.d/ssl.conf

      File konfigurasi untuk mod_ssl. File tersebut berisi arahan yang memberi tahu Apache tempat untuk menemukan kunci dan sertifikat enkripsi, versi protokol TLS yang akan dimungkinkan, dan cipher enkripsi yang akan diterima.

    • /etc/pki/tls/certs/make-dummy-cert

      Skrip untuk membuat sertifikat X.509 yang ditandatangani sendiri dan kunci privat untuk host server Anda. Sertifikat ini berguna untuk menguji apakah Apache telah diatur dengan benar untuk menggunakan TLS. Karena tidak menawarkan bukti identitas, sertifikat ini tidak boleh digunakan dalam produksi. Jika digunakan dalam produksi, sertifikat ini memicu peringatan di peramban Web.

  4. Jalankan skrip untuk membuat sertifikat tiruan yang ditandatangani sendiri dan kunci untuk pengujian.

    [ec2-user ~]$ cd /etc/pki/tls/certs sudo ./make-dummy-cert localhost.crt

    Ini menghasilkan file baru localhost.crt dalam direktori /etc/pki/tls/certs/. Nama file yang ditentukan cocok dengan default yang ditetapkan dalam arahan SSLCertificateFile di /etc/httpd/conf.d/ssl.conf.

    File ini berisi sertifikat yang ditandatangani sendiri dan kunci privat sertifikat. Apache memerlukan sertifikat dan kunci dalam format PEM, yang terdiri dari karakter ASCII berenkode Base64 yang dibingkai dengan baris “BEGIN” dan “END” seperti dalam contoh singkat berikut.

    -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD2KKx/8Zk94m1q 3gQMZF9ZN66Ls19+3tHAgQ5Fpo9KJDhzLjOOCI8u1PTcGmAah5kEitCEc0wzmNeo BCl0wYR6G0rGaKtK9Dn7CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vr GvwnKoMh3DlK44D9dX7IDua2PlYx5+eroA+1Lqf32ZSaAO0bBIMIYTHigwbHMZoT ... 56tE7THvH7vOEf4/iUOsIrEzaMaJ0mqkmY1A70qQGQKBgBF3H1qNRNHuyMcPODFs 27hDzPDinrquSEvoZIggkDMlh2irTiipJ/GhkvTpoQlv0fK/VXw8vSgeaBuhwJvS LXU9HvYq0U6O4FgD3nAyB9hI0BE13r1HjUvbjT7moH+RhnNz6eqqdscCS09VtRAo 4QQvAqOa8UheYeoXLdWcHaLP -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy ... z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0 CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vrGvwnKoMh3DlK44D9dlU3 WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak 3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg== -----END CERTIFICATE-----

    Nama dan ekstensi file mudah dan tidak memengaruhi fungsi. Misalnya, Anda dapat meminta sertifikat cert.crt, cert.pem, atau nama file lainnya, selama arahan terkait dalam file ssl.conf menggunakan nama yang sama.

    catatan

    Ketika Anda mengganti file TLS default dengan file kustom milik Anda sendiri, pastikan file tersebut dalam format PEM.

  5. Buka file /etc/httpd/conf.d/ssl.conf menggunakan editor teks favorit Anda (seperti vim atau nano) sebagai pengguna root dan komentari baris berikut, karena sertifikat tiruan yang ditandatangani sendiri juga berisi kunci. Jika Anda tidak memberikan komentar pada baris ini sebelum menyelesaikan langkah berikutnya, layanan Apache gagal dimulai.

    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
  6. Mulai Ulang Apache.

    [ec2-user ~]$ sudo systemctl restart httpd
    catatan

    Pastikan bahwa TCP port 443 dapat diakses di instans EC2 Anda, seperti yang dijelaskan sebelumnya.

  7. Server web Apache Anda sekarang dapat mendukung HTTPS (HTTP aman) melalui port 443. Uji web tersebut dengan memasukkan alamat IP atau nama domain instans EC2 Anda yang sepenuhnya memenuhi syarat ke dalam bilah URL peramban dengan prefiks https://.

    Karena Anda terhubung ke situs dengan sertifikat host yang ditandatangani sendiri dan tidak tepercaya, peramban Anda dapat menampilkan serangkaian peringatan keamanan. Abaikan peringatan tersebut dan lanjutkan ke situs.

    Jika halaman uji Apache default terbuka, berarti Anda telah berhasil mengonfigurasi TLS di server Anda. Semua data yang masuk antara peramban dan server sekarang terenkripsi.

    catatan

    Untuk mencegah pengunjung situs menghadapi layar peringatan, Anda harus mendapatkan sertifikat tepercaya yang ditandatangani CA yang tidak hanya mengenkripsi, tetapi juga mengautentikasi Anda sebagai pemilik situs.

Langkah 2: Mendapatkan sertifikat yang ditandatangani CA

Anda dapat menggunakan proses berikut untuk mendapatkan sertifikat yang ditandatangani CA:

  • Membuat permintaan penandatanganan sertifikat (CSR) dari kunci privat

  • Kirim CSR ke otoritas sertifikasi (CA)

  • Dapatkan sertifikat host yang ditandatangani

  • Konfigurasikan Apache untuk menggunakan sertifikat

Sertifikat host TLS X.509 yang ditandatangani sendiri bersifat identik secara kriptologi dengan sertifikat yang ditandatangani CA. Perbedaannya bersifat sosial, bukan matematika. CA menjanjikan, setidaknya, untuk memvalidasi kepemilikan domain sebelum menerbitkan sertifikat kepada pemohon. Setiap peramban web berisi daftar CA tepercaya oleh vendor peramban untuk melakukan hal ini. Sertifikat X.509 utamanya terdiri dari kunci publik yang sesuai dengan kunci server privat Anda, dan tanda tangan oleh CA yang terhubung secara kriptografi dengan kunci publik. Ketika peramban terhubung ke server web melalui HTTPS, server menyajikan sertifikat untuk peramban untuk memeriksa daftar CA tepercaya. Jika penandatangan ada di daftar, atau dapat diakses melalui rantai kepercayaan yang terdiri dari penanda tangan tepercaya lainnya, peramban menegosiasikan saluran data terenkripsi cepat dengan server dan memuat halaman.

Sertifikat umumnya memerlukan biaya karena tenaga kerja yang terlibat dalam memvalidasi permintaan tersebut, jadi tidak masalah untuk mempertimbangkan berbagai kemungkinan. Beberapa CA menawarkan sertifikat tingkat dasar secara cuma-cuma. Hal yang paling menonjol dari CA adalah proyek Let's Encrypt, yang juga mendukung otomatisasi pembuatan sertifikat dan proses pembaruan. Untuk informasi selengkapnya tentang penggunaan sertifikat Let's Encrypt, lihat Mendapatkan Certbot.

Jika Anda berencana untuk menawarkan layanan kelas komersial, AWS Certificate Manager adalah pilihan yang baik.

Yang mendasari sertifikat host adalah kuncinya. Sejak tahun 2019, pemerintah dan kelompok industri merekomendasikan penggunaan ukuran kunci minimum (modulus) sebesar 2048 bit untuk kunci RSA yang ditujukan untuk melindungi dokumen, hingga tahun 2030. Ukuran modulus default yang dihasilkan oleh OpenSSL di Amazon Linux 2 adalah 2048 bit, yang dapat digunakan dalam sertifikat yang ditandatangani CA. Dalam prosedur berikut, langkah opsional yang disediakan bagi mereka yang menginginkan kunci yang disesuaikan, misalnya, kunci dengan modulus yang lebih besar atau menggunakan algoritma enkripsi berbeda.

penting

Instruksi untuk memperoleh sertifikat host yang ditandatangani CA ini tidak berfungsi kecuali Anda memiliki domain DNS yang terdaftar dan di-hosting.

Untuk mendapatkan sertifikat yang ditandatangani CA
  1. Hubungkan ke instans Anda dan navigasikan ke /etc/pki/tls/private/. Ini adalah direktori tempat Anda menyimpan kunci privat server untuk TLS. Jika Anda memilih untuk menggunakan kunci host yang ada untuk membuat CSR, lewati ke Langkah 3.

  2. (Opsional) Buat kunci privat baru. Berikut ini adalah beberapa contoh konfigurasi kunci. Setiap kunci yang dihasilkan dapat berfungsi dengan server web Anda, tetapi memiliki tingkat dan tipe keamanan yang berbeda-beda dalam penerapannya.

    • Contoh 1: Buat kunci host RSA default. File yang dihasilkan, custom.key, adalah kunci privat RSA 2048-bit.

      [ec2-user ~]$ sudo openssl genrsa -out custom.key
    • Contoh 2: Buat kunci RSA yang lebih kuat dengan modulus yang lebih besar. File yang dihasilkan, custom.key, adalah kunci privat RSA 4096-bit.

      [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
    • Contoh 3: Buat kunci RSA yang dienkripsi 4096-bit dengan perlindungan kata sandi. File yang dihasilkan, custom.key, adalah kunci privat RSA 4096-bit yang dienkripsi dengan cipher AES-128.

      penting

      Mengenkripsi kunci akan memberikan keamanan yang lebih besar, tetapi karena kunci terenkripsi memerlukan kata sandi, layanan yang bergantung pada kata sandi tersebut tidak dapat dimulai secara otomatis. Setiap kali menggunakan kunci ini, Anda harus memberikan kata sandi (dalam contoh sebelumnya, "abcde12345") melalui koneksi SSH.

      [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
    • Contoh 4: Buat kunci menggunakan cipher non-RSA. Kriptografi RSA dapat menjadi cukup lambat karena ukuran kunci publiknya, yang didasarkan pada produk dua angka utama yang besar. Namun, kunci untuk TLS yang menggunakan cipher non-RSA masih dapat dibuat. Kunci-kunci berdasarkan matematika kurva eliptik ukurannya lebih kecil dan secara komputasi lebih cepat ketika memberikan tingkat keamanan yang setara.

      [ec2-user ~]$ sudo openssl ecparam -name prime256v1 -out custom.key -genkey

      Hasilnya adalah kunci privat kurva eliptik 256-bit menggunakan prime256v1, "kurva yang diberi nama" yang didukung OpenSSL. Kekuatan kriptografinya sedikit lebih besar dari kunci RSA 2048-bit, menurut NIST.

      catatan

      Tidak semua CA memberikan tingkat dukungan yang sama untuk elliptic-curve-based kunci seperti untuk kunci RSA.

    Pastikan bahwa kunci pribadi baru tersebut memiliki izin dan kepemilikan yang sangat ketat (pemilik=akar, grup=akar, baca/tulis untuk pemilik saja). Perintah akan seperti yang ditunjukkan dalam contoh berikut.

    [ec2-user ~]$ sudo chown root:root custom.key [ec2-user ~]$ sudo chmod 600 custom.key [ec2-user ~]$ ls -al custom.key

    Perintah sebelumnya akan memberikan hasil berikut.

    -rw------- root root custom.key

    Setelah membuat dan mengonfigurasikan kunci yang memuaskan, Anda dapat membuat CSR.

  3. Buat CSR dengan menggunakan kunci yang Anda kehendaki. Contoh berikut menggunakan custom.key.

    [ec2-user ~]$ sudo openssl req -new -key custom.key -out csr.pem

    OpenSSL membuka dialog dan meminta Anda memasukkan informasi yang ditampilkan dalam tabel berikut. Semua kolom kecuali Nama Umum adalah opsional untuk sertifikat host dasar yang divalidasi domain.

    Nama Deskripsi Contoh
    Nama Negara Singkatan ISO dua huruf untuk negara Anda. AS (=Amerika Serikat)
    Nama Negara Bagian atau Provinsi Nama negara bagian atau provinsi tempat organisasi Anda berada. Nama ini tidak boleh disingkat. Washington
    Nama Lokal Lokasi organisasi Anda, contohnya suatu kota. Seattle
    Nama Organisasi Nama lengkap legal organisasi Anda. Jangan menyingkat nama organisasi Anda. Contoh Perusahaan
    Nama Unit Organisasi Informasi tambahan tentang organisasi, jika ada. Contoh Departemen
    Nama Umum

    Nilai ini harus sama persis dengan alamat web yang Anda harapkan akan dimasukkan pengguna ke peramban. Biasanya, ini berarti nama domain dengan nama host berprefiks atau alias dalam bentuk www.example.com. Dalam pengujian dengan sertifikat yang ditandatangani sendiri dan tanpa resolusi DNS, nama umum dapat terdiri dari nama host saja. CA juga menawarkan sertifikat yang lebih mahal yang menerima nama wild-card seperti *.example.com.

    www.example.com
    Alamat Email Alamat email administrator server. someone@example.com

    Terakhir, OpenSSL meminta kata sandi tantangan opsional dari Anda. Kata sandi ini hanya berlaku untuk CSR dan transaksi antara Anda dan CA Anda, maka ikutilah rekomendasi CA tentang hal ini dan bidang pilihan lainnya, nama perusahaan opsional. Kata sandi tantangan CSR tidak berpengaruh pada operasi server.

    File yang dihasilkan csr.pem berisi kunci publik, tanda tangan digital kunci publik Anda, dan metadata yang Anda masukkan.

  4. Kirimkan CSR ke CA. Hal ini biasanya mencakup membuka file CSR Anda dalam sebuah editor teks dan menyalin konten ke dalam bentuk web. Pada saat ini, Anda mungkin diminta untuk memberi satu atau lebih nama alternatif subjek (SAN) untuk ditempatkan pada sertifikat. Jika www.example.com adalah nama umum, example.com akan menjadi SAN yang baik, dan sebaliknya. Pengunjung ke situs Anda yang memasukkan nama-nama ini akan melihat koneksi tanpa kesalahan. Jika formulir web CA Anda mengizinkannya, masukkan nama umum dalam daftar SAN. Beberapa CA memasukkannya secara otomatis.

    Setelah permintaan Anda disetujui, Anda menerima sertifikat host baru yang ditandatangani oleh CA. Anda mungkin juga diminta mengunduh file sertifikat menengah yang berisi sertifikat tambahan yang diperlukan untuk melengkapi rantai kepercayaan CA.

    catatan

    CA Anda mungkin mengirimi Anda file dalam banyak format yang dimaksudkan untuk berbagai tujuan. Untuk tutorial ini, Anda hanya dapat menggunakan file sertifikat dalam format PEM, yang biasanya (tetapi tidak selalu) ditandai dengan ekstensi file .pem atau .crt. Jika Anda tidak yakin file mana yang akan digunakan, buka file dengan editor teks dan temukan yang berisi satu atau beberapa blok yang dimulai dengan baris berikut.

    - - - - -BEGIN CERTIFICATE - - - - -

    File juga harus berakhir dengan baris berikut.

    - - - -END CERTIFICATE - - - - -

    Anda juga dapat menguji file pada baris perintah seperti yang ditunjukkan pada hal berikut.

    [ec2-user certs]$ openssl x509 -in certificate.crt -text

    Pastikan baris ini muncul di file. Jangan gunakan file yang diakhiri dengan .p7b, .p7c, atau ekstensi file serupa.

  5. Letakkan sertifikat baru yang ditandatangani CA dan setiap sertifikat menengah di direktori /etc/pki/tls/certs.

    catatan

    Ada beberapa cara untuk mengunggah sertifikat baru Anda ke instans EC2 Anda, tetapi cara yang paling sederhana dan informatif adalah dengan membuka teks editor (misalnya, vi, nano, atau notepad) di komputer lokal dan instans Anda, lalu menyalin dan menempelkan konten file di antaranya. Anda memerlukan izin [sudo] root ketika melakukan operasi ini pada instans EC2. Dengan cara ini, Anda dapat segera melihat apakah ada masalah perizinan atau jalur. Namun, berhati-hatilah untuk tidak menambahkan baris tambahan saat menyalin konten, atau untuk mengubahnya dengan cara apa pun.

    Dari dalam direktori /etc/pki/tls/certs, periksa bahwa pengaturan kepemilikan, grup, dan izin file cocok dengan default Amazon Linux 2 yang sangat ketat (pemilik=root, grup=root, baca/tulis hanya untuk pemilik). Contoh berikut menunjukkan perintah yang dapat digunakan.

    [ec2-user certs]$ sudo chown root:root custom.crt [ec2-user certs]$ sudo chmod 600 custom.crt [ec2-user certs]$ ls -al custom.crt

    Perintah ini akan memberikan hasil berikut.

    -rw------- root root custom.crt

    Izin untuk file sertifikat menengah tidak terlalu ketat (pemilik=root, grup=root, pemilik dapat menulis, grup dapat membaca, dunia dapat membaca). Contoh berikut menunjukkan perintah yang dapat digunakan.

    [ec2-user certs]$ sudo chown root:root intermediate.crt [ec2-user certs]$ sudo chmod 644 intermediate.crt [ec2-user certs]$ ls -al intermediate.crt

    Perintah ini akan memberikan hasil berikut.

    -rw-r--r-- root root intermediate.crt
  6. Tempatkan kunci privat yang Anda gunakan untuk membuat CSR di direktori /etc/pki/tls/private/.

    catatan

    Ada beberapa cara untuk mengunggah kunci kustom Anda ke instans EC2, tetapi cara yang paling sederhana dan informatif adalah dengan membuka teks editor (misalnya, vi, nano, atau notepad) di komputer lokal dan instans Anda, lalu menyalin dan menempelkan konten file di antaranya. Anda memerlukan izin [sudo] root ketika melakukan operasi ini pada instans EC2. Dengan cara ini, Anda dapat segera melihat apakah ada masalah perizinan atau jalur. Namun, berhati-hatilah untuk tidak menambahkan baris tambahan saat menyalin konten, atau untuk mengubahnya dengan cara apa pun.

    Dari dalam direktori /etc/pki/tls/private, gunakan perintah berikut untuk memverifikasi bahwa pengaturan kepemilikan, grup, dan izin file cocok dengan default Amazon Linux 2 yang sangat ketat (pemilik=root, grup=root, baca/tulis hanya untuk pemilik).

    [ec2-user private]$ sudo chown root:root custom.key [ec2-user private]$ sudo chmod 600 custom.key [ec2-user private]$ ls -al custom.key

    Perintah ini akan memberikan hasil berikut.

    -rw------- root root custom.key
  7. Edit /etc/httpd/conf.d/ssl.conf untuk mencerminkan sertifikat dan file kunci baru Anda.

    1. Berikan jalur dan nama file sertifikat host yang ditandatangani CA dalam arahan SSLCertificateFile Apache:

      SSLCertificateFile /etc/pki/tls/certs/custom.crt
    2. Jika Anda menerima file sertifikat menengah (intermediate.crt dalam contoh ini), berikan jalur dan nama file menggunakan arahan SSLCACertificateFileApache:

      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      catatan

      Beberapa CA menggabungkan sertifikat host dan sertifikat menengah dalam satu file, sehingga arahan SSLCACertificateFile menjadi tidak diperlukan. Baca petunjuk yang diberikan oleh CA Anda.

    3. Berikan jalur dan nama file kunci privat (custom.key dalam contoh ini) dalam arahan SSLCertificateKeyFile Apache:

      SSLCertificateKeyFile /etc/pki/tls/private/custom.key
  8. Simpan /etc/httpd/conf.d/ssl.conf dan mulai ulang Apache.

    [ec2-user ~]$ sudo systemctl restart httpd
  9. Uji server Anda dengan memasukkan nama domain ke dalam bilah URL peramban menggunakan prefiks https://. Peramban Anda harus memuat halaman uji melalui HTTPS tanpa menghasilkan kesalahan.

Langkah 3: Menguji dan memperkuat konfigurasi keamanan

Setelah TLS Anda beroperasi dan terbuka ke publik, Anda harus menguji seberapa kuat TLS itu sesungguhnya. Hal ini mudah dilakukan menggunakan layanan daring seperti Qualys SSL Labs, yang melakukan analisis yang bebas dan menyeluruh atas pengaturan keamanan Anda. Berdasarkan hasilnya, Anda dapat memutuskan untuk memperkuat konfigurasi keamanan default dengan mengendalikan protokol mana yang diterima, cipher mana yang lebih disukai, dan hal mana yang tidak Anda sertakan. Untuk informasi selengkapnya, lihat cara Qualys merumuskan nilainya.

penting

Pengujian di dunia nyata sangat penting untuk keamanan server Anda. Kesalahan konfigurasi kecil dapat menyebabkan pelanggaran keamanan serius dan hilangnya data. Karena praktik keamanan yang direkomendasikan terus berubah sebagai respons terhadap penelitian dan ancaman yang muncul, audit keamanan secara berkala sangat penting untuk administrasi server yang baik.

Pada situs Qualys SSL Labs, masukkan nama domain server Anda yang sepenuhnya memenuhi syarat, dalam formulir www.example.com. Setelah sekitar dua menit, Anda menerima nilai (dari A sampai F) untuk situs Anda dan detail perincian dari temuan. Tabel berikut merangkum laporan untuk domain dengan pengaturan yang identik dengan konfigurasi Apache default di Amazon Linux 2, dan dengan sertifikat Certbot default.

Penilaian secara keseluruhan B
Sertifikat 100%
Dukungan protokol 95%
Pertukaran kunci 70%
Kekuatan cipher 90%

Meskipun gambaran umum menunjukkan bahwa konfigurasi sebagian besar baik, laporan terperinci menunjukkan beberapa potensi masalah, yang tercantum dalam urutan keparahan:

Cipher RC4 didukung untuk digunakan oleh peramban tertentu yang lebih lama. Cipher adalah inti matematis dari algoritma enkripsi. RC4, cipher cepat yang digunakan untuk mengenkripsi aliran data TLS, dikenal memiliki beberapa kelemahan serius. Kecuali jika Anda memiliki alasan yang sangat bagus untuk mendukung peramban terdahulu, Anda harus menonaktifkan cipher ini.

Versi TLS lama dapat didukung. Konfigurasi ini mendukung TLS 1.0 (sudah usang) dan TLS 1.1 (akan usang). Hanya TLS 1.2 yang telah direkomendasikan sejak 2018.

Forward secrecy tidak sepenuhnya didukung. Forward secrecy adalah fitur algoritma yang mengenkripsi menggunakan kunci sesi sementara (ephemeral) yang berasal dari kunci privat. Artinya, dalam praktiknya, penyerang tidak dapat mendekripsi data HTTPS bahkan jika mereka memiliki kunci privat jangka panjang server web.

Untuk mengoreksi dan memperkuat konfigurasi TLS untuk masa mendatang
  1. Buka file konfigurasi /etc/httpd/conf.d/ssl.conf dalam editor teks dan berikan komentar pada baris berikut dengan memasukkan “#” di awal baris.

    #SSLProtocol all -SSLv3
  2. Tambahkan arahan berikut:

    #SSLProtocol all -SSLv3 SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2

    Arahan ini secara eksplisit menonaktifkan SSL versi 2 dan 3, serta TLS versi 1.0 dan 1.1. Server sekarang menolak untuk menerima koneksi terenkripsi dengan klien menggunakan apa pun selain TLS 1.2. Kata-kata yang bertele-tele dalam arahan, bagi pembaca manusia, justru mengungkapkan dengan lebih jelas tentang apa yang akan dilakukan server sesuai konfigurasinya.

    catatan

    Menonaktifkan TLS versi 1.0 dan 1.1 dengan cara ini akan memblokir sebagian kecil peramban web lama dari akses ke situs Anda.

Untuk mengubah daftar cipher yang diperbolehkan
  1. Di file konfigurasi /etc/httpd/conf.d/ssl.conf, temukan bagian dengan arahan SSLCipherSuite dan berikan komentar pada baris yang sudah ada dengan memasukkan “#” di awal baris.

    #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
  2. Tentukan suite cipher yang eksplisit dan urutan cipher yang memprioritaskan forward secrecy serta menghindari cipher yang tidak aman. Arahan SSLCipherSuite yang digunakan di sini didasarkan pada output dari Mozilla SSL Configuration Generator, yang menyesuaikan konfigurasi TLS dengan perangkat lunak tertentu yang berjalan di server Anda. (Untuk informasi selengkapnya, lihat sumber daya Mozilla yang berguna Keamanan/TLS Sisi server.) Pertama, tentukan Apache Anda dan versi OpenSSL dengan menggunakan output dari perintah berikut.

    [ec2-user ~]$ yum list installed | grep httpd [ec2-user ~]$ yum list installed | grep openssl

    Misalnya, jika informasi yang dikembalikan adalah Apache 2.4.34 dan 1.0.2, kita memasukkannya ke generator. Jika Anda memilih model kompatibilitas "modern", ini menciptakan arahan SSLCipherSuite yang secara agresif menegakkan keamanan, tetapi tetap berfungsi di sebagian besar peramban. Jika perangkat lunak Anda tidak mendukung konfigurasi modern, Anda dapat memperbarui perangkat lunak atau memilih konfigurasi "menengah".

    SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

    Cipher yang dipilih memiliki ECDHE dalam nama mereka, singkatan untuk Elliptic Curve Diffie-Hellman Ephemeral . Istilah ephemeral menunjukkan forward secrecy. Sebagai produk sampingan, cipher ini tidak mendukung RC4.

    Sebaiknya Anda menggunakan daftar cipher secara eksplisit alih-alih mengandalkan arahan yang ringkas atau default yang kontennya tidak dapat dilihat.

    Salin arahan yang dihasilkan ke /etc/httpd/conf.d/ssl.conf.

    catatan

    Meskipun ditampilkan di sini pada beberapa baris untuk keterbacaan, arahan harus pada satu baris saat disalin ke /etc/httpd/conf.d/ssl.conf, dengan hanya tanda titik dua (tanpa spasi) di antara nama-nama cipher.

  3. Terakhir, batalkan komentar pada baris berikut dengan menghapus “#” di awal baris.

    #SSLHonorCipherOrder on

    Arahan ini memaksa server untuk lebih memilih cipher berperingkat tinggi, termasuk (dalam hal ini) cipher yang mendukung forward secrecy. Dengan arahan yang diaktifkan ini, server mencoba membangun koneksi aman yang kuat sebelum kembali ke ciphers yang diizinkan dengan keamanan lebih rendah.

Setelah menyelesaikan kedua prosedur ini, simpan perubahan ke /etc/httpd/conf.d/ssl.conf dan mulai ulang Apache.

Jika Anda menguji domain lagi di Qualys SSL Labs, Anda akan melihat bahwa kerentanan RC4 dan peringatan lainnya hilang dan rangkumannya terlihat seperti berikut.

Penilaian secara keseluruhan A
Sertifikat 100%
Dukungan protokol 100%
Pertukaran kunci 90%
Kekuatan cipher 90%

Setiap pembaruan untuk OpenSSL memperkenalkan cipher baru dan menghapus dukungan untuk cipher lama. Simpan instans EC2 Amazon Linux 2 Anda up-to-date, perhatikan pengumuman keamanan dari OpenSSL, dan waspada terhadap laporan eksploitasi keamanan baru di pers teknis.

Pemecahan Masalah

  • Server web My Apache tidak memulai kecuali jika saya memasukkan kata sandi

    Ini adalah perkiraan perilaku jika Anda menginstal kunci server privat yang dienkripsi dan dilindungi dengan kata sandi.

    Anda dapat menghapus persyaratan enkripsi dan kata sandi dari kunci. Dengan asumsi bahwa Anda memiliki kunci RSA terenkripsi privat yang disebut custom.key dalam direktori default, dan kata sandi di sana adalah abcde12345, jalankan perintah berikut pada instans EC2 Anda untuk membuat versi kunci yang tidak terenkripsi.

    [ec2-user ~]$ cd /etc/pki/tls/private/ [ec2-user private]$ sudo cp custom.key custom.key.bak [ec2-user private]$ sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt [ec2-user private]$ sudo mv custom.key.nocrypt custom.key [ec2-user private]$ sudo chown root:root custom.key [ec2-user private]$ sudo chmod 600 custom.key [ec2-user private]$ sudo systemctl restart httpd

    Apache sekarang akan dimulai tanpa meminta kata sandi Anda.

  • Saya mendapatkan kesalahan saat menjalankan sudo yum install -y mod_ssl.

    Saat menginstal paket yang diperlukan untuk SSL, Anda mungkin melihat kesalahan yang serupa dengan yang berikut.

    Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64 Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64

    Ini biasanya berarti bahwa instans EC2 Anda tidak menjalankan Amazon Linux 2. Tutorial ini hanya mendukung instans yang baru dibuat dari AMI Amazon Linux 2 resmi.