Skip to main content

Setup SSL Otomatis dengan Nginx ACME Module

·2 mins

Nginx ACME Module adalah modul dinamis untuk Nginx yang memungkinkan proses otomatisasi seluruh siklus hidup sertifikat SSL/TLS, mulai dari pembuatan akun ACME, permintaan sertifikat, validasi domain, pemasangan, pembaruan, hingga pengelolaan sertifikat langsung dari konfigurasi Nginx.

Modul ini mendukung protokol ACME seperti yang digunakan oleh Let’s Encrypt, sehingga pengelolaan sertifikat dapat dilakukan tanpa menggunakan tool eksternal seperti Certbot.

Keunggulan
#

  1. Manajemen Sertifikat Otomatis: Modul ACME dapat melakukan validasi kepemilikan domain menggunakan metode HTTP-01 challenge, menerbitkan sertifikat baru, serta melakukan pembaruan otomatis sebelum masa berlaku sertifikat berakhir.

  2. Integrasi Native dengan Nginx: Seluruh konfigurasi dilakukan langsung melalui nginx.conf menggunakan directive seperti acme_issuer dan acme_certificate, sehingga tidak membutuhkan service tambahan.

  3. Zero Downtime Renewal: Proses pembaruan sertifikat dilakukan secara dinamis tanpa menghentikan layanan web, sehingga aplikasi tetap berjalan tanpa gangguan.

  4. Penyimpanan Aman: Informasi akun ACME, private key, dan sertifikat disimpan pada lokasi yang ditentukan melalui state_path. Data tersebut tetap tersedia meskipun Nginx direstart.

Prasyarat
#

Pastikan sistem menggunakan:

  • Nginx versi 1.28.0 atau lebih baru.
  • Modul ACME tersedia dari repository resmi Nginx.

Instalasi & Konfigurasi
#

Install modul ACME Nginx:

dnf install -y nginx-module-acme

Setelah modul terpasang, aktifkan modul pada file konfigurasi nginx.conf:

load_module modules/ngx_http_acme_module.so;

Kemudian, tambahkan konfigurasi ACME dan terapkan ke blok server Anda.

# DNS Resolver
resolver 8.8.8.8 1.1.1.1 ipv6=off valid=300s;
resolver_timeout 5s;

acme_shared_zone zone=acme_shared:16M;

# ACME Issuer - Let's Encrypt
acme_issuer letsencrypt {
    uri         https://acme-v02.api.letsencrypt.org/directory;
    contact     [email protected];
    state_path  /var/cache/nginx/acme-letsencrypt;
    accept_terms_of_service;
    challenge http-01;
    ssl_verify on;
    account_key ecdsa:256;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name example.test;

    root /var/www/html;
    index index.html;

    # Generate dan load sertifikat otomatis
    acme_certificate letsencrypt;
    ssl_certificate     $acme_certificate;
    ssl_certificate_key $acme_certificate_key;

    # Cache sertifikat di memory
    ssl_certificate_cache max=10;

    # SSL Security
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # HSTS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
}

Lakukan pengecekan konfigurasi:

nginx -t

Setelah itu restart Nginx:

systemctl restart nginx

Related