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.
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.comhanya melindungiexample.com.www.example.comhanya melindungiwww.example.com.
Nama domain wildcard: Hanya berlaku untuk subdomain tingkat pertamanya.
*.example.comberlaku untuk subdomain tingkat pertama sepertiwww.example.comdana.example.com.*.example.comtidak melindungi domain rootexample.comatau subdomain multi-level sepertia.b.example.com.
CatatanUntuk 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
rootatau akun dengan hak istimewasudo.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
Kunjungi halaman Manajemen Sertifikat SSL. Temukan sertifikat target, dan klik Download Certificate di kolom Actions. Di tab Download, unduh sertifikat untuk Server Type Other.
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.
CatatanJika 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.
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> 443Jika 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> 443Jika 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.Buka port 443 di konfigurasi grup keamanan Anda.
PentingJika 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.
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" fiJika keluarannya adalah
none, tidak ada tindakan lebih lanjut yang diperlukan. Jika tidak, jalankan perintah yang sesuai berdasarkan keluaran (firewalld,ufw,nftables, atauiptables) untuk membuka port 443:firewalld
sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reloadufw
sudo ufw allow 443/tcpnftables
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/nulliptables
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTUntuk memastikan aturan iptables bertahan setelah reboot sistem, jalankan perintah berikut:
RHEL/CentOS
sudo yum install -y iptables-services sudo service iptables saveDebian/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
Jalankan perintah berikut untuk membuat direktori guna menyimpan sertifikat Anda di direktori root (
/) server Anda.mkdir /ssl # Buat direktori sertifikat bernama ssl.Unggah file sertifikat dan file kunci privat ke direktori sertifikat (
/ssl).CatatanAnda 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.
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.pyuntuk 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)Pergi ke direktori yang berisi file
test.pydan 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
Akses domain Anda melalui HTTPS di browser web. Misalnya,
https://yourdomain.com. Gantiyourdomain.comdengan domain Anda yang sebenarnya.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).

Mulai versi 117, ikon
di bilah alamat Chrome telah diganti dengan ikon baru
. Klik ikon ini untuk melihat informasi gembok.
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.
CatatanPendekatan 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.
Untuk pemecahan masalah lebih lanjut, lihat Selesaikan Masalah Penerapan Sertifikat Berdasarkan Pesan Kesalahan Browser dan Panduan Pemecahan Masalah Penerapan Sertifikat SSL.
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
443dalam contoh ini).