Tüm Ürünler
Search
Belge Merkezi

Certificate Management Service:Install an SSL certificate on Python Flask (Linux)

Son Güncelleme:Oct 05, 2026

Bu kılavuzda, bir SSL sertifikası yükleyerek Python Flask geliştirme sunucusunda HTTPS'yi nasıl etkinleştireceğiniz gösterilmektedir. Örnekler Linux, Python 3.6 ve Flask 2.0.3 sürümlerini kullanır.

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Güvenilir bir sertifika yetkilisi (CA) tarafından verilen bir SSL sertifikası. Sertifikanızın süresi dolmuşsa öncelikle yenileyin.

  • Güvence altına almak istediğiniz tüm alan adlarını kapsayan bir sertifika. Aşağıdaki kapsam kuralları geçerlidir: Alan adı eklemek için ticari bir sertifika satın alın veya alan adlarını ekleyin ve değiştirin.

    • Tam eşleşen alan adı: example.com yalnızca example.com adresini korur. www.example.com yalnızca www.example.com adresini korur.

    • Joker karakterli alan adı: *.example.com www.example.com ve a.example.com gibi birinci düzey alt alan adlarını kapsar ancak kök alan adı example.com veya a.b.example.com gibi çok düzeyli alt alan adlarını kapsamaz. > Note: Çok düzeyli alt alan adlarını güvence altına almak için tam alan adını (örneğin a.b.example.com) veya eşleşen joker karakteri (örneğin *.b.example.com) Bound Domains alanına ekleyin.

  • Sunucuda root hesabı veya sudo ayrıcalıklarına sahip bir hesap.

  • Alan adınız için sunucunun genel IP adresine çözümlenen bir DNS kaydı.

  • DNS Çözümleme: Alan adı, sunucunun genel IP adresine çözümlenir.

  • Sunucuya yüklenmiş Python ve Flask.

Adım 1: SSL sertifikasını hazırlayın

  1. SSL Certificate Management sayfasına gidin. Sertifikayı bulun ve Actions sütununda Download Certificate seçeneğine tıklayın. Download sekmesinde Server Type olarak Other öğesini seçin ve paketi indirin.

  2. İndirilen paketi ayıklayın:

    • Paket bir sertifika dosyası (.pem) ve bir özel anahtar dosyası (.key) içeriyorsa her iki dosyayı da kaydedin; dağıtım için bu dosyalara ihtiyacınız vardır.

    • Paket yalnızca bir sertifika dosyası (.pem) içeriyor ve özel anahtar dosyası (.key) içermiyorsa sertifikayı yerel makinenizde kaydedilen özel anahtar dosyasıyla birlikte dağıtın.

Sertifikaya başvururken CSR (Sertifika İmzalama İsteği) oluşturmak için OpenSSL veya keytool gibi bir araç kullandıysanız özel anahtar yalnızca yerel makinenize kaydedilmiştir ve indirilen pakete dahil edilmez. Özel anahtar kaybolursa sertifika kullanılamaz hale gelir. Bu durumda yeni bir sertifika satın almanız ve yeni bir CSR ile özel anahtar oluşturmanız gerekir.

Adım 2: Sistem ve ağ ortamını yapılandırın

Sunucunuzun güvenlik grubunun ve sistem güvenlik duvarının TCP bağlantı noktası 443'teki (HTTPS) gelen trafiğe izin verdiğinden emin olun.

Bağlantı noktası 443'ün açık olup olmadığını kontrol edin

Bağlantı noktası 443 durumunu kontrol etmek için aşağıdaki komutu çalıştırın. <your_server_public_ip> ifadesini sunucunuzun genel IP adresiyle değiştirin.

RHEL/CentOS

command -v nc > /dev/null 2>&1 || sudo yum install -y nc
# Replace <your_server_public_ip> with the public IP address of your server.
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

Bağlantı noktası 443 açıksa çıktı şu şekilde görünür:

Ncat: Connected to <your_server_public_ip>:443

Debian/Ubuntu

command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat
# Replace <your_server_public_ip> with the public IP address of your server.
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

Bağlantı noktası 443 açıksa çıktı şu şekilde görünür:

Connection to <your_server_public_ip> port [tcp/https] succeeded!

veya

[<your_server_public_ip>] 443 (https) open

Bağlantı noktası 443 açık değilse açmak için sonraki iki adımı tamamlayın.

Güvenlik grubunda bağlantı noktası 443'ü açın

Önemli

Sunucunuz bir cloud platformunda çalışıyorsa güvenlik grubunun TCP bağlantı noktası 443'teki gelen trafiğe izin vermesi gerekir. Aksi takdirde hizmete ulaşılamaz. Aşağıdaki adımlarda örnek olarak Alibaba Cloud Elastic Compute Service (ECS) kullanılmıştır. Diğer cloud platformları için ilgili belgelere bakın.

ECS instances sayfasına gidin ve hedef örneği tıklayarak ayrıntılar sayfasını açın. Security Group Details bölümünde aşağıdaki ayarlarla bir güvenlik grubu kuralı ekleyin:

Field Value
Action Allow
Protocol Custom TCP
Destination (Current Instance) HTTPS (443)
Source 0.0.0.0/0 (anywhere)

Güvenlik duvarında bağlantı noktası 443'ü açın

Etkin güvenlik duvarı hizmetini belirlemek için aşağıdaki komutu çalıştırın:

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

Çıktı none ise başka bir işlem gerekmez. Aksi takdirde bağlantı noktası 443'ü açmak için aşağıdaki ilgili komutu çalıştırın.

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

iptables kurallarını yeniden başlatmalarda kalıcı hale getirmek için:

  • 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

Adım 3: Sertifikayı Flask uygulamanıza yükleyin

  1. Sertifika dosyalarınızı depolamak için bir dizin oluşturun:

    mkdir /ssl
  2. Sertifika dosyasını (.pem) ve özel anahtar dosyasını (.key) /ssl dizinine yükleyin.

    Dosyaları aktarmak için uzak oturum açma aracınızın dosya yükleme özelliğini kullanın. Yaygın araçlar arasında PuTTY, Xshell ve WinSCP bulunur. Bir Alibaba Cloud ECS örneği kullanıyorsanız Dosya yükleme veya indirme konusuna bakın.
  3. Flask uygulama dosyanızı açın ve ssl_context kullanarak SSL'yi yapılandırın. Aşağıda eksiksiz bir örnek verilmiştir; kopyalayın, sertifika yollarını güncelleyin ve hızlı bir test çalıştırmak için test.py olarak kaydedin.

    # Import the Flask web framework
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/")
    def main():
        return "<p>Hello, World!</p>"
    
    # Configure the SSL certificate.
    # The default HTTPS port is 443.
    # Replace '/ssl/cert.pem' with the absolute path to your certificate file.
    # Replace '/ssl/cert.key' with the absolute path to your private key file.
    context = (r'/ssl/cert.pem', r'/ssl/cert.key')
    app.run(host="0.0.0.0", port=443, ssl_context=context)
  4. test.py dosyasını içeren dizine gidin ve Flask hizmetini başlatın:

    # Replace test.py with your actual filename.
    python test.py

    Flask başarıyla başlarsa çıktı şu şekilde görünür:

     * Serving Flask app 'test'
     * Running on all addresses (0.0.0.0)
     * Running on https://127.0.0.1:443
     * Running on https://<your_server_public_ip>:443

Yüklemeyi doğrulayın

Tarayıcıda sertifikayı kontrol edin

Bir tarayıcıda https://yourdomain adresini açın (yourdomain yerine gerçek alan adınızı yazın). Adres çubuğundaki kilit simgesi sertifikanın doğru şekilde dağıtıldığını onaylar.

image

Chrome'da 117. sürümden itibaren image simgesinin yerine image gelmiştir. Sertifika ayrıntılarını görüntülemek için bu simgeye tıklayın.

Kilit simgesi görünmüyorsa veya bir erişim hatası alıyorsanız tarayıcı önbelleğinizi temizleyin veya gizli modda tekrar deneyin.

Sorun devam ederse Tarayıcı hata mesajlarına göre sertifika dağıtım sorunlarını çözme ve SSL sertifikası dağıtım arızalarını giderme kılavuzu konularına bakın.

Canlıya geçiş

Canlı ortama geçerken güvenlik ve kararlılığı artırmak için aşağıdaki uygulamaları uygulayın:

  • root olmayan bir kullanıcı olarak çalıştırın: Uygulama için özel, düşük ayrıcalıklı bir sistem kullanıcısı oluşturun. Uygulamayı asla root veya yönetici ayrıcalıklarıyla çalıştırmayın.

    Üretim dağıtımları için SSL sonlandırmayı doğrudan Flask'te değil ağ geçidi katmanında yapılandırın. Sertifikayı bir Server Load Balancer (SLB) veya Nginx gibi bir ters proxy üzerine dağıtın. Ağ geçidi HTTPS'yi işler ve şifresi çözülmüş HTTP trafiğini Flask uygulamasına iletir.
  • Kimlik bilgilerini kodun dışında tutun: Parolaları ve hassas bilgileri ortam değişkenlerinde, Vault'ta veya bir cloud anahtar yönetim hizmetinde saklayın. Bunları kaynak dosyalara veya yapılandırma dosyalarına asla sabit olarak kodlamayın.

  • HTTP'yi HTTPS'ye yönlendirin: Adam-in-the-middle saldırılarını önlemek için sunucunuzun tüm HTTP trafiğini HTTPS'ye yönlendirmesini yapılandırın.

  • Eski protokolleri devre dışı bırakın: Sunucu yapılandırmanızda SSLv3, TLS 1.0 ve TLS 1.1'i devre dışı bırakın. Yalnızca TLS 1.2 ve TLS 1.3'ü etkinleştirin.

  • Sertifika son kullanma tarihini izleyin: Dağıtımdan sonra Certificate Management Service'te alan adı izlemeyi etkinleştirin. Alibaba Cloud sertifikanın geçerlilik süresini kontrol eder ve son kullanma tarihinden önce yenileme hatırlatmaları gönderir. Ayrıntılar için Genel alan adı izlemeyi satın alma ve etkinleştirme konusuna bakın.

SSS

Sertifikayı yükledikten veya güncelledikten sonra neden HTTPS'ye erişilemiyor?

Bu durum genellikle aşağıdakilerden biri nedeniyle oluşur. Bunları sırayla kontrol edin:

  • Bağlantı noktası 443 engellendi: Güvenlik grubu veya güvenlik duvarı bağlantı noktası 443'teki trafiğe izin vermiyor. Adım 2: Sistem ve ağ ortamını yapılandırın bölümüne bakın.

  • Alan adı uyumsuzluğu: Eriştiğiniz alan adı sertifikanın Bound Domains listesinde yok. Ön koşullar bölümündeki alan adı eşleştirme kurallarına bakın.

  • Flask yeniden başlatılmadı: Uygulama dosyasını değiştirdikten sonra Flask'i yeniden başlatın.

  • Yanlış sertifika yolu: ssl_context içindeki .pem ve .key dosya yollarının doğru olduğunu ve en son geçerli sertifika dosyalarını kullandığınızı doğrulayın.

  • Diğer hizmetlerde sertifika eksik: Alan adınız bir Content Delivery Network (CDN), Server Load Balancer (SLB) veya Web Application Firewall (WAF) kullanıyorsa sertifikayı bu hizmetlere de yükleyin. Trafik birden çok Alibaba Cloud hizmetinden geçtiğinde sertifika dağıtım konumları konusuna bakın.

  • Birden çok sunucuda kısmi dağıtım: Alan adınızın DNS'si birden çok sunucuyu çözümlüyorsa sertifikayı hepsine yükleyin.

Yüklenen bir sertifikayı nasıl günceller veya değiştiririm?

  1. Sunucunuzdaki mevcut .pem ve .key dosyalarını yedekleyin.

  2. Certificate Management Service konsolundan yeni sertifika ve özel anahtar dosyalarını indirin.

  3. Yeni dosyaları sunucunuza yükleyerek eskilerinin üzerine yazın. Flask yapılandırmanızda belirtilen aynı dosya yollarını ve adlarını koruyun.

  4. Yeni sertifikayı uygulamak için Flask'i yeniden başlatın.

Flask başlangıçta FileNotFoundError hatası veriyor

Bu hata, ssl_context içindeki dosya yolunun yanlış olduğu anlamına gelir. ssl_context içinde sağlanan sertifika ve özel anahtar dosyalarının yollarının doğru olup olmadığını kontrol edin. Yollar, python <your-app-file>.py komutunu çalıştırdığınız dizine göreli olmalı veya mutlak yollar kullanmalısınız.

Tarayıcı ERR_SSL_PROTOCOL_ERROR hatası gösteriyor veya bağlantıyı sıfırlıyor

Aşağıdakileri kontrol edin:

  • Sertifika dosyası ve özel anahtar dosyası birbirleriyle eşleşiyor.

  • Sertifika dosyası eksiksiz bir sertifika zinciridir (genellikle bir .pem dosyası). Alibaba Cloud'dan indirilen sertifika dosyaları zaten tam zinciri içerir.

  • Güvenlik grubu ve güvenlik duvarı bağlantı noktası 443'teki gelen trafiğe izin veriyor.