HPKP raporlamasıyla ortak anahtar sabitlemeyi kullanıma sunma

Emily Stark

Sitenizde SSL kullanmak, kullanıcılarınızın güvenliğini ve gizliliğini korumanın önemli bir yoludur. Ancak SSL'yi etkinleştirmek işin sonu değildir: Sitenizin sağladığı güvenliği daha da artırmak için uygulayabileceğiniz birçok adım vardır. Örneğin, çerezlerinizde Secure özelliğini ayarlayabilir, HTTP Strict Transport Security'yi etkinleştirebilir ve sitenizin ayrıcalıklarını kilitlemek için Content Security Policy'yi kullanabilirsiniz. Ancak bu güçlü özellikleri dağıtmak bazen zor olabilir. Chrome 46, daha sıkı bir SSL biçimini kullanıma sunmanıza yardımcı olmak için HPKP raporlama özelliğiyle birlikte sunulur.

Bu kısaltmaların hepsi ne anlama geliyor?

Günümüzde web'de güvenlik, SSL sertifikalarına dayanır: Bu sertifikalar, bir web sitesinin kim olduğunu kanıtlayan kriptografik imzalardır. Tarayıcınız https://developers.google.com gibi bir URL'ye istek gönderdiğinde sunucu bir SSL sertifikası sağlar. Sertifika geçerliyse tarayıcı, isteğin devam etmesine izin verir ve web sitesi URL'sini adres çubuğunda yeşil bir kilitle gösterir.

Peki geçerli sertifika nedir? Bir sertifikanın geçerli kabul edilmesi için sertifika yetkilisi (CA) tarafından veya CA tarafından imzalanmış başka bir sertifika (ara CA olarak bilinir) tarafından imzalanması gerekir. Tarayıcılar ve işletim sistemleri, sertifika yayınlamak için güvenilir olan birkaç yüz CA'nın listesini içerir. Ancak sorun şudur: Bu sertifika yetkililerinden herhangi biri varsayılan olarak herhangi bir web sitesi için sertifika verebilir. Bunlardan herhangi birinin güvenliği ihlal edilirse veya kötüye kullanılırsa bu durum web'in tamamı için yıkıcı olabilir.

HTTP Ortak Anahtar Sabitlemesi'ni (HPKP) girin. Bu standart, web sitelerinin tarayıcıya SSL sertifika zincirinin bazı bölümlerini hatırlamasını (veya "sabitlemesini") talimat veren bir HTTP üst bilgisi göndermesine olanak tanır. Tarayıcı, daha önce aldığı pinlerle eşleşmeyen sonraki bağlantıları reddeder. Aşağıda bir HPKP başlığı örneği verilmiştir:

Public-Key-Pins:  
       pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";  
       pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";  
       max-age=259200

Bu başlık, iki sertifika karmasını pimler olarak belirtir. Bunlardan biri, sitenin sertifika zincirindeki bir sertifikanın karmasıdır. Diğeri ise yedek PIN'dir veya sitenin sertifikasını değiştirmesi gerektiğinde kullanabileceği bir sertifikanın karmasıdır. Başlıkta bir max-age değeri de bulunur. Bu süre dolduktan sonra tarayıcı iğneyi unutur.

HPKP hakkında daha fazla bilgi için özelliğe veya Chrome geliştiricilerinden Chris Palmer'ın mükemmel blog yayınına göz atın.

HPKP'yi hemen etkinleştirmeli miyim?

Bu her zaman mümkün olmayabilir. HPKP'yi dağıtırken hata yapmak ve sitenizi yanlışlıkla DoS saldırısına uğratmak oldukça kolaydır. Sitenizi bir sertifika grubuna sabitleyip daha sonra yeni bir sertifika dağıtmanız gerekirse sabitlemeyi gören kullanıcılar, sabitlemenin süresi dolana kadar (başlıktaki max-age değerine göre) sitenize erişemez.

Doğru şekilde uygulanması zor olduğu için HPKP şu anda çoğunlukla güvenlik açısından hassas olan birkaç önemli site tarafından kullanılmaktadır. HPKP'yi etkinleştirmeye karar verirseniz çok kısa bir max-age değeriyle başlamalı ve herhangi bir sorun yaşamazsanız bu değeri kademeli olarak artırmalısınız.

HPKP raporlaması nedir ve nasıl yardımcı olur?

Chrome 46'da kullanıma sunulan HPKP raporlama özelliği, HPKP'yi kullanıma sunarken yanlış yapılandırmaları tespit etmek için kullanabileceğiniz bir özelliktir.

Öncelikle, Public-Key-Pins başlığı yerine Public-Key-Pins-Report-Only başlığını göndererek başlayabilirsiniz:

Public-Key-Pins-Report-Only: 
       max-age=2592000;  
       pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";  
       pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";  
report-uri="https://example.net/pkp-report"

Siteniz böyle bir başlık gönderdiğinde Chrome, mevcut bağlantının iğnelerle eşleşip eşleşmediğini doğrular ve eşleşmezse report-uri adresine bir rapor gönderir. Chrome, yalnızca raporlama başlığındaki sabitlemelere dayalı istekleri hiçbir zaman engellemez. Bu nedenle, HPKP'yi denemek ve sitenize DDoS saldırısı riski oluşturmadan kullanıcılarınız için sorun oluşturup oluşturmadığını görmek için güvenli bir yoldur.

Yalnızca Bildir başlığının yalnızca alındığı istek için geçerli olduğunu unutmayın. Tarayıcı, gerçek raptiyeler gibi Yalnızca Bildir raptiyelerini hatırlamaz. Bu sayede, kullanıcılarınızın tarayıcılarında hatalı değerleri önbelleğe alma konusunda endişelenmeden yapılandırmanızı test edebilirsiniz. Ayrıca sunucunuzu raporlarla doldurmamak için özelliği kademeli olarak (örneğin, yalnızca tek bir kaynakta) kullanıma sunabilirsiniz.

Sabitlemelerinizi uygulamaya koymak için gerçek Public-Key-Pins başlığını kullanıma sunduğunuzda, herhangi bir sorun oluştuğunda rapor almaya devam etmek için bu başlığa bir report-uri değeri de ekleyebilirsiniz.

HPKP ihlali raporunda neler yer alır?

HPKP ihlali raporu, yapılandırılmış report-uri adresinize bir HTTP POST isteğiyle gönderilen bir JSON mesajıdır. Alanların listesini özellikte bulabilirsiniz ancak burada bunlardan ikisini vurgulayacağım: served-certificate-chain ve validated-certificate-chain. served-certificate-chain, istek için SSL bağlantısını kurarken Chrome'un aldığı sertifikanın tam olarak aynısıdır. Öte yandan validated-certificate-chain, Chrome'un sunucunun sertifikasını doğrulamaya çalışırken yeniden oluşturduğu zincirdir. Bu zincir, şaşırtıcı bir şekilde served-certificate-chain'ten farklı olabilir. Farklı istemciler, sertifika doğrulamasını farklı şekillerde gerçekleştirir. Bu durum, HPKP'nin yanlış yapılandırılmasına yol açabilir. Beklemediğiniz raporlar alıyorsanız bu alanı kontrol edin.

Son bir nokta

HPKP raporlamasını dağıtıyorsanız Chrome'un, rapor gönderme istekleri de dahil olmak üzere tüm istekler için sabitleme doğrulaması yaptığını unutmayın. Bu nedenle, siteniz için HPKP'yi dağıttıysanız HPKP raporlarını, sabitlemediğiniz farklı bir alana göndermek isteyebilirsiniz. Aksi takdirde, sitenizdeki bir sabitleme ihlali, aynı alan için bir rapor tetikler. Bu rapor da sabitleme ihlalinde başarısız olur ve bu nedenle raporu almazsınız.

Kullanabileceğiniz başka bir alanınız yoksa ihlal raporlarını sizin için işleyen report-uri.io gibi bir hizmeti deneyebilirsiniz.