Artikel ini memberikan ikhtisar tentang perfect forward secrecy (PFS) dan cara mengaktifkannya di server web Apache® atau Nginx®.
Apa itu PFS?
PFS melindungi data yang dibagikan antara klien dan server bahkan jika kunci pribadi disusupi. Anda dapat melakukannya dengan membuat kunci sesi untuk setiap transaksi yang dilakukan.
Mengapa menerapkan PFS di situs web?
Sertifikat TLS atau SSL bekerja dengan menggunakan kunci publik dan kunci pribadi. Ketika browser web dan server bertukar kunci, sistem membuat kunci sesi dengan menggunakan mekanisme pertukaran kunci yang disebut RSA, di mana semua informasi antara klien dan server dienkripsi. RSAmembuat tautan antara kunci pribadi server dan kunci sesi yang dibuat untuk setiap sesi unik yang aman.
Sesi mungkin akan diserang secara paksa—ini terdiri dari serangan yang menginjeksi server dengan kombinasi kunci keamanan hingga menemukan yang benar. Meskipun proses ini mungkin memakan waktu lama, jika kunci pribadi server disusupi, penyerang dapat melihat data sesi dan semua transaksi klien.
Bagaimana PFS melindungi situs web
PFS memungkinkan server untuk tidak bergantung pada satu kunci sesi. Alih-alih menggunakan kunci enkripsi yang sama setiap kali pengguna atau layanan membuat koneksi, PFS membuat kunci sesi unik untuk setiap koneksi.
Aktifkan PFS dengan menggunakan mekanisme pertukaran—Ephemeral Diffie-Hellman (DHE)
danElliptic Curve Diffie-Hellman (ECDHE)
. Jika penyerang memaksa kunci sesi, mereka hanya dapat mendekripsi informasi dari satu sesi itu dan bukan yang lain.
Persyaratan untuk menerapkan PFS di server web
Gunakan salah satu alat berikut untuk mengimplementasikan PFS:
- OpenSSL 1.0.1c+
- Apache 2.4 atau
- Nginx 1.0.6+ dan 1.1.0+
Anda dapat memeriksa versi paket-paket ini dengan menjalankan perintah berikut:
Catatan :Hasil mungkin berbeda karena vendor merilis versi baru.
[root@rackspace-test ~]$ openssl version
OpenSSL 1.1.1g FIPS 21 Apr 2020
[root@rackspace-test ~]$ httpd -v
Server version: Apache/2.4.37 (centos)
Server built: Nov 4 2020 03:20:37
Untuk server sistem operasi Debian® atau Ubuntu®, perintahnya adalah apache2ctl -v
.
[root@rackspace-test ~]$ nginx -v
nginx version: nginx/1.14.1
Konfigurasi protokol SSL
Periksa situs web apa yang telah menerapkan SSL dengan menjalankan perintah di bagian berikut.
Contoh ini menerapkan PFS dalam domain yang disebut example.com .
Petunjuk Apache
Ada dua opsi untuk memeriksa situs web yang memiliki sertifikat SSL:
[root@rackspace-test ~]# grep -ir "SSLEngine" /etc/httpd/
/etc/httpd/conf.d/example.com.conf: SSLEngine on
Catatan: Jalur default untuk Apache Virtual Host berada di bawah direktori /etc/httpd/conf.d/ . Direktori mungkin berbeda untuk konfigurasi Anda.
Atau, Anda dapat menggunakan perintah httpd -S
atau apachectl -S
untuk CentOS ® atau RedHat® Enterprise Linux ® (RHEL) dan apache2ctl -S
untuk sistem operasi Debian atau Ubuntu.
[root@rackspace-test ~]# httpd -S | grep 443
*:443 is a NameVirtualHost
port 443 namevhost www.example.com (/etc/httpd/conf.d/example.com.conf:10)
Tambahkan parameter berikut ke konfigurasi vhost dengan editor teks favorit Anda:
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
Saat Anda menelusuri kata SSL di vhost, output akan terlihat seperti berikut setelah implementasi:
[root@rackspace-test ~]# egrep 'SSL' /etc/httpd/conf.d/example.com.conf
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
SSLCertificateFile /etc/ssl/certs/2022-example.com.crt
SSLCertificateKeyFile /etc/ssl/private/2022-example.com.key
Pastikan sintaksnya benar dan restart Apache.
[root@rackspace-test ~]# httpd -t
Syntax OK
[root@rackspace-test ~]# apachectl -k restart
Petunjuk Nginx
Daftar situs web yang memiliki sertifikat SSL terpasang:
[root@rackspace-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/
/etc/nginx/conf.d/example.com.conf: listen 443 ssl;
/etc/nginx/conf.d/example.com.conf: ssl_certificate /etc/ssl/certs/2022-example.com.chained.crt;
/etc/nginx/conf.d/example.com.conf: ssl_certificate_key /etc/ssl/private/2022-example.com.key;
Catatan: Jalur default untuk Blok Nginx berada di bawah direktori/etc/nginx/conf.d/ . Direktori mungkin berbeda untuk konfigurasi Anda.
Tambahkan parameter berikut ke konfigurasi vhost dengan editor teks favorit Anda:
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
Saat Anda menelusuri kata SSL di vhost, output akan terlihat seperti berikut setelah implementasi:
[root@racksapce-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/example.com.conf
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_certificate /etc/ssl/certs/2022-example.com.chained.crt;
ssl_certificate_key /etc/ssl/private/2022-example.com.key;
Pastikan sintaksnya benar dan mulai ulang Nginx.
[root@rackspace-test ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@rackspace-test ~]# nginx -s reload
Dengan menggunakan langkah-langkah sebelumnya, Anda dapat menerapkan PFS dengan benar untuk situs web Anda.
Gunakan tab Umpan Balik untuk memberikan komentar atau mengajukan pertanyaan. Anda juga dapat memulai percakapan dengan kami.