GNU/Linux >> Belajar Linux >  >> Linux

Cara mengatur SSL/TLS dengan Apache httpd di Red Hat

Tujuan

Tujuannya adalah untuk menyiapkan server web Apache dengan dukungan SSL/TLS di Red Hat Linux, menggunakan paket yang dikirimkan bersama distribusi.

Sistem Operasi dan Versi Perangkat Lunak

  • Sistem operasi: Red Hat Enterprise Linux 7.5
  • Perangkat Lunak: Apache httpd, mod_ssl

Persyaratan

Akses istimewa ke server web.

Kesulitan

MUDAH

Konvensi

  • # – membutuhkan perintah linux yang diberikan untuk dieksekusi dengan hak akses root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
  • $ – perintah linux yang diberikan untuk dieksekusi sebagai pengguna biasa yang tidak memiliki hak istimewa

Pengantar

Menginstal server web cukup mudah pada distribusi modern, karena kasus penggunaan server web sangat umum sehingga sebagian besar jika tidak semua distribusi menyediakan paket dalam repositori mereka. Apache httpd adalah server web andal yang digunakan oleh sebagian besar Internet, dan banyak modul tersedia untuk memperluas fungsinya.

Berita teknologi akhir-akhir ini dipenuhi dengan pelanggaran keamanan, pencurian/kebocoran data, dan dorongan yang semakin besar untuk menggunakan enkripsi
jika memungkinkan. Meskipun menggunakan HTTPS memiliki overhead komputasi tertentu di sisi server dan klien, tidak menggunakannya berarti semua data yang dikirim di kedua arah adalah teks yang jelas, dapat dibaca oleh siapa saja yang dapat membaca lalu lintas saat melewati jaringan.

Misalkan Anda memiliki layanan web di mana klien dapat masuk menggunakan nama pengguna dan kata sandi mereka – metode otentikasi umum – untuk mencapai data mereka sendiri, termasuk admin situs. Jika Anda menyediakan layanan ini melalui http, semua informasi ini dapat direkam, sehingga seseorang dapat memperoleh semua kredensial login, login sebagai admin situs, dan mengunci admin sebenarnya atau memublikasikan konten yang berbahaya bagi pengunjung.

Kemampuan untuk menggunakan enkripsi saat menjelajah sudah ada di semua browser modern utama untuk waktu yang lama, dan enkripsi dengan cara yang sama tersedia untuk server web selama bertahun-tahun sekarang.

Instal server web Apache dengan dukungan SSL/TLS

Untuk menginstal paket yang diperlukan, jalankan sebagai root:

# yum install httpd mod_ssl -y

Jika server sudah menginstal httpd, Anda hanya perlu menginstal mod_ssl , semua konfigurasi yang diperlukan dilakukan
oleh penginstal. Namun perhatikan bahwa dalam hal ini Anda perlu me-restart httpd, sehingga dapat memuat modul ssl. Dengan menggunakan
paket yang dikirimkan bersama distribusi, kita dapat membuat hidup kita lebih mudah, karena Red Hat akan memberikan pembaruan yang teruji dengan benar untuk sistem operasi dan server web, tentu saja, Anda perlu berlangganan untuk menerima pembaruan – tetapi pembaruan tetap diperlukan untuk sistem operasi agar tetap mutakhir.

Aktifkan dan mulai server httpd

Menggunakan systemd Anda dapat mengaktifkan dan memulai server web dengan perintah di bawah ini:

# systemctl enable httpd && systemctl start httpd

Dengan cara ini layanan httpd akan secara otomatis dimulai oleh systemd pada setiap boot.

Verifikasi pemasangan dan status

Anda dapat memeriksa status server web menggunakan systemd:

# systemctl status httpd -l
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2018-07-07 21:35:33 CEST; 1 weeks 4 days ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1292 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
    Tasks: 9
   CGroup: /system.slice/httpd.service
           ├─ 1292 /usr/sbin/httpd -DFOREGROUND
           ├─13271 /usr/sbin/httpd -DFOREGROUND
           ├─13272 /usr/sbin/httpd -DFOREGROUND
           ├─13273 /usr/sbin/httpd -DFOREGROUND
           ├─27508 /usr/sbin/httpd -DFOREGROUND
           ├─27509 /usr/sbin/httpd -DFOREGROUND
           ├─27510 /usr/sbin/httpd -DFOREGROUND
           ├─27511 /usr/sbin/httpd -DFOREGROUND
           └─27512 /usr/sbin/httpd -DFOREGROUND

Jul 07 21:35:32 web.foobar.com systemd[1]: Starting The Apache HTTP Server...
Jul 07 21:35:33 web.foobar.com systemd[1]: Started The Apache HTTP Server.

Untuk Memeriksa apakah mod_ssl sudah terpasang dengan benar:

# rpm -q mod_ssl
mod_ssl-2.4.6-80.el7.x86_64

Dan dimuat sebagai modul ke server httpd:

# apachectl -M | grep ssl
 ssl_module (shared)

Penggunaan sertifikat

Ketika kita menginstal paket mod_ssl, modul menambahkan dirinya sendiri ke server httpd, sehingga akan memuatnya pada startup berikutnya.
Sertifikat yang ditandatangani sendiri dihasilkan secara default, yang digunakan untuk membuat koneksi terenkripsi dengan browser.
Buka browser, dan arahkan ke server melalui https:

Pesan kesalahan SSL di browser Firefox

Mari kita abaikan ini untuk saat ini, tambahkan pengecualian keamanan (jangan atur "simpan pengecualian ini secara permanen"), dan lanjutkan. Halaman default muncul. Dalam kasus Red Hat, ini terlihat seperti berikut:

Halaman beranda default dari instalasi server web httpd di Red Hat Linux

Perhatikan tanda seru di sebelah URL (browser lain mungkin menampilkan peringatan yang berbeda).

Server web kami sekarang aktif dan menjalankan https dengan sertifikat yang ditandatangani sendiri, dan siap menyajikan konten yang dipublikasikan
di bawah /var/www/html , akar konten default server web di Red Hat.

Sambungan antara server web dan browser sekarang dienkripsi, sehingga lebih sulit untuk memalsukan lalu lintas (yang
dapat digunakan, misalnya mencuri kredensial login). Sudahkah kita selesai? Di satu sisi, kami menyelesaikan tujuan kami.

Fakta bahwa browser kami tidak dapat mengidentifikasi sertifikat server sebagai valid tidak mencegahnya untuk menggunakan komunikasi terenkripsi dengan server, jika kami secara eksplisit memutuskan bahwa kami mempercayai sertifikat ini. Ini mungkin cocok untuk sistem kecil (rumah), di mana Anda hanya memiliki beberapa pengguna, serta hanya beberapa server web – Anda harus menerima sertifikat yang ditandatangani sendiri di browser yang seharusnya menjadi klien server web, dan lainnya browser di dunia seharusnya tidak pernah melihat konten yang disediakan oleh server ini.

Namun perhatikan, bahwa sertifikat yang ditandatangani sendiri ini akan kedaluwarsa pada waktunya (seperti halnya sertifikat lainnya), dan Anda harus
memperbaruinya untuk menggunakannya. Sertifikat yang kedaluwarsa dianggap tidak valid oleh browser, sama seperti sertifikat yang tidak dapat dibuktikan valid oleh rantai sertifikat yang valid di atasnya.

Untuk mengetahui kapan sertifikat yang ditandatangani sendiri (atau lainnya) akan kedaluwarsa, kita harus menemukannya di sistem file dengan melihat file konfigurasi modul ssl:

# grep SSLCertificateFile /etc/httpd/conf.d/ssl.conf | grep -v "#"
SSLCertificateFile /etc/pki/tls/certs/localhost.crt

Dan kemudian gunakan openssl untuk mendapatkan tanggal kedaluwarsa:

# openssl x509 -enddate -noout -in  /etc/pki/tls/certs/localhost.crt
notAfter=Jul 10 07:06:17 2019 GMT

Setelah (atau lebih tepatnya, sebelum) sertifikat kedaluwarsa, Anda harus memperbarui atau menggantinya dengan sertifikat yang dipercaya klien. A
pendekatan yang lebih elegan dibandingkan dengan sertifikat yang ditandatangani sendiri adalah meminta dan menggunakan sertifikat dari CA
(Otoritas Sertifikat) yang sudah dipercaya oleh klien Anda, baik dari CA internal Anda (yang pada gilirannya dapat memiliki
CA root tepercaya di atasnya), atau langsung dari CA tepercaya global.

Untuk menggunakan sertifikat yang diperoleh alih-alih default, parameter di bawah ini harus menunjuk ke file sertifikat,
kunci sertifikat, dan sertifikat CA yang menandatangani sertifikat SSL. File harus disalin di
server web, dan harus dapat dibaca oleh pengguna sistem operasi yang menjalankan server web – dalam kasus instalasi default Red Hat, pengguna apache. Parameter ini dapat ditemukan di ssl.conf yang disebutkan di atas .

SSLCertificateFile	/etc/httpd/custom-cert/server-ssl.crt
SSLCertificateKeyFile	/etc/httpd/custom-cert/server-ssl.key
SSLCACertificateFile	/etc/httpd/custom-cert/ca.crt

Mengalihkan lalu lintas http ke https

Sekarang kami melayani melalui https, kami dapat menerapkan penggunaan https saat menyajikan semua atau sebagian konten kami. Dalam
contoh kami, kami sangat aman, dan menggunakan http hanya untuk mengarahkan klien yang masuk ke https.

Sebuah pertanyaan mungkin muncul, jika kita ingin berbicara https saja, mengapa kita mendengarkan http sama sekali? Misalkan pengguna akhir, yang baru saja mendengar tentang situs kami, dan mendapat URL dari seorang teman yang tidak berisi protokol. Sampai hari ini, sebagian besar browser default ke protokol http, jika tidak ditentukan secara eksplisit. Jika kami berhenti melayani melalui http, pengguna yang mengetik URL tanpa https akan menerima pesan kesalahan jika browsernya mencoba menjangkau server kami melalui http.

Untuk mengarahkan semua permintaan http yang masuk ke https, kami membuat file di bawah /etc/httpd/conf.d dengan nama deskriptif, misalnya, redirect_http.conf dengan konten berikut (di mana web.foobar.com adalah nama DNS situs):

<VirtualHost _default_:80>
        Servername web.foobar.com
        Redirect permanent / https://web.foobar.com/
</VirtualHost>

Dan restart server web. Kami dapat menguji apakah pengalihan berfungsi dengan benar dari baris perintah dengan wget (dari host yang mempercayai sertifikat SSL server web):

$ wget http://web.foobar.com/
--2018-07-19 16:13:01--  http://web.foobar.com/
Resolving web.foobar.com (web.foobar.com)... 10.9.8.7
Connecting to web.foobar.com (web.foobar.com)|10.9.8.7|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://web.foobar.com/ [following]
--2018-07-19 16:13:01--  https://web.foobar.com/
Connecting to web.foobar.com (web.foobar.com)|10.9.8.7|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 240 [text/html]
Saving to: ‘index.html’

100%[====================================================================================>] 240         --.-K/s   in 0s      

2018-07-19 16:13:01 (7.04 MB/s) - ‘index.html’ saved [240/240]

Outputnya menunjukkan respons http 301, dan kita dapat melihat bagaimana klien wget kita mengikuti pengalihan untuk terhubung menggunakan protokol https. Secara default lalu lintas ssl dicatat dalam file log yang berbeda dengan lalu lintas http. Kami dapat menemukan permintaan
di atas login /var/log/httpd/ssl_access_log :

10.9.8.8 - - [19/Jul/2018:16:13:01 +0200] "GET / HTTP/1.1" 200 240

Kesimpulan

Dengan ini kami telah menyelesaikan tujuan kami, kami menyiapkan server web yang menggunakan https untuk berbicara dengan klien, dan mengarahkan permintaan http yang masuk ke https juga.


Linux
  1. Cara mengamankan layanan email Linux Anda dengan SSL/TLS

  2. Bagaimana Mengkonfigurasi VSFTPD dengan koneksi terenkripsi SSL/TLS?

  3. Cara Instal Apache 2 dengan SSL di Linux (dengan mod_ssl, openssl)

  1. Cara Mengamankan nama host Plesk pada port 8443 dengan sertifikat SSL

  2. Cara Mengamankan vsFTPd Dengan SSL/TLS

  3. Cara mengamankan koneksi SSL dengan Apache di Ubuntu 18.04

  1. Cara mengatur proxy server web Apache di depan Apache Tomcat di Red Hat Linux

  2. Cara Menginstal Let's Encrypt SSL dengan Apache di Debian 11

  3. Cara Menginstal Apache 2.4.2 dari Sumber di CentOS 6.2 dengan SSL