全部产品
Search
文档中心

Certificate Management Service:Pasang Sertifikat SSL pada Aplikasi Python Flask (Linux)

更新时间:Oct 23, 2025

Topik ini menjelaskan cara memasang sertifikat SSL pada server pengembangan Python Flask. Anda akan mempelajari cara mengunduh dan mengunggah file sertifikat, mengonfigurasinya dalam aplikasi Flask, serta memverifikasi pemasangan.

Penting

Jika Anda memiliki pertanyaan selama konfigurasi, hubungi manajer akun Anda untuk bantuan.

Catatan penggunaan

Sebelum memulai, pastikan Anda memenuhi persyaratan berikut:

  • Status Sertifikat: Sertifikat SSL Anda diterbitkan oleh otoritas sertifikat (CA) tepercaya. Jika sertifikat About to Expire atau Expired, perpanjang terlebih dahulu melalui Perpanjangan Sertifikat SSL.

  • Pencocokan Nama Domain: Pastikan sertifikat sesuai dengan semua nama domain yang ingin diamankan. Jika tidak, pengunjung akan melihat peringatan keamanan saat mengakses nama domain yang tidak cocok melalui HTTPS. Untuk menambah atau memodifikasi domain, lihat Tambah dan Ganti Nama Domain.

    • Nama domain eksak: Hanya berlaku untuk nama domain yang ditentukan.

      • example.com hanya melindungi example.com.

      • www.example.com hanya melindungi www.example.com.

    • Nama domain wildcard: Hanya berlaku untuk subdomain tingkat pertamanya.

      • *.example.com berlaku untuk subdomain tingkat pertama seperti www.example.com dan a.example.com.

      • *.example.com tidak melindungi domain root example.com atau subdomain multi-level seperti a.b.example.com.

    Catatan

    Untuk melindungi subdomain multi-level, bidang Bound Domains harus mencakup domain eksak, seperti a.b.example.com, atau domain wildcard yang sesuai, seperti *.b.example.com.

  • Izin Server: Diperlukan akun root atau akun dengan hak istimewa sudo.

  • Resolusi DNS: Rekaman DNS domain telah dikonfigurasi dan diarahkan ke alamat IP publik server.

  • Dependensi Lingkungan: Python dan Flask telah diinstal di server. Topik ini menggunakan sistem operasi Linux, Python 3.6, dan Flask 2.0.3 sebagai contoh.

Prosedur

Langkah 1: Persiapkan sertifikat SSL

  1. Kunjungi halaman Manajemen Sertifikat SSL. Temukan sertifikat target, dan klik Download Certificate di kolom Actions. Di tab Download, unduh sertifikat untuk Server Type Other.

  2. Ekstrak paket sertifikat yang diunduh:

    • Jika paket berisi file sertifikat (.pem) dan file kunci privat (.key), simpan kedua file tersebut. File ini diperlukan untuk penerapan.

    • Jika paket hanya berisi file sertifikat (.pem) tanpa file kunci privat (.key), Anda harus menerapkan sertifikat menggunakan file kunci privat yang disimpan secara lokal.

      Catatan

      Jika Anda menggunakan alat seperti OpenSSL atau Keytool untuk menghasilkan file Permintaan Penandatanganan Sertifikat (CSR) saat mengajukan sertifikat, file kunci privat hanya disimpan secara lokal. Paket sertifikat yang diunduh tidak termasuk kunci privat. Jika kunci privat hilang, sertifikat tidak dapat digunakan. Anda harus membeli sertifikat resmi lagi dan menghasilkan CSR serta kunci privat baru.

Langkah 2: Konfigurasikan sistem dan lingkungan jaringan

Langkah ini memastikan aplikasi Anda memiliki izin untuk mendengarkan port tertentu dan bahwa grup keamanan serta firewall Anda mengizinkan lalu lintas eksternal mencapainya.

  1. Jalankan perintah berikut di terminal server untuk memeriksa apakah port 443 terbuka:

    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 yang sebenarnya.
    sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

    Jika keluarannya adalah Ncat: Connected to <Alamat IP Publik Server Saat Ini>:443, port 443 terbuka. Jika tidak, buka port 443 di grup keamanan dan firewall.

    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 yang sebenarnya.
    sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

    Jika keluarannya adalah Connection to <alamat IP publik server saat ini> port [tcp/https] succeeded! atau [<alamat IP publik server saat ini>] 443 (https) open, port 443 terbuka. Jika tidak, buka port 443 di grup keamanan dan firewall.

  2. Buka port 443 di konfigurasi grup keamanan Anda.

    Penting

    Jika server Anda ditempatkan di platform cloud, pastikan grup keamanannya mengizinkan lalu lintas masuk pada port TCP 443. Jika tidak, layanan tidak akan dapat diakses. Langkah-langkah berikut menggunakan Elastic Compute Service (ECS) Alibaba Cloud sebagai contoh. Untuk platform cloud lainnya, lihat dokumentasi resmi mereka.

    Kunjungi halaman Instans Elastic Compute Service, klik nama instans target untuk masuk ke halaman detail instans. Lihat Tambah Aturan Grup Keamanan untuk menambahkan aturan baru di Security Group dengan Action diatur ke Allow, Protocol Type ke Custom TCP, Destination Port Range ke HTTPS(443), dan Authorization Object ke All IPv4 Addresses.

  3. Buka port 443 di firewall Anda.

    Jalankan perintah berikut untuk mengidentifikasi layanan firewall aktif di sistem 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 keluarannya adalah none, tidak ada tindakan lebih lanjut yang diperlukan. Jika tidak, jalankan perintah yang sesuai berdasarkan keluaran (firewalld, ufw, nftables, atau iptables) untuk membuka port 443:

    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 memastikan aturan iptables bertahan setelah reboot sistem, jalankan perintah berikut:

    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: Pasang sertifikat di aplikasi Flask Anda

  1. Jalankan perintah berikut untuk membuat direktori guna menyimpan sertifikat Anda di direktori root (/) server Anda.

    mkdir /ssl  # Buat direktori sertifikat bernama ssl.
  2. Unggah file sertifikat dan file kunci privat ke direktori sertifikat (/ssl).

    Catatan

    Anda dapat menggunakan fitur unggah file lokal dari alat logon jarak jauh, seperti PuTTY, XShell, atau WinSCP, untuk mengunggah file. Jika Anda menggunakan instans Elastic Compute Service Alibaba Cloud, untuk informasi lebih lanjut tentang cara mengunggah file, lihat Unggah atau Unduh File.

  3. Buka file aplikasi Flask dan konfigurasikan sertifikat menggunakan kode contoh berikut.

    Berikut adalah contoh kode aplikasi Flask lengkap. Anda dapat menyalin kode, memodifikasi jalur sertifikat, dan menyimpannya sebagai test.py untuk menjalankan tes.

    # Impor kerangka kerja web Flask
    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def main():
        return "<p>Hello, World!</p>"
    
    
    # Konfigurasikan sertifikat SSL
    # Port default untuk HTTPS adalah 443.
    # Atur port ke 443 dan berikan jalur mutlak ke file sertifikat dan kunci Anda.
    # Ganti '/ssl/cert.pem' dengan jalur mutlak file sertifikat Anda. 
    # Ganti '/ssl/cert.key' dengan jalur mutlak file kunci privat Anda.
    context = (r'/ssl/cert.pem', r'/ssl/cert.key')
    app.run(host="0.0.0.0", port=443, ssl_context=context)
    
  4. Pergi ke direktori yang berisi file test.py dan jalankan perintah berikut untuk memulai ulang layanan Flask.

    # test.py digunakan sebagai contoh. Ganti dengan nama file aktual Anda.
    python test.py

Langkah 4: Verifikasi pemasangan

  1. Akses domain Anda melalui HTTPS di browser web. Misalnya, https://yourdomain.com. Ganti yourdomain.com dengan domain Anda yang sebenarnya.

  2. Jika ikon gembok muncul di bilah alamat browser, sertifikat berhasil diterapkan. Jika Anda mengalami kesalahan akses atau ikon gembok tidak muncul, bersihkan cache browser Anda atau coba lagi dalam mode penyamaran (privasi).

    image

    Mulai versi 117, ikon image di bilah alamat Chrome telah diganti dengan ikon baru image. Klik ikon ini untuk melihat informasi gembok.

Catatan

Jika masalah tetap ada, lihat FAQ untuk pemecahan masalah.

Tayang

Saat menerapkan ke lingkungan produksi, ikuti praktik terbaik berikut untuk meningkatkan keamanan, stabilitas, dan kemudahan pemeliharaan:

  • Jalankan Sebagai Pengguna Non-Administrator:

    Buat pengguna sistem khusus dengan hak istimewa rendah untuk aplikasi. Jangan pernah menjalankan aplikasi dengan akun yang memiliki hak istimewa administrator.

    Catatan

    Pendekatan yang direkomendasikan adalah mengonfigurasi SSL di lapisan gateway. Ini melibatkan penerapan sertifikat pada Server Load Balancer (SLB) atau reverse proxy seperti Nginx. Gateway mengakhiri lalu lintas HTTPS dan meneruskan lalu lintas HTTP yang didekripsi ke aplikasi backend.

  • Kelola Kredensial Secara Eksternal:

    Jangan pernah menulis sandi atau informasi sensitif lainnya secara hard-coded dalam kode atau file konfigurasi Anda. Gunakan variabel lingkungan, Vault, atau layanan manajemen kunci penyedia cloud untuk menyuntikkan kredensial.

  • Paksakan Pengalihan HTTP ke HTTPS:

    Alihkan semua lalu lintas HTTP ke HTTPS untuk mencegah serangan man-in-the-middle.

  • Konfigurasikan Protokol TLS Modern:

    Nonaktifkan protokol lama dan tidak aman (seperti SSLv3, TLSv1.0, dan TLSv1.1) dalam konfigurasi server Anda. Aktifkan hanya TLSv1.2 dan TLSv1.3.

  • Pantau Sertifikat dan Otomatisasi Perpanjangan:

    Setelah menerapkan sertifikat, aktifkan pemantauan domain. Alibaba Cloud secara otomatis memeriksa periode validitas sertifikat dan mengirimkan pengingat perpanjangan sebelum kedaluwarsa untuk membantu Anda menghindari gangguan layanan. Untuk informasi lebih lanjut, lihat Pembelian dan Aktivasi Pemantauan Nama Domain Publik.

FAQ

Mengapa sertifikat saya tidak berfungsi atau HTTPS tidak dapat diakses setelah pemasangan atau pembaruan?

Penyebab umum meliputi:

  • Grup keamanan atau firewall server tidak mengizinkan lalu lintas pada port 443. Lihat Konfigurasikan Sistem dan Lingkungan Jaringan.

  • Domain yang Anda akses tidak termasuk dalam Bound Domains sertifikat. Lihat Pencocokan Nama Domain.

  • Layanan Flask tidak dimulai ulang setelah file aplikasi Flask dimodifikasi. Untuk instruksi, lihat Hentikan dan Mulai Ulang Layanan Flask.

  • File sertifikat tidak diganti dengan benar, atau jalur sertifikat salah dalam konfigurasi Flask. Periksa konfigurasi sertifikat dalam file aplikasi Flask dan pastikan Anda menggunakan file sertifikat terbaru dan valid.

  • Lalu lintas domain dialihkan melalui produk cloud seperti Content Delivery Network (CDN), SLB, atau Web Application Firewall (WAF), tetapi sertifikat belum dipasang pada layanan tersebut. Lihat Lokasi Penerapan Sertifikat Ketika Lalu Lintas Melewati Beberapa Layanan Alibaba Cloud untuk menyelesaikan pengaturan.

  • DNS domain diarahkan ke beberapa server, tetapi sertifikat hanya dipasang di beberapa di antaranya. Pasang sertifikat di setiap server.

Bagaimana cara memperbarui (mengganti) sertifikat SSL yang terpasang di Flask?

Pertama, cadangkan file sertifikat yang ada (.pem dan .key) di server Anda. Kemudian, masuk ke konsol Layanan Manajemen Sertifikat, unduh file sertifikat baru, dan unggah ke server target untuk menimpa file lama. Pastikan jalur dan nama file tetap sama. Terakhir, untuk menerapkan perubahan, mulai ulang layanan Flask.

Kesalahan FileNotFoundError terjadi saat memulai aplikasi Flask

Kesalahan ini biasanya menunjukkan jalur file yang salah. Periksa apakah jalur untuk file sertifikat dan file kunci privat yang diberikan dalam ssl_context sudah benar. Jalur harus relatif terhadap direktori tempat Anda menjalankan perintah python <your-app-file>.py, atau gunakan jalur mutlak.

Browser menampilkan "ERR_SSL_PROTOCOL_ERROR" atau koneksi diatur ulang

Periksa hal berikut:

  • Pastikan file sertifikat dan file kunci privat cocok.

  • Pastikan file sertifikat adalah rantai sertifikat lengkap (biasanya file .pem). File sertifikat yang diunduh dari Alibaba Cloud sudah mencakup rantai lengkap.

  • Pastikan grup keamanan atau firewall server mengizinkan lalu lintas pada port HTTPS (port 443 dalam contoh ini).