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 hikayenin sonu değildir: Sitenizin güvenliğini daha da artırmak için atabileceğiniz birçok adım vardır. Örneğin, çerezlerinizde Güvenli özelliği ayarlayabilir, HTTP Strict Transport Security'yi etkinleştirebilir veya sitenizin ayrıcalıklarını kısıtlamak için İçerik Güvenliği Politikası'nı kullanabilirsiniz. Ancak bu güçlü özellikleri dağıtmak bazen zor bir iş olabilir. Chrome 46, SSL'yi daha katı bir hale getirmenize yardımcı olmak için HPKP raporlama adlı bir özellik sunar.

Tüm bu kısaltmalar ne anlama geliyor?

Günümüzde web'de güvenlik, SSL sertifikalarına dayanmaktadır. Bu imzalar web sitesinin kim olduğunu söylediğini 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 ve sertifika geçerliyse, isteğe devam etmesine izin verir ve adres çubuğunda yeşil asma kilit simgesiyle web sitesi URL'sini gösterir.

Geçerli sertifika nedir? Bir sertifikanın geçerli olarak kabul edilmesi için bir sertifika yetkilisi (CA) veya bir CA (ara CA olarak bilinir) tarafından imzalanan başka bir sertifika tarafından imzalanması gerekir. Tarayıcılar ve işletim sistemleri, sertifika verme konusunda güvenilir olan yüzlerce CA'dan oluşan bir listeyle birlikte gelir. Ancak sorun, varsayılan olarak bu CA'lardan herhangi birinin herhangi bir web sitesi için sertifika verebilmesidir. Bunlardan herhangi birinin güvenliği ihlal edilirse veya yanlış davranışlarda bulunursa bu, tüm web için yıkıcı olabilir.

HTTP Ortak Anahtar Sabitlemesi veya HPKP girin. Bu standart, web sitelerinin HTTP üstbilgisi göndererek tarayıcıya SSL sertifika zincirinin bazı bölümlerini hatırlamasını (veya "sabitlemesini") bildirmesini sağlar. Bu durumda tarayıcı, daha önce aldığı PIN'lerle eşleşmeyen sonraki bağlantıları reddeder. HPKP başlığına bir örnek verelim:

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

Bu başlık, pin olarak iki sertifika karmasını belirtir. Biri, sitenin sertifika zincirindeki bir sertifikanın karmasıdır, diğeri ise yedek PIN veya sitenin sertifikasını döndürmesi gerektiğinde sitenin kullanabileceği bir sertifikanın karmasıdır. Başlık, bir max-age değeri de içerir. Bu süre geçtikten sonra tarayıcı PIN'i unutur.

HPKP hakkında genel olarak daha fazla bilgi edinmek için özelliklere veya diğer Chrome geliştiricisi Chris Palmer'ın mükemmel blog yayınına göz atın.

Şimdi HPKP'yi açayım mı?

Her zaman değil. HPKP'yi dağıttığınızda kolayca hata yapabilir ve yanlışlıkla sitenizde DoS işlemi yapabilirsiniz. Sitenizi bir sertifika grubuna sabitler ve ardından yeni bir sertifika dağıtmanız gerekirse PIN'i gören kullanıcılar, PIN'in süresi dolana kadar (başlıktaki max-age değerine bağlı olarak) sitenize erişemez.

Doğru seçmek zor olduğundan, HPKP çoğunlukla güvenlik açısından hassas az sayıdaki yüksek profilli site tarafından kullanılmaktadır. HPKP'yi etkinleştirmeye karar verirseniz, çok kısa bir maks. yaş değeriyle başlamalı ve herhangi bir sorun yoksa bunu kademeli olarak artırmalısınız.

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

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

İlk olarak, Public-Key-Pins başlığı yerine Public-Key-Pins-Report-Only üstbilgisini 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 bu tür bir üstbilgi gönderdiğinde Chrome, mevcut bağlantının PIN'lerle eşleşip eşleşmediğini doğrular ve report-uri platformuna bir rapor gönderir. Chrome, Salt Rapor başlığındaki raptiyelere dayalı istekleri hiçbir zaman engellemez. Bu nedenle, bu yöntem, HPKP'yi denemenin ve sitenizin DoS işlemi riski taşımadan kullanıcılarınız için soruna neden olup olmadığını görmenin güvenli bir yoludur.

Salt Rapor başlığının yalnızca alındığı istek için geçerli olduğunu unutmayın. Tarayıcı, gerçek sabitlemelerde olduğu gibi Yalnızca Rapor sabitlemelerini hatırlamaz. Böylece, kullanıcılarınızın tarayıcılarında kötü değerleri önbelleğe alma endişesi yaşamadan yapılandırmanızı test edebilir ve sunucunuzun raporlarla dolup taşmasını önlemek için aşamalı olarak kullanıma sunabilirsiniz (örneğin, yalnızca tek bir kaynakta).

Sabitlemelerinizi uygulamaya başlamak için gerçek Public-Key-Pins başlığını kullanıma sunduğunuzda, bu başlığa bir report-uri değeri de ekleyebilirsiniz. Böylece, herhangi bir sorun oluşursa rapor almaya devam edersiniz.

HPKP ihlal raporunda neler yer alır?

HPKP ihlal raporu, yapılandırılmış report-uri cihazınıza HTTP POST isteği içinde gönderilen bir JSON mesajıdır. Alanların listesini spec bulabilirsiniz, ancak burada iki tanesini vurgulayacağım: served-certificate-chain ve validated-certificate-chain. served-certificate-chain, tam olarak Chrome'un istek için SSL bağlantısını ayarlarken aldığı sertifikadır. Diğer yandan validated-certificate-chain, sunucunun sertifikasını doğrulamaya çalışırken Chrome'un yeniden oluşturduğu ve şaşırtıcı bir şekilde, served-certificate-chain'dan farklı olabilen bir zincirdir. Farklı istemciler, sertifika doğrulamasını farklı şekillerde gerçekleştirir. Bu durum, HPKP'nin yanlış yapılandırmalarının yaygın bir nedeni olabilir. Beklenmedik raporlar alıyorsanız bu alanı kontrol etmeyi unutmayın.

Son bir "gotcha"

HPKP raporlamasını dağıtıyorsanız Chrome'un, rapor gönderme istekleri de dahil olmak üzere tüm istekler için doğrulamayı sabitlediğini unutmayın. Bu nedenle, siteniz için HPKP'yi dağıttıysanız muhtemelen HPKP raporlarını sabitlemediğiniz farklı bir alana göndermek istersiniz. Aksi takdirde, sitenizdeki bir PIN ihlali aynı alana yönelik bir raporu tetikler. Bu da pin ihlalinin başarısız olmasına neden olur ve rapor size iletilmez.

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