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.comyalnızcaexample.comadresini korur.www.example.comyalnızcawww.example.comadresini korur.Joker karakterli alan adı:
*.example.comwww.example.comvea.example.comgibi birinci düzey alt alan adlarını kapsar ancak kök alan adıexample.comveyaa.b.example.comgibi ç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ğina.b.example.com) veya eşleşen joker karakteri (örneğin*.b.example.com) Bound Domains alanına ekleyin.
Sunucuda
roothesabı veyasudoayrı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
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.
-
İ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
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
-
Sertifika dosyalarınızı depolamak için bir dizin oluşturun:
mkdir /ssl -
Sertifika dosyasını (
.pem) ve özel anahtar dosyasını (.key)/ssldizinine 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.
-
Flask uygulama dosyanızı açın ve
ssl_contextkullanarak 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çintest.pyolarak 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) -
test.pydosyasını içeren dizine gidin ve Flask hizmetini başlatın:# Replace test.py with your actual filename. python test.pyFlask 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.

Chrome'da 117. sürümden itibaren
simgesinin yerine
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_contextiçindeki.pemve.keydosya 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?
Sunucunuzdaki mevcut
.pemve.keydosyalarını yedekleyin.Certificate Management Service konsolundan yeni sertifika ve özel anahtar dosyalarını indirin.
Yeni dosyaları sunucunuza yükleyerek eskilerinin üzerine yazın. Flask yapılandırmanızda belirtilen aynı dosya yollarını ve adlarını koruyun.
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
.pemdosyası). 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.