HTTP Taşıma Güvenliği
Aktarım olarak HTTP kullanılırken güvenlik, Güvenli Yuva Katmanı (SSL) uygulaması tarafından sağlanır. SSL, bir hizmetin kimliğini bir istemciye doğrulamak ve ardından kanala gizlilik (şifreleme) sağlamak için İnternet'te yaygın olarak kullanılır. Bu makalede SSL'nin nasıl çalıştığı ve Windows Communication Foundation'da (WCF) nasıl uygulandığı açıklanmaktadır.
Temel SSL
SSL'nin nasıl çalıştığı en iyi şekilde, tipik bir senaryoyla( bu örnekte bir bankanın Web sitesi) açıklanmıştır. Site, bir müşterinin kullanıcı adı ve parolayla oturum açmasına izin verir. Kimlik doğrulamasından sonra kullanıcı hesap bakiyelerini görüntüleme, faturaları ödeme ve bir hesaptan diğerine para taşıma gibi işlemler gerçekleştirebilir.
Bir kullanıcı siteyi ilk kez ziyaret ettiğinde, SSL mekanizması kullanıcının istemcisiyle (bu örnekte web tarayıcısı) el sıkışması olarak adlandırılan bir dizi anlaşma başlatır. SSL önce banka sitesinin kimliğini müşteriye doğrular. Bu önemli bir adımdır, çünkü müşterilerin önce gerçek siteyle iletişim kurduklarını bilmeleri gerekir; kullanıcı adlarını ve parolalarını yazmaya ayartmaya çalışan bir sahtekarlık değildir. SSL bu kimlik doğrulamasını VeriSign gibi güvenilir bir yetkili tarafından sağlanan bir SSL sertifikası kullanarak yapar. Mantık şu şekildedir: VeriSign, banka sitesinin kimliği için hödükler. Tarayıcı VeriSign'a güvendiği için siteye güvenilir. VeriSign ile kontrol etmek isterseniz, VeriSign logosuna tıklayarak da bunu yapabilirsiniz. Bu, son kullanma tarihi ve kime verildiği (banka sitesi) ile bir orijinallik bildirimi sunar.
Güvenli bir oturum başlatmak için istemci, imzalamak, karma oluşturmak ve şifrelemek ve şifrelerini çözmek için kullanabileceği şifreleme algoritmalarının listesiyle birlikte sunucuya "merhaba" ifadesinin eşdeğerini gönderir. Yanıt olarak, site bir onay ve algoritma paketlerinden birini seçmeyi geri gönderir. Bu ilk el sıkışma sırasında her iki taraf da nonce gönderir ve alır. Nonce, karma oluşturmak için sitenin ortak anahtarıyla birlikte kullanılan rastgele oluşturulmuş bir veri parçasıdır. Karma, SHA1 gibi standart bir algoritma kullanılarak iki sayıdan türetilen yeni bir sayıdır. (İstemci ve site ayrıca hangi karma algoritmanın kullanılacağını kabul etmek için ileti alışverişinde bulunur.) Karma benzersizdir ve yalnızca istemci ile site arasındaki oturumda iletileri şifrelemek ve şifresini çözmek için kullanılır. hem istemci hem de hizmet özgün nonce'a ve sertifikanın ortak anahtarına sahiptir, böylece her iki taraf da aynı karmayı oluşturabilir. Bu nedenle, istemci (a) verilerden karmayı hesaplamak için üzerinde anlaşmaya varılan algoritmayı kullanarak ve (b) bunu hizmet tarafından gönderilen karmayla karşılaştırarak hizmet tarafından gönderilen karmayı doğrular; ikisi eşleşirse, istemci karma üzerinde oynanmadığından emin olur. İstemci daha sonra bu karmayı anahtar olarak kullanarak başka bir yeni karma içeren bir iletiyi şifreleyebilir. Hizmet, karmayı kullanarak iletinin şifresini çözebilir ve bu ikinciden son karmayı kurtarabilir. Birikmiş bilgiler (nonces, ortak anahtar ve diğer veriler) artık her iki taraf tarafından da bilinir ve son karma (veya ana anahtar) oluşturulabilir. Bu son anahtar, bir sonraki son karma kullanılarak şifrelenmiş olarak gönderilir. Ardından ana anahtar, oturumun geri kalanında iletileri şifrelemek ve şifresini çözmek için kullanılır. hem istemci hem de hizmet aynı anahtarı kullandığından, buna oturum anahtarı da denir.
Oturum anahtarı da simetrik anahtar veya "paylaşılan gizli dizi" olarak nitelendirilir. Simetrik anahtara sahip olmak, işlemin her iki tarafının da gerektirdiği hesaplamayı azalttığı için önemlidir. Her ileti yeni bir nonce ve karma değişimi talep ederse performans bozulur. Bu nedenle SSL'nin nihai hedefi, iletilerin iki taraf arasında daha fazla güvenlik ve verimlilikle serbestçe akmasını sağlayan simetrik bir anahtar kullanmaktır.
Protokol siteden siteye farklılık gösterebileceğinden önceki açıklama, gerçekleşen işlemlerin basitleştirilmiş bir sürümüdür. Hem istemcinin hem de sitenin hem el sıkışması sırasında algoritmayla birleştirilen noncelar oluşturması hem de veri alışverişi sürecine daha fazla karmaşıklık ve dolayısıyla koruma eklemesi de mümkündür.
Sertifikalar ve Ortak Anahtar Altyapısı
El sıkışma sırasında hizmet ssl sertifikasını da istemciye gönderir. Sertifika, son kullanma tarihi, veren yetkili ve sitenin Tekdüzen Kaynak Tanımlayıcısı (URI) gibi bilgileri içerir. İstemci, eşleşmeyi sağlamak için URI'yi başlangıçta iletişim kurduğu URI ile karşılaştırır ve ayrıca tarihi ve veren yetkiliyi denetler.
Her sertifikada özel anahtar ve ortak anahtar olmak üzere iki anahtar bulunur ve ikisi de exchange anahtar çifti olarak bilinir. Özetle, özel anahtar yalnızca sertifikanın sahibi tarafından bilinirken, ortak anahtar sertifikadan okunabilir. Her iki anahtar da özet, karma veya başka bir anahtarı şifrelemek veya şifresini çözmek için kullanılabilir, ancak yalnızca tersi işlemler için kullanılabilir. Örneğin, istemci ortak anahtarla şifrelerse, özel anahtarı kullanarak iletinin şifresini yalnızca site çözebilir. Benzer şekilde, site özel anahtarla şifrelenirse istemci ortak anahtarla şifresini çözebilir. Bu, istemciye iletilerin yalnızca özel anahtar sahibiyle değiştirildiğine dair güvence sağlar çünkü yalnızca özel anahtarla şifrelenen iletilerin şifresi ortak anahtarla çözülebilir. Site, ortak anahtar kullanılarak şifrelenmiş bir istemciyle ileti alışverişi yaptığı konusunda emindir. Ancak bu değişim yalnızca ilk el sıkışma için güvenlidir, ancak bu nedenle gerçek simetrik anahtarı oluşturmak için çok daha fazla işlem yapılır. Bununla birlikte, tüm iletişimler hizmetin geçerli bir SSL sertifikasına sahip olmasına bağlıdır.
WCF ile SSL Uygulama
HTTP aktarım güvenliği (veya SSL), WCF'ye harici olarak sağlanır. SSL'i iki yoldan biriyle uygulayabilirsiniz; uygulamanızın nasıl barındırılması belirleyici faktördür:
WCF konağı olarak Internet Information Services (IIS) kullanıyorsanız, BIR SSL hizmeti ayarlamak için IIS altyapısını kullanın.
Şirket içinde barındırılan bir WCF uygulaması oluşturuyorsanız, HttpCfg.exe aracını kullanarak bir SSL sertifikasını adrese bağlayabilirsiniz.
Aktarım Güvenliği için IIS kullanma
IIS 7.0
IIS 7.0'ı güvenli bir konak (SSL kullanarak) olarak ayarlamak için bkz . IIS 7.0'da Güvenli Yuva Katmanını Yapılandırma.
Sertifikaları IIS 7.0 ile kullanılacak şekilde yapılandırmak için bkz . IIS 7.0'da Sunucu Sertifikalarını Yapılandırma.
IIS 6.0
IIS 6.0'ı güvenli bir konak (SSL kullanarak) olarak ayarlamak için bkz . Güvenli Yuva Katmanını Yapılandırma.
Sertifikaları IIS 6.0 ile kullanılacak şekilde yapılandırmak için bkz . Certificates_IIS_SP1_Ops.
SSL için HttpCfg kullanma
Şirket içinde barındırılan bir WCF uygulaması oluşturuyorsanız HttpCfg.exe aracını kullanın.
X.509 sertifikasına sahip bir bağlantı noktası ayarlamak için HttpCfg.exe aracını kullanma hakkında daha fazla bilgi için bkz . Nasıl yapılır: SSL Sertifikası ile Bağlantı Noktası Yapılandırma.