SSL Let’s Encrypt untuk IP Address: Instalasi dan Deploy di Nginx

Rendio Simamora
Rendio Simamora

Selama bertahun-tahun, Let's Encrypt hanya umum digunakan untuk menerbitkan sertifikat SSL/TLS berbasis domain, seperti example.com atau api.example.com. Namun sekarang Let's Encrypt sudah mendukung IP address certificate, sehingga server bisa diakses langsung melalui HTTPS menggunakan alamat IP, misalnya https://203.0.113.10.

Dukungan ini telah tersedia secara umum sejak Januari 2026, dengan ketentuan bahwa sertifikat IP address Let's Encrypt menggunakan profil short-lived dan berlaku sekitar enam hari. Let's Encrypt juga menyatakan bahwa sertifikat IP address mendukung IPv4 maupun IPv6.

Fitur ini sudah tersedia secara umum, tetapi ada satu perbedaan besar dibanding sertifikat domain biasa: sertifikat IP address dari Let's Encrypt wajib menggunakan profil short-lived dan berlaku sekitar 160 jam, atau kurang lebih 6 hari. Karena masa berlakunya pendek, renewal otomatis wajib dikonfigurasi dengan benar.

Artikel ini membahas langkah lengkap mulai dari instalasi Certbot, membuat sertifikat IP, memasang sertifikat ke Nginx, sampai mengatur auto-renewal.

1. Prasyarat

Pastikan beberapa hal berikut sudah terpenuhi:

  1. Server harus memiliki IP publik, bukan IP lokal seperti:

    10.x.x.x
    172.16.x.x
    192.168.x.x

    Contoh IP publik:

    103.168.XXX.149
  2. Port 80 dan 443 juga harus terbuka dari internet.
    Let's Encrypt perlu melakukan validasi ke server kamu menggunakan metode HTTP atau TLS-ALPN. Untuk IP address certificate, DNS challenge tidak bisa digunakan karena validasi dilakukan terhadap kontrol atas IP, bukan domain.

    Cek firewall:

    # Check Status UFW
    sudo ufw status
     
    # Jika memakai UFW, buka port HTTP dan HTTPS:
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw reload

    Jika server berada di cloud provider seperti VPS, AWS, GCP, Azure, DigitalOcean, atau sejenisnya, pastikan juga security group/firewall provider mengizinkan port 80 dan 443.

2. Update Sistem

Untuk Ubuntu/Debian:

sudo apt update
sudo apt upgrade -y

Pasang paket dasar:

sudo apt install -y curl wget ca-certificates gnupg lsb-release

3. Install Nginx

Jika Nginx belum terpasang:

sudo apt install -y nginx

Aktifkan agar berjalan otomatis saat boot:

sudo systemctl enable nginx
sudo systemctl start nginx

Periksa statusnya:

sudo systemctl status nginx

Uji akses melalui browser:

http://103.168.XXX.149

Jika Nginx berhasil terpasang, biasanya akan muncul halaman default Nginx.

4. Menginstal Certbot Versi Terbaru

Untuk IP address certificate, gunakan Certbot versi baru yang sudah mendukung opsi --ip-address. Certbot mengumumkan dukungan untuk IP address certificate dan profil short-lived pada 2026; untuk saat ini Certbot bisa mengambil sertifikat IP address, tetapi belum otomatis memasangnya ke web server, sehingga konfigurasi Nginx masih perlu diedit manual.

Cara yang paling direkomendasikan di Ubuntu/Debian adalah menggunakan snap, karena paket Certbot dari repository apt sering lebih lama tertinggal.

Install snapd:

sudo apt install -y snapd

Install core snap:

sudo snap install core
sudo snap refresh core

Install Certbot:

sudo snap install --classic certbot

Buat symbolic link agar perintah certbot bisa dipanggil langsung:

sudo ln -sf /snap/bin/certbot /usr/bin/certbot

Cek versi Certbot:

certbot --version

Cek apakah opsi IP address tersedia:

certbot --help all | grep ip-address

Jika muncul opsi --ip-address, berarti Certbot sudah mendukung pembuatan certificate untuk IP address.

5. Siapkan Webroot untuk ACME Challenge

Agar Certbot bisa memperbarui sertifikat tanpa mematikan Nginx, gunakan metode webroot. Dengan metode ini, Nginx tetap berjalan, sementara Certbot hanya menaruh file validasi di folder tertentu.

Buat folder challenge:

sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge

Atur permission:

sudo chown -R www-data:www-data /var/www/letsencrypt
sudo chmod -R 755 /var/www/letsencrypt

6. Konfigurasi Nginx untuk HTTP dan ACME Challenge

Buat file konfigurasi baru:

sudo nano /etc/nginx/sites-available/ip-ssl

Isi dengan konfigurasi berikut. Ganti 103.168.XXX.149 dengan IP publik server kamu.

server {
    listen 80 default_server;
    listen [::]:80 default_server;
 
    server_name 103.168.XXX.149 _;
 
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
 
    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt;
    }
 
    location / {
        return 301 https://103.168.XXX.149$request_uri;
    }
}

Aktifkan konfigurasi:

sudo ln -s /etc/nginx/sites-available/ip-ssl /etc/nginx/sites-enabled/ip-ssl

Jika masih ada konfigurasi default yang bentrok, hapus symlink default:

sudo rm -f /etc/nginx/sites-enabled/default

Test konfigurasi Nginx:

sudo nginx -t

Reload Nginx:

sudo systemctl reload nginx

7. Request SSL Certificate untuk IP Address

Sekarang buat sertifikat IP address menggunakan Certbot.

sudo certbot certonly \
  --webroot \
  -w /var/www/letsencrypt \
  --preferred-profile shortlived \
  --ip-address 103.168.XXX.149

Penjelasan:

  • certonly — Artinya Certbot hanya mengambil sertifikat, tidak mengubah konfigurasi Nginx.

  • --webroot -w /var/www/letsencrypt — Artinya validasi Let's Encrypt akan dilakukan melalui folder webroot tersebut.

  • --preferred-profile shortlived — Wajib untuk IP address certificate Let's Encrypt.

  • --ip-address 103.168.XXX.149 — IP publik yang akan dimasukkan ke certificate.

Let's Encrypt mewajibkan IP address certificate memakai profil short-lived, dan Certbot menyebutkan bahwa IP certificate harus diminta menggunakan profil shortlived.

Jika berhasil, sertifikat biasanya tersimpan di:

/etc/letsencrypt/live/103.168.XXX.149/fullchain.pem
/etc/letsencrypt/live/103.168.XXX.149/privkey.pem

Cek sertifikat:

sudo certbot certificates

8. Deploy Certificate ke Nginx

Setelah certificate berhasil dibuat, edit konfigurasi Nginx:

sudo nano /etc/nginx/sites-available/ip-ssl

Gunakan konfigurasi lengkap berikut:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
 
    server_name 103.168.XXX.149 _;
 
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
 
    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt;
    }
 
    location / {
        return 301 https://103.168.XXX.149$request_uri;
    }
}
 
server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
 
    server_name 103.168.XXX.149;
 
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
 
    ssl_certificate /etc/letsencrypt/live/103.168.XXX.149/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/103.168.XXX.149/privkey.pem;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
 
    location / {
        try_files $uri $uri/ =404;
    }
}

Test konfigurasi:

sudo nginx -t

Reload Nginx:

sudo systemctl reload nginx

Sekarang akses:

https://103.168.XXX.149

Jika berhasil, browser akan menampilkan koneksi HTTPS dengan sertifikat valid untuk IP tersebut seperti screenshot dibawah ini

Screenshot Browser

9. Kesimpulan

Let's Encrypt sekarang bisa digunakan untuk membuat SSL certificate langsung pada IP address. Namun ada beberapa hal penting yang harus diperhatikan:

  • IP harus berupa IP publik.

  • Sertifikat IP wajib memakai profil short-lived.

  • Masa berlaku sertifikat sekitar 6 hari.

  • Certbot dapat mengambil sertifikat IP, tetapi konfigurasi Nginx perlu dipasang manual.

  • Auto-renewal wajib berjalan dengan baik.

  • Setelah renewal, Nginx cukup di-reload, tidak perlu dimatikan.

Dengan konfigurasi yang benar, server dapat diakses langsung tanpa perlu domain tambahan.

POSTED IN:
Rendio Simamora
Rendio Simamora

Break The Limit !

Post a Comment