GNU/Linux >> Belajar Linux >  >> Linux

Cara Mengatur Beberapa SSL pada Satu IP Dengan Nginx

Dengan kurangnya ruang alamat yang tersedia di IPv4, IP menjadi semakin sulit didapat, dan dalam beberapa kasus, semakin mahal. Namun, dalam banyak kasus, ini bukan kelemahan. Server sangat mampu meng-hosting banyak situs web pada satu alamat IP, seperti yang telah mereka lakukan selama bertahun-tahun.

Namun, ada saatnya ketika menggunakan sertifikat SSL untuk mengamankan lalu lintas ke situs Anda memerlukan memiliki alamat IPv4 terpisah untuk setiap domain aman. Ini bukan karena SSL terikat ke IP, atau bahkan ke server, tetapi karena permintaan informasi sertifikat SSL tidak menentukan domain apa yang sedang dimuat, dan dengan demikian server terpaksa merespons hanya dengan satu sertifikat. Ketidakcocokan nama menyebabkan peringatan sertifikat tidak aman, dan oleh karena itu, pemilik server diharuskan memiliki IP unik untuk semua host SSL.

Untungnya, keterbatasan IPv4 telah membawa teknologi dan kegunaan baru ke permukaan, terutama, Indikasi Nama Server (SNI).

Mengapa Saya Membutuhkan SSL?

Sertifikat Secure Socket Layer (SSL) memungkinkan komunikasi terenkripsi dua arah antara klien dan server. Ini memungkinkan perlindungan data apa pun dari pengintaian, termasuk informasi sensitif seperti nomor kartu kredit atau kata sandi. SSL secara opsional ditandatangani oleh otoritas penandatanganan pihak ketiga yang terkenal, seperti GlobalSign. Penggunaan paling umum dari sertifikat tersebut adalah untuk mengamankan lalu lintas web melalui HTTPS.

Saat menjelajahi situs HTTPS, alih-alih menampilkan indikator positif, browser modern menampilkan negatif indikator untuk situs yang bukan menggunakan SSL. Jadi, situs web yang tidak memiliki SSL akan memiliki tanda bahaya langsung untuk setiap pengunjung baru. Oleh karena itu, situs yang ingin mempertahankan reputasinya terpaksa mendapatkan SSL.

Untungnya, sangat mudah untuk mendapatkan dan menginstal SSL, bahkan gratis, sehingga hal ini direduksi menjadi formalitas dasar. Kami akan membahas secara spesifik di bawah ini.

Apa itu SNI?

Indikasi Nama Server adalah kemampuan browser dan server web di mana permintaan HTTPS menyertakan header tambahan, server_name , yang dapat ditanggapi oleh server dengan sertifikat SSL yang sesuai. Ini memungkinkan satu alamat IP untuk menghosting ratusan atau ribuan domain, masing-masing dengan SSL-nya sendiri!

Teknologi SNI tersedia di semua browser modern dan perangkat lunak server web, sehingga sekitar 98+% pengguna web, menurut W3, akan dapat mendukungnya.

Pemeriksaan Pra-Penerbangan

Kami akan bekerja pada server VPS CentOS 7 yang menggunakan Nginx dan PHP-FPM untuk meng-host situs web tanpa panel kontrol (cPanel, Plesk, dll.). Ini biasanya disebut sebagai tumpukan "LEMP", yang menggantikan Nginx untuk Apache di tumpukan "LAMP". Instruksi ini akan mirip dengan kebanyakan rasa Linux lainnya, meskipun instalasi Let's Encrypt untuk Ubuntu 18.04 akan berbeda. Saya akan menyertakan instruksi berdampingan untuk CentOS 7 dan Ubuntu 18.04.

Untuk petunjuk selanjutnya, kami akan menganggap Anda telah menginstal dan menyiapkan Nginx untuk meng-host beberapa situs web, termasuk konfigurasi firewall untuk membuka port yang diperlukan (80 dan 443). Kami terhubung melalui SSH ke shell di server kami sebagai root.

CatatanJika Anda memiliki SSL untuk setiap domain, tetapi belum terpasang, Anda harus menggunakan Langkah 3a untuk menambahkannya secara manual. Jika Anda tidak memiliki SSL dan ingin menggunakan layanan Let's Encrypt gratis untuk memesan dan mengonfigurasinya secara otomatis, Anda harus menggunakan Langkah 3b .

Langkah 1:Mengaktifkan SNI di Nginx

Langkah pertama kita sudah selesai! Versi repositori modern Nginx akan dikompilasi dengan dukungan OpenSSL ke informasi SNI server secara default. Kami dapat mengkonfirmasi ini pada baris perintah dengan:

nginx -V

Ini akan menampilkan banyak teks, tetapi kami hanya tertarik pada baris ini:

...
TLS SNI support enabled
...

Jika Anda tidak memiliki baris seperti ini, maka Nginx harus dikompilasi ulang secara manual untuk menyertakan dukungan ini. Ini akan menjadi contoh yang sangat langka, seperti pada versi lama Nginx, yang sudah dikompilasi secara manual dari sumber dengan pustaka OpenSSL yang berbeda. Versi Nginx yang diinstal oleh repositori CentOS 7 EPEL (1.12.2) dan yang disertakan dengan Ubuntu 18.04 (1.14.0) akan mendukung SNI.

Langkah 2:Mengonfigurasi Host Virtual Nginx

Karena Anda telah menyiapkan lebih dari satu domain di Nginx, Anda mungkin telah menyiapkan blok konfigurasi server untuk setiap situs dalam file terpisah. Untuk berjaga-jaga jika Anda tidak melakukannya, pertama-tama pastikan bahwa domain kami disiapkan untuk lalu lintas non-SSL. Jika ya, Anda dapat melewati langkah ini. Kami akan mengerjakan domain.com dan example.com.

vim /etc/nginx/sites-available/domain.com

CatatanJika Anda tidak memiliki folder yang mendukung situs atau situs yang tersedia, dan Anda ingin menggunakannya, Anda dapat membuat /etc/nginx/sites-available dan /etc/nginx/sites-enabled dengan mkdir memerintah. Setelah itu,  di dalam /etc/nginx/nginx.conf , tambahkan baris ini di mana saja di dalam http{} main utama blok (kami sarankan untuk meletakkannya tepat setelah itu sertakan baris yang berbicara tentang conf.d):

include /etc/nginx/sites-enabled/*;

Jika tidak, Anda dapat membuat konfigurasi di /etc/nginx/conf.d/*.conf .

Paling tidak, masukkan opsi berikut, ganti root dokumen dengan jalur sebenarnya ke file situs Anda, dan tambahkan variabel lain yang Anda perlukan untuk situs Anda:

server {
listen 80;
server_name domain.com;
root /var/www/domain.com;
...
}

File serupa harus disiapkan untuk example.com, dan domain lain yang ingin Anda hosting. Setelah file ini dibuat, kami dapat mengaktifkannya dengan tautan simbolik:

ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Sekarang, kita restart Nginx…

systemctl reload nginx

Ini memuat ulang file konfigurasi tanpa memulai ulang aplikasi. Kami dapat mengonfirmasi bahwa dua yang baru saja kami buat dimuat menggunakan:

nginx -T

Anda akan melihat server_name . Anda baris untuk domain.com dan example.com.

Catatandengarkan baris yang disertakan dalam blok server di atas akan memungkinkan situs untuk mendengarkan apa saja IP yang ada di server. Jika Anda ingin menentukan IP, Anda dapat menggunakan IP:port format sebagai gantinya, seperti ini:

server {
listen 123.45.67.89:80;
...
}

Langkah 3a:Tambahkan SSL yang Ada ke Host Virtual Nginx

Sekarang kita memiliki konfigurasi berjalan yang valid, kita dapat menambahkan SSL yang kita miliki untuk domain ini sebagai blok server baru di Nginx. Pertama, simpan sertifikat SSL Anda dan kunci (pribadi) ke folder global di server, dengan nama yang menunjukkan domain yang relevan. Katakanlah Anda memilih folder global /etc/ssl/ . Nama kami, dalam hal ini, akan menjadi /etc/ssl/domain.com.crt (yang berisi sertifikat itu sendiri dan semua sertifikat rantai dari otoritas penandatanganan), dan /etc/ssl/domain.com.key , yang berisi kunci pribadi. Edit file konfigurasi yang kita buat:

vim /etc/nginx/sites-available/domain.com

Tambahkan blok server baru di bawah ujung yang sudah ada (di luar kurung kurawal terakhir) dengan informasi berikut:

server {
listen 443;
server_name domain.com;
root /var/www/domain.com;
ssl_certificate /etc/ssl/domain.com.crt;
ssl_certificate_key /etc/ssl/domain.com.key;
...
}

Perhatikan perubahan port mendengarkan ke 443 (untuk HTTPS) dan penambahan ssl_certificate dan ssl_certificate_key garis. Alih-alih menulis ulang seluruh blok, Anda dapat menyalin blok server asli dan kemudian menambahkan baris tambahan ini, sambil mengubah port pendengar. Simpan file ini dan muat ulang konfigurasi Nginx.

systemctl reload nginx

Kami sekali lagi mengonfirmasi bahwa perubahan telah diterapkan menggunakan:

nginx -T

Untuk beberapa penyiapan, Anda akan melihat dua baris server_name masing-masing untuk domain.com dan example.com, satu menggunakan port 80 dan satu menggunakan port 443. Jika ya, Anda dapat melompat ke Langkah 4, jika tidak lanjutkan ke langkah berikutnya.

Langkah 3b:Instal dan Konfigurasi Let's Encrypt

Selanjutnya mari siapkan penyedia SSL gratis Let's Encrypt untuk menandatangani sertifikat secara otomatis untuk semua domain yang baru saja kita siapkan di Nginx. Di Ubuntu 18.04 , tambahkan PPA dan instal skrip sertifikat dengan apt itu:

add-apt-repository ppa:certbot/certbot

apt-get update

apt-get install certbot python-certbot-nginx

Di CentOS 7 , kami menginstal repositori EPEL dan menginstal pembantu sertifikat dari sana.

yum install epel-release

yum install certbot python2-certbot-nginx

Pada kedua sistem, sekarang kita dapat membaca konfigurasi Nginx dan meminta Certbot untuk memberikan beberapa sertifikat kepada kita.

certbot --nginx

Ini akan menanyakan beberapa pertanyaan tentang domain mana yang ingin Anda gunakan (Anda dapat membiarkan opsi kosong untuk memilih semua domain) dan apakah Anda ingin Nginx mengarahkan lalu lintas ke SSL baru Anda (kami akan melakukannya!). Setelah proses penandatanganan selesai, Nginx akan secara otomatis memuat ulang konfigurasinya, tetapi jika tidak, muat ulang secara manual:

systemctl reload nginx

Anda sekarang dapat memeriksa konfigurasi yang sedang berjalan dengan:

nginx -T

Anda sekarang seharusnya melihat dua baris server_name masing-masing untuk domain.com dan example.com, satu menggunakan port 80 dan satu menggunakan port 443.

Sertifikat Let's Encrypt hanya berlaku selama 90 hari sejak diterbitkan, jadi kami ingin memastikan bahwa sertifikat tersebut diperbarui secara otomatis. Edit file cron untuk pengguna root dengan menjalankan:

crontab -e

Cron akan terlihat seperti ini:

45 2 * * 3,6 certbot renew && systemctl reload nginx

Setelah Anda menyimpan file ini, setiap Rabu dan Sabtu pukul 02.45, certbot perintah akan memeriksa pembaruan yang diperlukan, mengunduh dan menginstal sertifikat secara otomatis, diikuti dengan memuat ulang konfigurasi Nginx.

Langkah 4:Verifikasi Pemasangan dan Validitas

Sekarang kita harus memeriksa validitas SSL kita dan memastikan bahwa browser melihat sertifikat dengan benar. Kunjungi sslcheck.liquidweb.com dan ketik nama domain Anda untuk memeriksa SSL situs di server Anda. Anda akan melihat empat tanda centang hijau, yang menunjukkan perlindungan SSL.

Kami harap Anda menikmati tutorial kami tentang cara memasang SSL di banyak situs dalam satu server. Pelanggan Liquid Web memiliki akses ke tim dukungan kami 24/7. Kami dapat membantu dengan SSL yang ditandatangani atau memesan server baru untuk transfer yang mudah ke Liquid Web.


Linux
  1. Cara mengkonfigurasi SSL Cloudflare asal dengan Nginx

  2. Cara Mengamankan Nginx dengan SSL dan Let's Encrypt di FreeBSD

  3. Cara Mengatur Beberapa Sertifikat SSL Pada VPS CentOS Dengan Apache Menggunakan Satu Alamat IP

  1. Cara mengkonfigurasi beberapa situs web dengan server web Apache

  2. Cara Menginstal Let's Encrypt SSL di Ubuntu 18.04 dengan Nginx

  3. Cara Mengatur Server Linux Sebagai Router dengan NAT

  1. Cara Mengatur Blok Server Nginx di Ubuntu 20.04

  2. Cara Mengatur Blok Server Nginx di CentOS 7

  3. Cara Mengatur Blok Server Nginx di CentOS 8