All Products
Search
Document Center

Certificate Management Service:Instal Sertifikat SSL pada server Nginx atau Tengine (Linux)

Last Updated:Apr 01, 2026

Aktifkan HTTPS pada server Nginx atau Tengine Anda dengan menginstal sertifikat SSL. Panduan ini akan memandu Anda melalui proses mengunduh paket sertifikat, membuka Port 443, mengonfigurasi blok server Nginx, dan memverifikasi hasilnya.

Apa yang akan Anda lakukan:

  • Unduh paket sertifikat dari Konsol SSL Certificates dan unggah ke server Anda

  • Buka Port 443 di security group dan firewall sistem Anda

  • Tambahkan blok server HTTPS ke konfigurasi Nginx Anda

  • Muat ulang Nginx dan konfirmasi bahwa sertifikat berfungsi

Langkah-langkah ini juga berlaku untuk Tengine, yang kompatibel dengan konfigurasi Nginx.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Sertifikat SSL yang dikeluarkan oleh Otoritas Sertifikat (CA) tepercaya. Jika sertifikat telah kedaluwarsa atau hampir kedaluwarsa, perpanjang terlebih dahulu.

  • Akun root atau akun dengan hak istimewa sudo pada server

  • Rekaman DNS domain yang dikonfigurasi untuk mengarah ke Alamat IP publik server

  • Sertifikat yang mencakup semua domain yang ingin Anda amankan

Aturan cakupan domain:

Jenis cakupanApa yang dilindungiApa yang tidak dilindungi
Cocok persis (example.com)example.com sajawww.example.com atau subdomain apa pun
Cocok persis (www.example.com)www.example.com sajaDomain root atau subdomain lainnya
Wildcard (*.example.com)Subdomain tingkat pertama: www.example.com, a.example.comDomain root example.com, subdomain multi-level seperti a.b.example.com
Untuk melindungi subdomain multi-level seperti a.b.example.com, bidang Bound Domains harus berisi domain tersebut secara eksplisit atau wildcard yang sesuai seperti *.b.example.com.

Untuk menambah atau mengubah nama domain, beli sertifikat komersial atau tambahkan dan ganti nama domain.

Langkah 1: Siapkan sertifikat SSL

  1. Buka halaman SSL Certificates. Pada kolom Actions untuk sertifikat target, klik Download Certificate. Di tab Download, pilih Nginx sebagai Server Type dan unduh paketnya.

  2. Ekstrak paket yang telah diunduh:

    • Jika paket berisi file sertifikat (.pem) dan file kunci privat (.key), simpan keduanya. Anda akan memerlukannya pada langkah berikutnya.

    • Jika paket hanya berisi file .pem dan tidak ada file .key, gunakan file kunci privat yang Anda simpan secara lokal saat membuat Permintaan Penandatanganan Sertifikat (CSR).

    Jika Anda menggunakan OpenSSL atau keytool untuk membuat CSR, kunci privat hanya disimpan di mesin lokal Anda — tidak termasuk dalam paket yang diunduh. Jika kunci privat hilang, sertifikat tidak dapat digunakan. Beli sertifikat komersial baru dan buat CSR serta kunci privat baru.
  3. Unggah file .pem dan .key ke server Anda. Simpan di direktori yang aman, misalnya /etc/ssl/cert.

    Gunakan fitur unggah file dari tool login remote seperti PuTTY, Xshell, atau WinSCP. Jika server Anda adalah instans Alibaba Cloud Elastic Compute Service (ECS), lihat Unggah atau unduh file.

Langkah 2: Buka Port 443

Traffic HTTPS menggunakan Port TCP 443. Pastikan port tersebut terbuka baik di security group cloud maupun firewall sistem Anda.

Periksa apakah Port 443 terbuka

Jalankan perintah berikut untuk menguji konektivitas pada Port 443. Ganti <your_server_public_ip> dengan Alamat IP publik server Anda.

RHEL/CentOS

command -v nc > /dev/null 2>&1 || sudo yum install -y nc
# Ganti <your_server_public_ip> dengan Alamat IP publik server Anda.
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

Jika output-nya Ncat: Connected to <your_server_public_ip>:443, Port 443 terbuka. Jika tidak, ikuti langkah-langkah di bawah ini.

Debian/Ubuntu

command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat
# Ganti <your_server_public_ip> dengan Alamat IP publik server Anda.
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

Jika output-nya Connection to <your_server_public_ip> port [tcp/https] succeeded! atau [<your_server_public_ip>] 443 (https) open, Port 443 terbuka. Jika tidak, ikuti langkah-langkah di bawah ini.

Buka Port 443 di security group Anda

Penting

Jika server Anda berjalan di platform cloud, security group-nya harus mengizinkan lalu lintas inbound TCP pada Port 443. Langkah-langkah di bawah ini menggunakan Alibaba Cloud ECS sebagai contoh. Untuk platform cloud lainnya, rujuk dokumentasi mereka.

Buka halaman instans Elastic Compute Service (ECS) dan klik nama instans target. Di bagian Security Group Details, tambahkan aturan dengan pengaturan berikut lalu klik Add a security group rule:

BidangNilai
ActionAllow
ProtocolCustom TCP
Destination (Current Instance)HTTPS (443)
Source0.0.0.0/0 (anywhere)

Buka Port 443 di firewall sistem Anda

Jalankan perintah berikut untuk mengidentifikasi firewall aktif Anda:

if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
    echo "firewalld"
elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then
    echo "ufw"
elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then
    echo "nftables"
elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then
    echo "iptables"
elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then
    echo "iptables"
else
    echo "none"
fi

Jika output-nya none, tidak diperlukan tindakan firewall. Jika tidak, jalankan perintah sesuai jenis firewall Anda:

firewalld

sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reload

ufw

sudo ufw allow 443/tcp

nftables

sudo nft add table inet filter 2>/dev/null
sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null
sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/null

iptables

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Untuk mempertahankan aturan iptables setelah reboot:

  • RHEL/CentOS:

    sudo yum install -y iptables-services
    sudo service iptables save
  • Debian/Ubuntu:

    sudo apt-get install -y iptables-persistent
    sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null

Langkah 3: Instal sertifikat SSL pada Nginx

Instal modul SSL

Jalankan perintah berikut. Jika output-nya --with-http_ssl_module, modul SSL sudah terinstal dan Anda dapat langsung menuju Konfigurasi sertifikat SSL.

nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'
Jika sistem mengembalikan nginx: command not found, gunakan jalur instalasi lengkapnya, misalnya: /usr/local/nginx/sbin/nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'.

Jika modul SSL belum terpasang, instal menggunakan salah satu metode di bawah ini sesuai cara instalasi Nginx Anda.

Penting

Menambahkan modul SSL dapat menyebabkan gangguan singkat pada layanan Nginx. Cadangkan konfigurasi dan data Nginx Anda terlebih dahulu, dan lakukan perubahan ini pada jam sepi.

Menggunakan package manager

Jalankan perintah berikut di terminal server Anda:

RHEL/CentOS

# Tambahkan repositori resmi Nginx.
sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

# Upgrade Nginx.
sudo yum upgrade nginx

Debian/Ubuntu

# Upgrade Nginx.
sudo apt-get update
sudo apt-get install --only-upgrade nginx

Kompilasi dari source

  1. Instal dependensi build.

    RHEL/CentOS

    sudo yum install -y gcc pcre-devel zlib-devel openssl-devel

    Debian/Ubuntu

    sudo apt-get update
    sudo apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
  2. Catat parameter kompilasi saat ini.

    nginx -V

    Salin semua parameter yang muncul setelah configure arguments:. Anda akan memerlukannya di langkah 4.

  3. Unduh kode sumber untuk versi Nginx Anda saat ini. Jalankan nginx -v untuk memeriksa versinya (contoh: 1.14.2). Lalu unduh dan ekstrak paket sumbernya:

    wget http://nginx.org/download/nginx-1.14.2.tar.gz
    tar -zxvf nginx-1.14.2.tar.gz
    cd nginx-1.14.2
  4. Kompilasi ulang Nginx dengan modul SSL. Tambahkan --with-http_ssl_module ke parameter yang telah Anda catat, lalu kompilasi ulang:

    Jika Anda melihat error: 'ENGINE_by_id' is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations], jalankan make CFLAGS='-Wno-error=deprecated-declarations' sebagai gantinya.
    # Pertahankan semua parameter asli agar modul yang ada tidak hilang.
    ./configure <Original parameters> --with-http_ssl_module
    make
  5. Ganti binary Nginx. Cadangkan binary aslinya (misalnya /usr/local/nginx/sbin/nginx):

    # Ganti /usr/local/nginx/sbin/nginx dengan jalur aktual ke binary nginx Anda.
    sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

    Timpa dengan binary hasil kompilasi baru:

    # Ganti /usr/local/nginx/sbin/nginx dengan jalur aktual ke binary nginx Anda.
    sudo cp objs/nginx /usr/local/nginx/sbin/nginx
  6. Verifikasi bahwa modul SSL telah terinstal.

    nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'

    Output --with-http_ssl_module mengonfirmasi bahwa modul telah terinstal.

Konfigurasi sertifikat SSL

Penting

Langkah-langkah berikut menggunakan Nginx 1.14.2 dan file konfigurasi /etc/nginx/nginx.conf sebagai contoh. Untuk menemukan file konfigurasi aktif di server Anda, lihat Bagaimana cara menemukan file konfigurasi Nginx aktif?

  1. Buka file konfigurasi.

    sudo vim /etc/nginx/nginx.conf
  2. Tambahkan blok server untuk HTTPS. Salin blok server yang ada yang mendengarkan Port 80, ubah listen 80 menjadi listen 443 ssl, lalu tambahkan direktif SSL seperti di bawah ini. Biarkan semua pengaturan lain tetap tidak berubah.

    # Blok server asli yang mendengarkan Port 80
    server {
        listen 80;
        server_name yourdomain www.yourdomain;
    
        # Konfigurasi lainnya
        location / {
            proxy_pass http://127.0.0.1:8000;
        }
    }
    
    # Blok server baru untuk HTTPS.
    server {
        # Ubah 'listen 80' asli menjadi 'listen 443 ssl'.
        listen 443 ssl;
        # server_name asli. Anda dapat menambahkan lebih banyak nama domain yang didukung oleh sertifikat saat ini.
        server_name yourdomain www.yourdomain;
    
        # ======================= Awal konfigurasi sertifikat =======================
        # Tentukan file sertifikat (sertifikat perantara dapat ditambahkan ke file .pem ini). Ganti /etc/ssl/cert/ssl.pem dengan jalur mutlak file sertifikat Anda.
        ssl_certificate /etc/ssl/cert/ssl.pem;
        # Tentukan file kunci privat. Ganti /etc/ssl/cert/ssl.key dengan jalur mutlak file kunci privat Anda.
        ssl_certificate_key /etc/ssl/cert/ssl.key;
        # Konfigurasikan cache sesi SSL untuk meningkatkan performa.
        ssl_session_cache shared:SSL:1m;
        # Atur periode timeout sesi SSL.
        ssl_session_timeout 5m;
        # Sesuaikan jenis protokol TLS dan paket sandi yang digunakan (berikut adalah contoh konfigurasi; evaluasi apakah Anda perlu mengonfigurasinya).
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        # Tentukan versi protokol TLS yang diizinkan. Versi TLS yang lebih tinggi memberikan keamanan lebih baik untuk komunikasi HTTPS, tetapi kompatibilitas browser-nya lebih buruk dibandingkan versi TLS yang lebih rendah.
        ssl_protocols TLSv1.2 TLSv1.3;
        # Utamakan paket sandi yang ditentukan oleh server.
        ssl_prefer_server_ciphers on;
        # ======================= Akhir konfigurasi sertifikat =======================
    
        # Konfigurasi lainnya
    }
  3. (Opsional) Arahkan HTTP ke HTTPS. Tambahkan direktif return ke blok server Port 80.

    # Blok server asli yang mendengarkan Port 80
    server {
        listen 80;
        server_name yourdomain www.yourdomain;
    
        # Arahkan seluruh traffic HTTP ke HTTPS.
        return 301 https://$host$request_uri;
    
        # Konfigurasi asli lainnya dapat dihapus karena tidak akan lagi dijangkau.
    }
  4. Uji konfigurasi untuk kesalahan sintaksis.

    sudo nginx -t -c /etc/nginx/nginx.conf

    Jika output mencakup syntax is ok dan test is successful, konfigurasi valid. Jika tidak, perbaiki kesalahan yang dilaporkan dan jalankan pengujian lagi.

Muat ulang Nginx

Penting

Perintah-perintah ini mengasumsikan Nginx dijalankan dengan jalur konfigurasi default. Jika Anda menggunakan jalur instalasi atau file konfigurasi khusus, sesuaikan dengan kondisi Anda.

Nginx sedang berjalan

Muat ulang konfigurasi tanpa me-restart layanan:

sudo nginx -s reload

Jika gagal dimuat ulang, lihat FAQ untuk troubleshooting.

Nginx tidak berjalan

Jalankan:

nginx

Langkah 4: Verifikasi penerapan

  1. Buka browser dan navigasi ke https://yourdomain. Ganti yourdomain dengan domain aktual Anda.

  2. Ikon gembok di bilah alamat mengonfirmasi bahwa sertifikat berhasil diterapkan. Mulai Chrome versi 117, ikon image telah diganti dengan ikon image baru. Klik ikon tersebut untuk melihat detail sertifikat. Jika Anda melihat error akses atau tidak ada ikon gembok, bersihkan cache browser Anda atau coba lagi dalam mode penyamaran.

    image

Jika masalah tetap ada, lihat FAQ untuk troubleshooting.

Peluncuran

Saat menerapkan ke lingkungan produksi, terapkan praktik terbaik berikut:

PraktikMengapa pentingCara menerapkan
Jalankan sebagai pengguna non-rootMembatasi dampak insiden keamananBuat pengguna sistem khusus dengan hak istimewa rendah untuk aplikasi
Hentikan SSL di gerbangMenyederhanakan manajemen sertifikat dan mengurangi kompleksitas backendTerapkan sertifikat pada Server Load Balancer (SLB). SLB menghentikan HTTPS dan meneruskan HTTP biasa ke backend
Eksternalisasi rahasiaMencegah kebocoran kredensial melalui kode sumber atau file konfigurasiGunakan variabel lingkungan, HashiCorp Vault, atau Alibaba Cloud Key Management Service alih-alih hardcoding password
Paksa pengalihan HTTP ke HTTPSMencegah serangan man-in-the-middle pada traffic yang tidak terenkripsiTambahkan return 301 https://$host$request_uri; ke blok server Port 80
Nonaktifkan versi TLS yang tidak amanSSLv3, TLSv1.0, dan TLSv1.1 rentan terhadap serangan yang diketahuiAtur ssl_protocols TLSv1.2 TLSv1.3; dalam konfigurasi Nginx
Pantau sertifikat dan perbarui tepat waktuSertifikat kedaluwarsa akan memutus HTTPS untuk semua penggunaAktifkan pemantauan domain. Alibaba Cloud memeriksa validitas sertifikat dan mengirimkan pengingat perpanjangan sebelum kedaluwarsa. Lihat Beli dan aktifkan pemantauan nama domain publik

FAQ

Mengapa HTTPS tidak dapat diakses setelah instalasi?

Periksa hal-hal berikut secara berurutan:

  • Port 443 diblokir — Security group atau firewall tidak mengizinkan lalu lintas inbound pada Port 443. Lihat Buka Port 443.

  • Ketidakcocokan domain — Domain yang Anda akses tidak tercantum dalam Bound Domains sertifikat. Lihat tabel cakupan domain di Prasyarat.

  • Nginx belum dimuat ulang — Konfigurasi belum dimuat ulang setelah perubahan. Jalankan sudo nginx -s reload.

  • Jalur file salah — Direktif ssl_certificate atau ssl_certificate_key mengarah ke jalur yang salah. Verifikasi jalur mutlak ke file .pem dan .key Anda.

  • Sertifikat tidak ada di layanan upstream — Jika domain Anda melewati Content Delivery Network (CDN), Server Load Balancer (SLB), atau Web Application Firewall (WAF), sertifikat juga harus diinstal pada layanan tersebut. Lihat Lokasi penerapan sertifikat ketika traffic melewati beberapa layanan Alibaba Cloud.

  • Sertifikat tidak diterapkan di semua server — Jika DNS domain mengarah ke beberapa server, instal sertifikat di masing-masing server.

Untuk bantuan lebih lanjut, lihat Selesaikan masalah penerapan sertifikat berdasarkan pesan error browser dan Panduan troubleshooting penerapan sertifikat SSL.

Bagaimana cara memperbarui atau mengganti sertifikat SSL tanpa downtime?

  1. Cadangkan file .pem dan .key saat ini di server.

  2. Unduh sertifikat dan kunci privat baru dari Konsol Layanan Manajemen Sertifikat.

  3. Unggah file baru ke server, ganti file yang ada. Gunakan jalur dan nama file yang sama persis seperti yang dirujuk dalam konfigurasi Nginx Anda.

  4. Muat ulang Nginx: sudo nginx -s reload.

Bagaimana cara menemukan file konfigurasi Nginx aktif (nginx.conf) di server Linux?

  1. Jalankan ps -ef | grep '[n]ginx: master' | grep -- ' -c '. Jika output mencakup sesuatu seperti -c /etc/nginx/custom.conf, Nginx menggunakan file konfigurasi kustom tersebut.

  2. Jika langkah 1 tidak menghasilkan output, Nginx menggunakan jalur default yang dikompilasi. Jalankan nginx -V 2>&1 | grep -oP -- '--conf-path=[^ ]*' untuk menampilkan jalur default, misalnya --conf-path=/etc/nginx/nginx.conf.

Bagaimana cara menonaktifkan TLSv1.0 dan TLSv1.1 untuk memperbaiki peringatan "sertifikat tidak memenuhi standar"?

Atur direktif ssl_protocols dalam konfigurasi Nginx Anda menjadi:

ssl_protocols TLSv1.2 TLSv1.3;

Ini akan menonaktifkan protokol TLSv1.0 dan TLSv1.1 yang tidak aman. Setelah menyimpan file, jalankan nginx -s reload untuk menerapkan perubahan.

Mengapa nginx -t gagal dengan bind() to 0.0.0.0:443 failed (98: Address already in use)?

Proses lain sudah mendengarkan Port 443. Jalankan sudo ss -tlnp | grep :443 untuk mengidentifikasinya. Lalu hentikan proses yang bertentangan (seperti server web lain atau instans Nginx yang hang) atau konfigurasi ulang agar menggunakan port berbeda.

Mengapa nginx -t gagal dengan cannot load certificate "/etc/nginx/ssl/domain.pem": BIO_new_file() failed?

Nginx tidak dapat menemukan file sertifikat di jalur yang ditentukan dalam konfigurasi Anda. Perbaiki direktif ssl_certificate dalam nginx.conf agar mengarah ke jalur mutlak aktual file .pem Anda.

Mengapa memuat ulang Nginx gagal dengan the "ssl" parameter requires ngx_http_ssl_module?

Build Nginx tidak menyertakan modul SSL. Instal atau kompilasi ulang Nginx dengan ngx_http_ssl_module diaktifkan. Lihat Instal modul SSL.

Mengapa saya mendapatkan No such file or directory: fopen('/cert/3970497_demo.aliyundoc.com.pem','r') saat memuat ulang Nginx?

Jalur yang ditentukan untuk ssl_certificate atau ssl_certificate_key salah. Verifikasi bahwa jalur dalam konfigurasi Anda adalah jalur mutlak yang benar dan file tersebut ada di lokasi tersebut.

Mengapa Nginx gagal membaca file sertifikat SSL dengan error permission denied?

Pengguna proses worker Nginx tidak memiliki izin baca ke file sertifikat.

  1. Temukan pengguna worker Nginx: cari direktif user dalam nginx.conf (misalnya, user nginx;).

  2. Berikan izin baca (r) kepada pengguna tersebut pada file sertifikat dan kunci privat, serta izin eksekusi (x) pada semua direktori induk dalam jalurnya.