Menggunakan Let’s Encrypt dengan DNS Challenge pada server lokal tanpa IP publik, menggunakan Certbot dan Cloudflare.

Dengan metode ini, Anda bisa mendapatkan sertifikat SSL gratis dari Let’s Encrypt, meskipun server Anda tidak memiliki IP publik.

Prerequisites

  • Domain terdaftar yang Anda kelola.
  • Cloudflare sebagai DNS provider (atau DNS provider yang mendukung API untuk pengelolaan otomatis DNS record).
  • Akses root ke server lokal Anda.
  • Certbot dan plugin certbot-dns-cloudflare untuk otomatisasi DNS challenge.

Langkah-langkah:

1. Install Certbot dan Plugin DNS Cloudflare

Pertama, Anda perlu menginstal Certbot dan plugin DNS untuk Cloudflare agar bisa mengelola DNS challenge secara otomatis.

a. Install Certbot

Jika Anda menggunakan distribusi berbasis Ubuntu/Debian, ikuti langkah-langkah ini:

sudo apt update
sudo apt install certbot
b. Install Plugin DNS Cloudflare

Plugin ini memungkinkan Certbot mengelola DNS record di Cloudflare untuk memenuhi DNS challenge dari Let’s Encrypt.

sudo apt install python3-certbot-dns-cloudflare

2. Buat API Key di Cloudflare

Agar Certbot dapat mengelola DNS di Cloudflare, Anda memerlukan API Key.

  1. Login ke akun Cloudflare.
  2. Buka bagian API Tokens di dashboard Cloudflare.
  3. Buat API Token baru dengan izin Zone:DNS. Ini akan memungkinkan Certbot untuk membuat dan menghapus TXT record di DNS.
  4. Simpan API Key dan email yang terdaftar untuk digunakan nanti.

3. Konfigurasi API Credentials untuk Certbot

Buat file untuk menyimpan API Key dan email Cloudflare di server lokal. Tempatkan file ini di direktori yang aman.

a. Buat file kredensial Cloudflare

Buat file dengan nama cloudflare.ini di direktori yang aman (misalnya di ~/.secrets/certbot/).

mkdir -p ~/.secrets/certbot
nano ~/.secrets/certbot/cloudflare.ini

Isi file cloudflare.ini dengan format berikut:

dns_cloudflare_email = [email protected]
dns_cloudflare_api_key = your-cloudflare-api-key
  • [email protected]: Ganti dengan alamat email yang digunakan untuk login ke Cloudflare.
  • your-cloudflare-api-key: Ganti dengan API Key yang telah Anda buat sebelumnya.
b. Set file permissions untuk keamanan

Pastikan file cloudflare.ini hanya dapat diakses oleh root untuk menjaga keamanan.

chmod 600 ~/.secrets/certbot/cloudflare.ini

4. Generate Sertifikat SSL dengan Let’s Encrypt

Sekarang, Anda bisa menggunakan Certbot untuk mendapatkan sertifikat SSL dengan metode DNS challenge dari Let’s Encrypt. Proses ini akan membuat DNS TXT record secara otomatis melalui API Cloudflare.

Gunakan perintah berikut untuk mendapatkan sertifikat SSL untuk domain dan subdomain Anda:

sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
-d yourdomain.com -d www.yourdomain.com
  • yourdomain.com: Ganti dengan domain yang Anda miliki.
  • www.yourdomain.com: Ganti dengan subdomain (atau domain lain yang ingin Anda sertifikasi).

Perintah ini akan melakukan hal-hal berikut:

  1. Menghubungi Let’s Encrypt untuk permintaan sertifikat.
  2. Menggunakan Cloudflare API untuk membuat DNS TXT record yang dibutuhkan untuk validasi DNS-01 challenge.
  3. Let’s Encrypt akan memverifikasi TXT record, dan jika valid, akan mengeluarkan sertifikat SSL untuk domain Anda.

5. Verifikasi Sertifikat yang Dihasilkan

Setelah proses selesai, Let’s Encrypt akan menyimpan sertifikat di direktori berikut:

  • Sertifikat: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
  • Private Key: /etc/letsencrypt/live/yourdomain.com/privkey.pem

Untuk memverifikasi sertifikat telah dibuat, Anda bisa menggunakan perintah berikut:

sudo certbot certificates

Outputnya akan menunjukkan domain yang telah berhasil mendapatkan sertifikat, serta lokasi file sertifikat dan private key.

6. Konfigurasi Nginx untuk Menggunakan SSL (Opsional)

Jika Anda menggunakan Nginx sebagai web server atau proxy, Anda dapat mengkonfigurasi SSL di server Anda dengan sertifikat yang baru saja dihasilkan.

Edit file konfigurasi Nginx untuk domain Anda dan tambahkan konfigurasi SSL berikut:

server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;

ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

location / {
proxy_pass http://localhost:5000; # Aplikasi Flask Anda berjalan di port 5000
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Setelah mengedit file konfigurasi Nginx, restart Nginx untuk menerapkan perubahan:

sudo systemctl restart nginx

7. Perpanjangan Otomatis Sertifikat

Let’s Encrypt memberikan sertifikat yang berlaku selama 90 hari, jadi Anda perlu memastikan bahwa sertifikat diperbarui secara otomatis. Certbot secara otomatis melakukan perpanjangan, tetapi Anda bisa memverifikasi dan menguji perpanjangan dengan perintah berikut:

sudo certbot renew --dry-run

Jika perintah ini berhasil, Certbot akan secara otomatis memperpanjang sertifikat saat masa berlaku hampir habis.

8. Testing SSL (Opsional)

Anda bisa menguji apakah sertifikat SSL telah terpasang dengan benar menggunakan berbagai alat online, seperti:

Tes ini akan memastikan bahwa sertifikat SSL sudah terpasang dengan benar dan aplikasi Anda aman untuk diakses melalui HTTPS.

Kesimpulan

Dengan mengikuti langkah-langkah ini, Anda bisa mengamankan aplikasi yang berjalan di server lokal tanpa IP publik menggunakan Let’s Encrypt dan metode DNS challenge melalui Cloudflare. Proses otomatisasi ini memungkinkan Anda untuk mendapatkan sertifikat SSL gratis yang diperbarui secara berkala tanpa perlu memetakan server ke internet langsung melalui IP publik.

Keuntungan utama:

  • Anda tidak perlu IP publik.
  • Sertifikat SSL dihasilkan dan diperpanjang secara otomatis.
  • Menggunakan Cloudflare untuk manajemen DNS yang aman dan cepat.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top