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 #
-
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.
-
Integrasi Native dengan Nginx: Seluruh konfigurasi dilakukan langsung melalui
nginx.confmenggunakan directive sepertiacme_issuerdanacme_certificate, sehingga tidak membutuhkan service tambahan. -
Zero Downtime Renewal: Proses pembaruan sertifikat dilakukan secara dinamis tanpa menghentikan layanan web, sehingga aplikasi tetap berjalan tanpa gangguan.
-
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-acmeSetelah 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 -tSetelah itu restart Nginx:
systemctl restart nginx