Bir web sunucusu SSL şifre çözme için hangi anahtar çiftinin kullanılacağını nasıl bilir?


18

Apache'nin dinlediği TCP bağlantı noktalarından birine (ör. 80, 443) bir istek aldığında, HTTP başlığına bakarak hangi ana bilgisayarın talep edileceğine karar vereceğine inanıyorum Host. Sunucu daha sonra isteği hangi sanal ana bilgisayara yönlendirmesi gerektiğini bilir.

Ancak SSL / TLS üzerinden HTTP için nasıl çalışır? Tüm HTTP isteği şifrelenmiş olduğundan (en azından bir yerde okuduğuma inanıyorum), başlık bilgileri yalnızca sunucu verilerin şifresini çözdükten sonra okunabilir. Ancak şifresini çözmek için, bir web sunucusuna birden fazla SSL sertifikası yükleyebileceğiniz için hangi anahtar çiftinin kullanılacağını bilmesi gerekir.

Peki sunucu şifre çözme için hangi anahtara ihtiyaç duyduğunu nasıl biliyor?


Benim tahminim :

TLS anlaşmasının gerekli bilgileri sağladığını hayal edebiliyorum.


İlişkin "olası yinelenen" bayrak:

Hem bağlantılı soruya hem de kendime verilen cevapların benzer olduğunu kabul etsem de, sorunun farklı olduğunu söylemeliyim. Bağımsız SSL sertifikalarına sahip birden fazla siteyi barındırmanın mümkün olup olmadığı veya nasıl olduğu söz konusu değildir. Bunun yerine sorum temel teknik yönü ele alıyor.




Cevapların oldukça benzer olduğunu kabul ediyorum , ancak soruların oldukça farklı olduğuna inanıyorum .
paolo

Yanıtlar:


29

Başlangıçta, web sunucusu bilmiyordu. Sunucuda barındırmak istediğiniz her SSL vhost için ayrı bir IP adresine ihtiyaç duymanızın nedeni buydu. Bu şekilde, sunucu IP X'te bir bağlantı geldiğinde, ilişkili vhost için yapılandırmayı (sertifikalar dahil) kullanması gerektiğini biliyordu.

Bu , istemcinin el sıkışma sürecinde gerekli ana bilgisayar adını belirtmesine izin veren bir TLS uzantısı olan Sunucu Adı Göstergesi ile değişti . Bu uzantı tüm modern işletim sistemlerinde kullanılır, ancak eski tarayıcılar veya sunucular bunu desteklemez, bu nedenle istemcilerin hala WinXP'de IE 6 kullanmasını bekliyorsanız, şansınız kalmaz.


2
Birisi hala XP kullanıyorsa, yine de sitemi ziyaret etmeyi hak etmiyor;)
paolo

2
istemcileri bu şekilde sınırlandırırken çok dikkatli olunmalıdır (tarayıcılar insanları değil). Birçok, birçok işletme pencereleri çok iyi yükseltmez ve aynı bazı android telefon satıcıları için de geçerlidir, genellikle işletim sistemlerini hiç yükseltmezler (veya en azından çok fazla). Windows XP% 8 ve 4.4 öncesi android pazar payı çok büyük görünüyor.
coteyr

Sunucunun SNI desteğinden yoksun olması durumunda, SNI desteği olmayan bir sunucunun önünde SNI desteğine sahip bir proxy kullanmak mümkündür.
kasperd

1
@coteyr Kalan XP kullanıcılarının büyük çoğunluğu Çin'dedir. Neyse ki, en azından internette başka yerlerde çok az kullanım var.
Michael Hampton

7

TLS / SSL hakkında bazı yanlış düşünceleriniz var gibi görünüyor. HTTP isteği sunucunun ortak anahtarı tarafından şifrelenmez. Önceki el sıkışmasında müzakere edilen bir anahtar kullanılarak simetrik bir şifre ile şifrelenir.

TLS anlaşmasının kısa açıklaması: Sunucu ve istemci, bazı sipersuite, simetrik anahtar (lar) ve diğer bazı ayrıntılar üzerinde anlaşır. MITM'yi önlemek için, sunucu genellikle sertifikasını (zincirini) istemciye gönderir ve sertifikadaki anahtarı kullanarak el sıkışmasını doğrular. (İstemci kimlik doğrulaması veya TLS-PSK gibi başka varyantlar da vardır, ancak HTTP ile çok fazla kullanılmazlar.) İstemci sertifikayı doğrulayabilir (normal yol) veya yok sayabilir.

Bir IP'de birden fazla TLS sertifikası kullanılırken SNI önemli olmakla birlikte, sunucunun isteğin şifresini çözmesi zorunlu değildir. SNI olmadan, sunucu hangi sertifika zincirinin gönderileceğini bilmez, bu nedenle sunucu genellikle bir tane alır (örneğin ilk vhost), ki bu elbette yanlış olabilir. Sunucu yanlış sertifika zincirini seçerse, istemci bunu reddetmelidir (bu nedenle HTTP isteğini göndermeye devam etmez). Ancak, istemci sertifikayı yoksayarsa (veya geçersiz sertifika bu site için güvenilir olarak işaretlenmişse), başarıyla devam edebilir. Şifreleme için kullanılan simetrik anahtar sertifikaya bağlı olmadığından (TLS, sertifika olmadan da çalışmak üzere tasarlanmıştır), sunucu şifresini çözebilir.

SSL hakkında sorurken neden TLS hakkında yazdığımı gösteren küçük bir not: TLS, SSL'nin yeni sürümüdür. SSL'nin tüm sürümleri genel kullanım için güvensiz olarak kabul edilir, bu nedenle şu anda çoğunlukla TLS (1.0, 1.1, 1.2) kullanıyoruz.


"HTTP isteği sunucunun ortak anahtarı tarafından şifrelenmiyor. Önceki tokalaşmada anlaşılan bir anahtar kullanılarak simetrik bir şifre ile şifreleniyor." Bunu bilmiyordum, kafa kafaya için teşekkürler! Bununla birlikte, TLS'nin SSL'nin yerini aldığını biliyorum, ancak geleneksel terim "SSL sertifikası" ile sıkıştık, bu yüzden sözüm.
paolo

“SSL sertifikası” gibi terimlerin TLS için oldukça sık olduğunu biliyorum. Onlardan kaçınmaya çalışıyorum, ancak siz (veya başkaları) TLS terimini bilip bilmediğinizden emin değildim.
v6ak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.