GNU/Linux >> Belajar Linux >  >> Debian

Instal Lets Encrypt dan Secure Nginx dengan SSL/TLS di Debian 9

Tutorial ini akan menunjukkan cara menginstal dan mengamankan server web Nginx di Debian 9 dengan sertifikat TLS yang dikeluarkan secara gratis oleh Let's Encrypt Certificate Authority. Selanjutnya, kami akan mengonfigurasi pembaruan otomatis sertifikat TLS Lets’ Encrypt menggunakan cron job sebelum sertifikat kedaluwarsa.

TLS, juga dikenal sebagai Transport Layer Security, adalah protokol jaringan yang menggunakan sertifikat SSL untuk mengenkripsi lalu lintas jaringan yang mengalir antara server dan klien, atau antara server web, seperti server Nginx, dan browser. Semua data yang dipertukarkan di antara dua entitas ini diamankan dan koneksi tidak dapat didekripsi meskipun dicegat menggunakan teknik seperti oleh man in the middle attack atau packet sniffing. certbot paket perangkat lunak adalah utilitas klien resmi yang disediakan oleh Let's Encrypt CA yang dapat digunakan dalam proses menghasilkan dan mengunduh sertifikat Let's Encrypt gratis di Debian.

Persyaratan

  • Instal LEMP Stack di Debian 9.
  • Nama domain terdaftar publik dengan catatan DNS yang tepat ( Catatan A atau catatan CNAME untuk subdomain).
  • Akses langsung ke konsol server atau akses SSH jarak jauh ke server.
  • Akun pengguna dengan hak akses root atau akses langsung ke akun root.

Instal Utilitas Klien Certbot

Untuk menginstal Let's Encrypt cerbot utilitas klien di Debian 9 dari repositori resmi Debian, buka terminal dan jalankan perintah berikut dengan hak akses root, seperti yang diilustrasikan pada tangkapan layar berikut.

apt-get install certbot

Debian sesuai utilitas, yang merupakan antarmuka baris perintah dari Manajer Paket utama Debian, akan menanyakan Anda, setelah beberapa pemeriksaan awal, apakah Anda setuju untuk melanjutkan menginstal paket certbot dan semua dependensi yang diperlukan. Untuk menerima proses penginstalan perangkat lunak, jawab dengan ya (y) di prompt konsol server.

Dapatkan Sertifikat Let's Encrypt

Untuk membuat dan mengunduh sertifikat Let's Encrypt untuk domain, pertama-tama pastikan server web Nginx aktif dan berjalan dan setidaknya port 80 dapat diakses dari internet. Untuk memverifikasi apakah Nginx sedang berjalan, jalankan perintah berikut dengan hak akses root.

sudo systemctl status nginx

Jika server belum berjalan, jalankan daemon Nginx dengan perintah di bawah ini.

sudo systemctl start nginx

Jika Anda memiliki firewall umum yang terinstal di Debian, seperti firewall UFW, yang memblokir semua koneksi masuk pada port 80 dan 443, jalankan perintah di bawah ini untuk membuka HTTP dan port HTTPS di sistem.

sudo ufw izinkan 80/tcp
sudo ufw allow 443/tcp

Untuk mendapatkan sertifikat untuk domain Anda, jalankan cerbot perintah di konsol dengan parameter dan flag berikut seperti yang dijelaskan di bawah ini. Jalankan perintah dengan hak akses root dan berikan nama domain Anda dan semua subdomain lain yang ingin Anda dapatkan sertifikatnya dengan menggunakan –d bendera. Juga, berikan --mandiri opsi agar certbot tidak mengganggu file konfigurasi Nginx. Server Nginx harus dihentikan saat mengeluarkan sertifikat menggunakan opsi ini.

Sintaks perintah cerbot:

sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.com

Saat pertama kali menjalankan perintah certbot dan mendapatkan sertifikat, Anda akan diminta untuk menambahkan alamat email dan menyetujui persyaratan layanan Let's Encrypt. Tulis ‘a ' untuk menyetujui persyaratan layanan 'tidak' untuk tidak membagikan alamat email Anda dengan mitra Let's Encrypt. Terakhir, setelah Anda mendapatkan sertifikat untuk domain Anda, baca catatan kaki untuk menemukan jalur sistem sertifikat dan tanggal kedaluwarsanya.

Cara alternatif untuk mendapatkan sertifikat SSL Let's encrypt

Untuk mendapatkan sertifikat Let's Encrypt melalui "webroot " plugin menggunakan sintaks di bawah ini. Tambahkan direktori root web Nginx, yang secara default terletak di /var/www/html/ jalur sistem, saat mengeluarkan perintah certbot dengan --webroot dan –w bendera. Juga, pastikan Nginx memiliki izin menulis penuh ke direktori root web untuk membuat file /.well-known direktori.

The --webrot opsi untuk cerbot juga akan meminta Anda menambahkan alamat email Anda untuk pembaruan sertifikat dan pemberitahuan keamanan. Certbot klien memiliki kode bawaan yang dapat mendeteksi alamat email palsu. Anda harus memberikan alamat email yang dapat diakses publik untuk terus mendapatkan sertifikat.

certbot certonly --webroot –w /var/www/html/ -d yourdomain.com –d www.yourdomain.com

 

Menyimpan log debug ke /var/log/letsencrypt/letsencrypt.log 
Masukkan alamat email (digunakan untuk pembaruan mendesak dan pemberitahuan keamanan) (Masukkan 'c' ke 
batal):[email protected]  #Alamat email palsu akan terdeteksi  
Tampaknya ada masalah dengan alamat tersebut  . Masukkan alamat email (digunakan untuk 
pemberitahuan pembaruan dan keamanan mendesak)  Jika Anda benar-benar ingin melewati ini, Anda dapat 
jalankan klien dengan --register-unsafely-without-email tetapi pastikan Anda kemudian 
cadangkan kunci akun Anda dari /etc/letsencrypt/accounts   (Masukkan 'c' untuk membatalkan):[email protected] 
  
------------------------------------------------------- ----------------------------------- 
Harap baca Persyaratan Layanan di 
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. Anda harus setuju 
untuk mendaftar ke server ACME di 
https://acme-v01.api.letsencrypt.org/directory 
------------------------------------------------------- ----------------------------------- 
(A)setuju/(C)batal:a  
  
------------------------------------------------------- ----------------------------------- 
Apakah Anda bersedia membagikan alamat email Anda dengan Electronic Frontier 
Yayasan, mitra pendiri proyek Let's Encrypt dan lembaga nonprofit 
organisasi yang mengembangkan Certbot? Kami ingin mengirimi Anda email tentang EFF dan 
pekerjaan kami untuk mengenkripsi web, melindungi penggunanya, dan mempertahankan hak digital. 
------------------------------------------------------- ----------------------------------- 
(Y)es/(T)o:n  
Mendapatkan sertifikat baru 
Melakukan tantangan berikut: 
Tantangan http-01 untuk www.domain.com 
Menggunakan jalur webroot /var/www/html/  untuk semua domain yang tidak cocok. 
Menunggu verifikasi... 
Menyelesaikan tantangan 
  
CATATAN PENTING: 
 - Selamat! Sertifikat dan rantai Anda telah disimpan di 
    /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Anda 
Sertifikat
   akan berakhir pada 28-12-2017. Untuk mendapatkan versi baru atau yang diubah 
   sertifikat ini di masa mendatang, cukup jalankan certbot lagi. Untuk 
   perpanjang secara non-interaktif *semua* sertifikat Anda, jalankan "certbot 
   perpanjang" 
 - Kredensial akun Anda telah disimpan di Certbot Anda 
   direktori konfigurasi di /etc/letsencrypt. Anda harus 
   buat cadangan folder ini dengan aman sekarang. Konfigurasi ini 
Direktori
   juga akan berisi sertifikat dan kunci pribadi yang diperoleh 
   oleh Certbot jadi sangat ideal untuk membuat cadangan rutin folder ini. 
 - Jika Anda menyukai Certbot, pertimbangkan untuk mendukung pekerjaan kami dengan: 
  
   Donasi ke ISRG / Let's Encrypt:   https://letsencrypt.org/donate 
   Donasi ke EFF:                   https://eff.org/donate-le 

 

Konfigurasi Nginx untuk TLS (SSL)

File konfigurasi TLS default lengkap Nginx untuk domain akan terlihat seperti pada kutipan file di bawah ini.

/etc/nginx/sites-enabled/default-ssl contoh file:

    server {
                   mendengarkan 443 ssl default_server;
                   mendengarkan [::]:443 ssl default_server;
      
               nama_server  www.domainanda.com domainanda.com;
               #server_name _;
                           
               root /var/www/html;
                           
               access_log /var/log/nginx/access.log;
               error_log /var/log/nginx/error.log;
             
              #Sertifikat SSL
               ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
               ssl_certificate_key "/etc/letsencrypt/live/www.domainanda.com/privkey.pem";
               ssl_dhparam /etc/nginx/dhparam.pem;
              
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
               #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
               ssl_session_cache dibagikan:SSL:1m;
              ssl_session_timeout 10m;
               ssl_ciphers HIGH:!aNULL:!MD5;
               ssl_prefer_server_ciphers  aktif;
              
               add_header Strict-Transport-Security "max-age=31536000;
    #includeSubDomains" selalu;
 
               lokasi / {
        index index.php index.html index.htm;
                   try_files $uri $uri/ /index.php?$args $uri/ =404;
               }
 
              
               setel $cache_uri $request_uri;
              
               lokasi ~ /.well-known {
               izinkan semua;
                            }
             
               #
               #            # Dengan php-fpm (atau soket unix lainnya):
                            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
               #            # Dengan php-cgi (atau soket tcp lainnya):
               #            fastcgi_pass 127.0.0.1:9000;
               }

              # menolak akses ke file .htaccess, jika root dokumen Apache
               # sependapat dengan nginx
               #
               #location ~ /\.ht {
               #            tolak semua;
               #}
              
    }

Baris kode untuk memproses skrip PHP melalui FastCGI Process Manager juga dapat ditemukan dalam kutipan ini dan diwakili oleh baris berikut.

lokasi ~ \.php$ {
                            include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
               }

Instal Let's Encrypt Certificates di Nginx

Let's Encrypt sertifikat dan kunci disimpan di /etc/letsencrypt/live/www.yourdomain.com/ direktori di Debian. ls perintah terhadap direktori di atas akan menampilkan semua komponen sertifikat, seperti file rantai, file rantai penuh, kunci pribadi, dan file sertifikat.

ls /etc/letsencrypt/live/www.domainanda.com/

Untuk menginstal sertifikat Let's Encrypt di file konfigurasi TLS server web Nginx, buka Nginx default-ssl file dan perbarui baris di bawah ini untuk mencerminkan jalur file sertifikat Let's Encrypt untuk domain Anda, seperti yang ditunjukkan dalam kutipan di bawah ini.

nano /etc/nginx/sites-enabled/default-ssl

Ubah baris berikut seperti di bawah ini:

               ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem ";
              ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.pem";>

 

Juga, jika ssl_dhparam pernyataan hadir dalam konfigurasi SSL Nginx, Anda harus membuat kunci Diffie–Hellman 2048 bit baru dengan mengeluarkan perintah berikut. Pembuatan parameter kunci Diffie–Hellman akan memakan waktu cukup lama, bergantung pada keacakan atau entropi sistem Anda.

openssl dhparam –out /etc/nginx/dhparam.pem 2048

Terakhir, sebelum mengaktifkan konfigurasi Nginx TLS dengan memulai ulang daemon Nginx untuk mencerminkan perubahan, periksa terlebih dahulu konfigurasi Nginx untuk kemungkinan kesalahan sintaksis. Setelah itu, jika pengujian file konfigurasi Nginx berhasil, mulai ulang daemon Nginx untuk memuat konfigurasi baru bersama sertifikat Let's Encrypt, dengan mengeluarkan perintah di bawah ini.

nginx -t
layanan nginx restart

Untuk memverifikasi apakah layanan nginx memiliki soket terbuka dalam status mendengarkan pada port 443, jalankan netstat perintah seperti yang ditunjukkan pada kutipan di bawah ini.

netstat –tulpn | grep -e 443 -e DENGARKAN

Anda juga harus membuka browser dan menavigasi ke nama domain Anda melalui protokol HTTPS. Jika sertifikat Let's Encrypt berhasil diterapkan di Nginx, handshake SSL akan bekerja dengan lancar tanpa memunculkan kesalahan apa pun.

https://www.domainanda.com

Paksa lalu lintas web ke HTTPS

Untuk memaksa pengunjung domain Anda menjelajahi situs web Anda hanya melalui protokol HTTPS, buka file konfigurasi default yang mendukung situs Nginx dan tambahkan baris berikut, yang memaksa semua permintaan yang mencapai port 80 dialihkan dengan kode status 301 (dipindahkan secara permanen) ke port 443.

nano /etc/nginx/sites-enabled/default

Pernyataan pengalihan akan terlihat seperti yang disajikan dalam kutipan di bawah ini.

nama_server www.domainanda.com domainanda.com;
kembalikan         301 https://$server_name$request_uri;

Selanjutnya, restart daemon Nginx untuk menerapkan perubahan, dengan mengeluarkan perintah di bawah ini.

layanan nginx restart

Pemeriksaan Akhir

Untuk menyelidiki lebih lanjut sertifikat yang dihasilkan oleh Let's Encrypt CA, Anda dapat menggunakan browser web modern, seperti Chrome. Kunjungi domain Anda dari browser Chrome dan tekan tombol fungsi F12 untuk membuka Alat Pengembang. Navigasikan ke tab Keamanan dan tekan Lihat sertifikat untuk membuka sertifikat, seperti yang ditunjukkan pada tangkapan layar berikut.

Utilitas lain yang berguna dalam menyelidiki sertifikat SSL terbukti sebagai openssl utilitas baris perintah. Untuk menampilkan informasi tambahan untuk sertifikat Let's Encrypt CA, jalankan perintah di bawah ini di konsol Linux.

openssl s_client –hubungkan www.domainanda.com:443

Perpanjang Otomatis Sertifikat Mari Enkripsi

Untuk secara otomatis memperbarui sertifikat yang dikeluarkan oleh Let's Encrypt CA sebelum tanggal kedaluwarsa, jadwalkan pekerjaan crontab untuk dijalankan sekali sehari pada pukul 2:00 pagi, dengan mengeluarkan perintah berikut. Output dari cron job yang dieksekusi akan diarahkan ke file log, disimpan di /var/log/letsencrypt.log

crontab –e

Cron job untuk memperbarui sertifikat.

0 2 * * *  pembaruan certbot>> /var/log/letsencrypt.log 

Itu saja! Untuk konfigurasi lanjutan lainnya terkait sertifikat dan utilitas Let's Encrypt, kunjungi dokumentasi resmi di alamat internet berikut https://certbot.eff.org/docs/.


Debian
  1. Amankan Nginx dengan Lets Encrypt di Debian 9

  2. Amankan Nginx dengan Lets Encrypt di Debian 10 Linux

  3. Amankan Apache dengan Lets Encrypt di Debian 10

  1. Instal Automad CMS dengan Nginx dan Mari Enkripsi SSL di Debian 10

  2. Cara Instal OpenCart dengan Nginx dan Lets Encrypt di Debian 10

  3. Cara Menginstal Drupal 9 dengan Nginx dan Mengenkripsi SSL di Debian 10

  1. Cara Menginstal Joomla dengan Apache dan Mengenkripsi SSL di Debian 10

  2. Cara Menginstal Drupal dengan Apache dan Mengenkripsi SSL di Debian 11

  3. Instal TaskBoard dengan Apache dan biarkan Enkripsi SSL di Debian 11