SSL / TLS neden modern İşletim Sistemlerinde yerleşik değil?


16

İnternetin altyapısını oluşturan temel ağ protokollerinin çoğu, çoğu büyük İşletim Sisteminde yerleşiktir. Örneğin, TCP, UDP ve DNS'nin tümü Linux, UNIX ve Windows'da yerleşiktir ve düşük seviyeli sistem API'leri aracılığıyla programcıya sunulur.

Ancak SSL veya TLS söz konusu olduğunda, OpenSSL veya Mozilla NSS gibi üçüncü taraf bir kütüphaneye dönülmelidir.

SSL nispeten eski bir protokoldür ve temelde TCP / IP kadar yaygın bir endüstri standardıdır, bu yüzden neden çoğu İşletim Sisteminde yerleşik değildir?


5
'Yerleşik' ve 'birlikte verilenler' arasındaki pratik fark nedir? Bildiğim kadarıyla, tüm işletim sistemleri bir şekilde SSL / TLS'nin paketlenmiş uygulamalarıyla birlikte geliyor.
Mart'ta zneak

Aradaki fark TCP ve DNS'nin çekirdek kodunda uygulanmasıdır. Ancak SSL yalnızca üçüncü taraf kütüphaneleri aracılığıyla kullanılabilir. SSL desteğini yüklemek genellikle önemsiz bir konu olsa da ve çoğu işletim sistemi onunla birlikte gelir, ancak yine de pratik dezavantajlar vardır: Örneğin, belirli bir SSL uygulamasını kullanan bir kütüphane yazarsam, ( OpenSSL, NSS, GnuTLS, vb.) Yazılımım artık kullanıcıların ilgilenmesi gereken bir bağımlılığa sahip. SSL, işletim sistemine yerleşik olsaydı bu sorun olmazdı. Yani, kullanıcılarımdan herhangi birinin TCP için destek kurması gerekip gerekmediği konusunda endişelenmiyorum.
Channel72

3
Yerleşik SSL'ye sahip olmanın bahsettiğiniz sorunu çözeceğini düşünmüyorum. Şimdi, belirli kitaplıklara bağlı kalmak yerine, belirli işletim sistemlerine bağlı olacaksınız.
Mart'ta zneak

1
Neden jpeg kütüphaneleri yok? Aynı etkili soru. Yığının yanlış konumuna bakıyorsunuz. Tüm modern işletim sistemlerinde SSL desteği sağlamak için bir şeyler bulunur. (MSFT .NET SDK'ya sahiptir, linux / solaris bir demet var, + diğerleri var)
1'de iivel

3
gerçekten çekirdeğin içinde olmasını ister misin? Zaten bana çok kalabalık geliyor.
Matthieu M.Mar

Yanıtlar:


9

Bence esas olarak "OS" olarak gördüğünüz şeye bağlı. Eğer çekirdekse, cevabım şöyle olurdu: neden olmalı? Yanlış olabilirim, ancak DNS, Linux sistemlerindeki glibc'nin bir üçlü parti kütüphanesi değil mi?

Çekirdek veya kullanıcı alanı ile ilgili değilse, hemen hemen her işletim sistemi / platformda bir SSL / TLS yığını vardır, bazılarında birden fazla olabilir.

Hatta bir avantaj olarak bile görülebilir. OpenSSL olmasaydı, Windows, Mac ve Linux (ve ...) API'sına uyum sağlamanız gerekir. İşletim sisteminin bir parçası olmayan TLS, çapraz platform TLS uygulamalarının yazılmasına izin verir. Hedef platformlarınızı destekleyen bir TLS kütüphanesi seçmeniz yeterlidir.

Benim için TLS ile ilgili asıl sorun, basitçe "açamamanız". Bunun yerine, bir dizi güvenilir sertifika, sertifika iptal listesi, kendinden imzalı sertifika vb. Yönetmelisiniz. Bunların hepsi çok sayıda kullanıcı etkileşimi gerektirir.

Ne yazık ki, güvenlik hiçbir zaman ücretsiz değildir. Programcılar için çaba ve kullanıcılar için rahatsızlık.


Güvenlik tesisatının büyük çoğunluğu herhangi bir kullanıcı etkileşimi olmadan gerçekleşebilir. Rahatsızlık yalnızca insanlar güvenilir olmayan sertifikalar kullandığında oluşur.
Mart'ta zneak

1
Bu doğru. Ama orada kendinden imzalı çok sayıda sertifika var. IMO, merkezi otoritelerin tüm modeli ölçeklendirmiyor. Hangi köklere güveneceğine nasıl karar verilir? Hiçbir kullanıcı buna karar vermeyecektir. Hepsi programcıların akıllıca seçim yapmasını umuyor.
paztulio

Sertifikalar "gerçek" güven ile ilgili değildir, sadece şifrelemeyi tamamlarlar. Sahte bir sunucuyla konuşursanız şifreli bir kanalın faydası nedir? Sertifikaların amacı, doğru bilgisayarla iletişim kurduğunuzu kanıtlamaktır ve bu amaçla, güvenli yolla aldığınız tüm kök sertifikalar, orijinalliği doğrulamak için yeterlidir. Geri kalanı için, sertifikalar bir kişinin niyetleri hakkında hiçbir şey kanıtlamaz, sadece gerçek bir insan olduğunu ve bir parodi olmadığını kanıtlar.
Mart'ta zneak

7

Yasal bir sorun var. Bazı ülkeler kriptografiyi silahlarla aynı gruba koyuyor. Kriptografik kodun çekirdeğe yerleştirilmesi, çekirdek kodlarından herhangi birinin dışa aktarılmasını zorlaştırır.


2

TCP'yi işletim sistemine eklemenin bariz yararları vardır. TCP, uygulama verisi olmasa bile hassas zamanlama ve ağ paketlerine hızlı yanıt verilmesini gerektirir. TCP'yi genel bir IP API'sinin üstüne kullanıcı alanında uygulamaya çalışırsanız, çok daha kötü olur. SSL'yi çekirdeğe entegre etmenin benzer bir avantajı yoktur.

Öte yandan, birkaç dezavantaj var. Örneğin, SSL anahtar halkalarının ve sertifika listelerinin ve benzerinin değiştirilmesini gerektirir. Bunu bir çekirdek veya OS API'sı aracılığıyla yapmak uygun olmaz. Yani, işletim sistemiyle birlikte gelse bile, sadece bir kütüphane olurdu (tıpkı Windows'ta olduğu gibi). Bu kütüphaneler zaten zaten mevcut, bu yüzden sonuçta sadece ambalajda bir değişiklik.


1

Bazı nedenler vardır, ancak belki de en zorlayıcı kriptografinin gerçekten doğru olması çok, çok zor olmasıdır . Büyük kaynakları doğru ve güçlü olduğunu doğrulamaya adamadığınız sürece bunu kendiniz uygulamak akıllıca değildir. Kriptografik yazılımlarla çalışan çoğu insanın bu konuda bataklık zamanı, uzmanlığı veya isteği yoktur; Böylece, üçüncü taraf kitaplıkları güven onların uygulama geliştiricileri yapmak istediklerini yapmaya geri alabilirsiniz iken Devs, işin o kısmını işleyebilir.

İşletim sistemi geliştiricileri çok farklı değil. Bazen, örneğin iş modeliniz veya avukatlarınız kodu kapalı tutmanızı gerektirir - bu nedenle konuyla ilgili çok fazla seçeneğiniz yoktur: yapmanıza izin verecek birini bulamazsanız ne yapmanız gerekiyorsa, o zaman kendi rulolarınızı almalısınız. Diğerleri Microsoft'un bunu nasıl yaptığını zaten belirtti. Ancak genel olarak konuşursak, üçüncü taraf kitaplıklarını kullanabilen işletim sistemi geliştiricileri, uygulama geliştiricilerinin yaptığı gibi aynı nedenlerle bunu yapmayı tercih ederler.


0

Ben bir Windows geliştiricisiyim, bu yüzden diğer işletim sistemleri için konuşamıyorum, ancak Windows'ta SSL çok uzun bir süre yerleşikti. Buna SChannel diyorlar ve desteklenirken, birinin anlaması gereken daha şifreli API'lerden biridir.


0

SSL, daha düşük seviyeli bir protokolün üstünde bir katmandır. Örneğin SSL, TCP'nin üstünden (IP'nin üstünden) çalışır.

İşletim sistemi nerede duruyor?

İşletim sisteminin, işletim sisteminin bir istemcisinin "iş yaptığı" bir noktaya kadar ağ oluşturma gibi temel hizmetler sunduğunu iddia etmek çok kolaydır. Ve bu şeyler ne istersen olabilir.

Çekirdeğin SSL'sinin büyük bir performans kazanımına yol açması pek olası değil, neden rahatsız oluyor?

Modern işletim sistemi çekirdekleri milyonlarca kod satırında çalışır, daha fazlasını ekleyerek karmaşıklık ve daha fazla hata ayıklama süresi ekler. Daha yüksek katman protokolleri gibi şeyleri işletim sisteminden çıkarmak, işletim sisteminin geliştirilmesini kolaylaştırır ve sonunda bir son uygulamanın işlevi veya performansı üzerinde çok az fark yaratır. (Son başvuru için geliştiricilerin işini biraz daha acı verici hale getirebilir.)


0

Kripto ve SSL için bazı Çekirdek desteği var. Bu mantıklıdır çünkü Çekirdek donanımla daha verimli bir şekilde arayüz oluşturabilir ve kimlik bilgilerini herhangi bir uygulamadan korumak da rahattır. Bunun iyi örnekleri kssl, Solaris'te Çekirdek düzeyinde bir ters SSL Proxy'si veya çekirdekteki çeşitli kripto kitaplıklarıdır (örneğin VPN'ler için kullanılır). Tipik bir donanım hızlandırmalı kripto motorunun da bir çekirdek modülü vardır (ve PKCS # 11 veya işletim sistemine özel kripto arayüzlerinden erişilebilir).

Daha sık görmemenizin bazı nedenleri, bazı uygulama protokollerinin düzgün bir şekilde katmanlı olmaması (STARTLS'yi düşünün) veya el sıkışma sırasında (istemci sertifikası ve CRL kontrolünü düşünün) uygulama kararları gerektirmesi veya sadece düzenli bir evrim geçirmesidir.

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.