Let’s Encrypt nedir ve nasıl çalışır?

Bu flood’da Let's Encrypt'in ne olduğundan ve nasıl çalıştığından bahsedeceğim.

Let's Encrypt web sunucuların HTTP yerine HTTPS kullanılmasını yaygınlaştırmak üzere SSL/TLS sertifikaların ücretsiz olarak üretilmesi ve dağıtılması amacıyla kurulmuştur. Sektörün önde gelen şirketleri bu servise sponsor olarak devamlılığını sağlamaktadır.

Let's Encrypt öncesinde SSL/TLS sertifikası almanın tek yolu Verisign, GlobalSign, Thawte gibi firmalara birkaç yılda bir 50 dolar civarında bir ücret ödemekti. Bu şirketler Certificate Authority - CA kimliği ile kişi ve kurumlar için hala sertifika üretmektedir.

Önceki flood’ların birinde web sunucularında kullanılabilecek SSL/TLS sertifika tiplerini belirtmiştik https://medium.com/@gokhansengun/3427bcd4a576

Geleneksel CA'ler yukarıdaki yazıda sıralanan üç yöntemle de sertifika üretebilirler. Let's Encrypt ise sertifika türlerinden sadece Domain Validation - DV tipindeki sertifikaları üretmektedir. Bunun sebebi Organization Validation - OV ve Extended Validation - EV sertifikalarının doğaları ve sundukları fayda gereği üretim süreçlerinde insan dahli gerektirmeleridir.

Let's Encrypt servisi Şubat 2019 itibariyle günde yaklaşık 1 milyon adet DV sertifika üretmektedir. Bu hacimdeki bir üretimi süreci otomize etmeden yapmak anlaşılacağı üzere mümkün değildir. Neyse ki Let's Encrypt, sertifikaları tamamiyle otomize bir şekilde yapmaktadır.

Let's Encrypt'in SSL/TLS sertifikalarını üretebilmek için SSL/TLS sertifikası isteyen sunucunun sertifika istediği domain'e gerçekten hakim olup olmadığını doğrulaması gerekir. Bu doğrulama iki şekilde yapılabilir.

DNS Challenge adlı ilk yöntemde Let's Encrypt istekte bulunulan domain'e kendi ürettiği random bir metin ile TXT tipinde bir DNS kaydı eklenmesini ister. Örneğin example․com'a sertifika üretmek için a345ade212d30․example․com değeri ile TXT kaydı sorgulanır.

Let's Encrypt belirli aralıklarla ilgili TXT kaydının oluşturulup oluşturulmadığını kontrol eder. Eğer sertifikayı talep eden kişi sertifikaya konu olan domain'e hakimse kaydı belirli bir sürede oluşturur ve sertifika üretilir değilse sertifika üretilmez.

HTTP Challenge adlı ikinci yöntemde ise Let's Encrypt yine kendi ürettiği bir random metnin sertifika üretilecek domain'den HTTP ile sunulmasını ister. Örneğin example․com için http://example․com/a345ade212d30 adresinden ilgili dosyayı çekebilmeyi bekler.

Anlaşılacağı üzere bu doğrulama tipinde de Let's Encrypt sertifika talebinin gerçekten doğru kaynaktan gelip gelmediğini rahatlıkla doğrulayabilmektedir. Bu yöntem bazı durumlarda ilkine göre daha kolay otomize edilebilmektedir ve yazarın genel tercihidir.

Let's Encrypt'in sertifika üretiminde kullanıldığı yukarıdaki yöntemler ACME - Automatic Certificate Management Environment adı verilen internet protokolünde detaylandırılmıştır. İsteyen herkes bu protokolü kullanarak kendi istemcisini yazabilir.

Sertifika üretimini kolaylaştırmak için Let's Encrypt Certbot adında bir referans implementasyon sağlamaktadır. Açık kaynak kodlu Certbot bir sunucuda agent olarak çalışarak Let's Encrypt sunucuları ile sertifika üretim işini yönetmektedir.

Geleneksel sertifikalar 1 ya da 2 yıllık olarak üretilir. Let's Encrypt ise sertifika üretim işini otomize ettiği için sertifikaları geçerliliği 90 gün olacak şekilde üretmektedir. Certbot süresi dolmaya yakın sertifikaları otomatik olarak yenileyebilmektedir.

AWS ve Google Cloud üzerinde çalışan servisler için AWS ve Google Cloud da Let's Encrypt benzeri ücretsiz servisler sağlamaktadır. Bu ortamlarda Let's Encrypt yerine bulutta bulunan yük dağıtıcılarla entegre olan yerel servislerin kullanılması daha pratiktir.

Son olarak akla Let's Encrypt'in ücretsiz sağladığı bu servisle bütün web sitelerinin SSL/TLS sertifikalarını üreterek bu sitelere gelen trafiği çözebileceği fikri gelebilir :)

Aşağıdaki yazı okunduğunda anlaşılacağı üzere Let's Encrypt, CA olarak sertifika ürettiği domain'lerin kullandığı Private Key'leri bilmemekte ve ACME çerçevesinde bu anahtarları istemciden istememektedir.