Bir vService'e birden fazla sertifika bağlayabilir miyim; doğru sertifika nasıl seçilir (SNI)?
Kısa cevap
Evet. HTTP ve L7 TCP vService'lerin Certificate alanında birden fazla sertifika seçilebilir. İstemci TLS el sıkışmasında bağlanmak istediği adı (SNI) gönderir; TR7 bu adı sertifikaların CN ve SAN değerleriyle eşleştirip uygun sertifikayı sunar, tam ad eşleşmesi wildcard eşleşmesinden önce gelir. SNI gönderilmezse ya da hiçbir sertifikayla eşleşmezse listedeki ilk sertifika sunulur; bu yüzden SNI göndermeyen istemcilere sunulacak sertifika ilk sıraya konur. IP ve portu Virtual Hosting ile paylaşan vService'lerde ise SNI'siz ya da hiçbir vService'in alan adıyla eşleşmeyen bağlantı kapatılır.
Temel Bilgi
SNI (Server Name Indication), istemcinin TLS el sıkışmasının ilk ve şifresiz paketinde (ClientHello) bağlanmak istediği alan adını bildirdiği TLS uzantısıdır. Sunucu, aynı IP ve portta birden fazla alan adına hizmet verirken hangi sertifikayı sunacağına bu bilgiyle karar verir. Güncel tarayıcıların ve kütüphanelerin tamamı SNI gönderir; çok eski istemciler ve bazı gömülü sistemler göndermeyebilir.
Nasıl Çalışır?
- İstemci bağlantının başında SNI olarak alan adını gönderir (ör.
portal.example.com). - TR7, vService'in Certificate alanındaki sertifikalar arasında bu adla tam eşleşen CN ya da SAN değerini arar; yoksa wildcard eşleşmesine (
*.example.com) bakar. - Eşleşen sertifika sunulur. Eşleşme yoksa ya da istemci SNI göndermediyse listedeki ilk sertifika sunulur. Virtual Hosting kullanılıyorsa önce SNI'ye göre vService seçilir; SNI yoksa ya da hiçbir vService'in alan adıyla eşleşmiyorsa bağlantı bu adıma gelmeden kapatılır (Virtual Hosting ile İlişkisi).
Sertifika seçimi vService'in bütün şifreli frontend satırları için ortaktır; satır başına ayrı sertifika listesi yoktur.
Sertifikaları Bağlamak
Bağlanacak sertifikalar Certificates & PKI → SSL/TLS Certificates ekranında yoksa önce eklenir (Sertifikamı TR7'ye nasıl yüklerim; hangi formatlar destekleniyor?).
Load Balancer → Load Balancer vService List ekranında vService seçilip Edit tıklanır.
Certificate alanında sertifikalar sırayla seçilir; seçicideki Type, Expiry Health ve Used in filtreleri listeyi süzer. SNI göndermeyen istemcilere sunulacak sertifika ilk sırada seçilir.
Save tıklanır. Cluster kurulumunda varsayılan auto-sync ile değişiklik eş cihaza da gönderilir; Manual Sync Mode açıksa eş cihaza elle gönderilir.
WEB-CLI'da önce lb service show <vService> ile mevcut certificate.N satırları görülür; yeni sertifika ilk boş sıraya yazılır, çünkü dolu bir sıraya yazılan sertifika oradaki sertifikanın yerine geçer (vService'e bağlama). vService'te bir sertifika varsa ikincisi şöyle eklenir:
lb service update id <vService> --certificate.1 <sertifika>Virtual Hosting ile İlişkisi
Aynı IP ve portu paylaşan birden fazla HTTP vService'te (Virtual Hosting) bağlantı önce SNI'ye göre ilgili vService'e iletilir, ardından o vService kendi sertifikasını sunar; SNI hiçbir vService'in listesiyle eşleşmezse ya da hiç gönderilmezse bağlantı kapatılır. Tek vService'te birden fazla sertifika ise aynı vService'in farklı alan adlarıyla hizmet vermesi içindir (Aynı IP:port üzerinde birden fazla vService tanımlayabilir miyim?).
Doğrulama
Her alan adı ayrı sorgulanır; -servername verilmeyen sorgu SNI'siz istemciyi taklit eder:
openssl s_client -connect 203.0.113.10:443 -servername portal.example.com
openssl s_client -connect 203.0.113.10:443 -servername api.example.com
openssl s_client -connect 203.0.113.10:443 -noservernameBeklenen: ilk iki komutta adla eşleşen sertifikanın subject değeri, üçüncüsünde listedeki ilk sertifika. vService Virtual Hosting kullanıyorsa üçüncü komutta bağlantı kapatılır.
Sık Karıştırılan Noktalar
- "Sertifikaların sırası önemsizdir." SNI'si hiçbir sertifikayla eşleşmeyen istemciler ve Virtual Hosting kullanılmıyorsa SNI göndermeyen istemciler listedeki ilk sertifikayı alır.
- "Wildcard sertifika tam adlı sertifikayı gölgeler." Tam ad eşleşmesi önce gelir; aynı listede
portal.example.comve*.example.combirlikte bulunabilir. - "L7 TCP'de TLS'i sonlandırmadan da sertifika sunulur." Protocol = TCP olan (passthrough) frontend'de TR7 sertifika sunmaz; SNI yalnızca yönlendirme için okunur (Passthrough'da SNI'ye göre farklı backend'lere yönlendirme yapabilir miyim?).
Dokümantasyonda nasıl yapılır
