PKI'yı kavramsal bir bakış açısından - yani özel anahtarlar / ortak anahtarlar - arkalarındaki matematik, sertifika imzalamak için karma ve şifreleme kullanımı, İşlemlerin veya Belgelerin Dijital İmzalanması vb.İle oldukça iyi anlıyorum. C kütüphaneleri iletişim ve kimlik doğrulamanın sağlanması için serts ile birlikte kullanılmıştır. Ayrıca openssl komut satırı araçlarına çok aşinayım.
Ancak, web tabanlı PKI özellikli projelerle ilgili çok az deneyimim var ve bu yüzden bunu daha iyi anlamak için kişisel bir proje tasarlamaya ve kodlamaya çalışıyorum.
Gereksinimleri
Bu bir bankanın web sitesidir. Tüm İnternet Bankacılığı kullanıcılarının bilinen birkaç CA tarafından verilen sertifika (verisign, Thawte, emanet vb.) Kullanmalarına izin verilir. Banka, kullanıcıya sertifika temin etmekten sorumlu değildir. Bu sertifikalar bankaların web sitesinde kimlik doğrulaması için kullanılacaktır. Platformlar / OS vb. Hala sabit değildir.
tasarlamak
Kimlik doğrulaması yapmanın en iyi yolunun ne olduğunu merak ediyordum.
Apache'nin 2 yönlü ssl'yi etkinleştirmenin bir yolu olduğunu gördüm - bu durumda, web sitesine gitmenin otomatik olarak kullanıcıdan bir sertifika isteyeceğini düşünüyorum. Ancak bunun yeterli olup olmadığından emin değilim çünkü doğruladığı tek şey, bir sertifikanın güvenilir bir CA tarafından imzalanıp imzalanmadığı ve aynı zamanda sertifikaların konu satırlarının beyaz bir listesine girip girmediği olabilir. Ancak bu yeterli değil çünkü bir bankuserid'i bir sertifikayla ilişkilendirebilmeniz gerekir.
IIS'nin, Active Directory'deki her kullanıcı için bir sertifika depolayabileceğim bir yolu var gibi görünüyor. Bu, birkaç MSDN makalesini okuduğumdan anladım. IIS'de 2 yönlü SSL'yi açarsınız ve kullanıcı web sitesine gitmeye çalıştığında, IIS onaylı CA'ların listesiyle tarayıcıya bir istek gönderir ve tarayıcı kullanıcının sertifika deposundan uygun bir sertifika seçmesine ve göndermesine izin verir arka uç. IIS'nin 2 şey yapacağını varsayıyorum
- Kullanıcının sertifikaya karşılık gelen özel anahtarın olduğundan emin olun (kapak görüşmeleri kapsamında)
- AD Kullanıcı Sertifikası Eşlemesine dayanarak, IIS kullanıcı adını uygulamaya bildirir.
Bunu yapmak için web sunucusuna bağlı olarak kripto işlevlerini çağırarak kimlik doğrulama açıklığını yapın.
- Bir sertifika yüklediği kullanıcı ekranını göster ve uygulama kullanıcının sertifikaya karşılık gelen özel anahtara sahip olmasını sağlar (ön uçtan sertifikayı kullanarak bazı dizeleri imzalamasını isteyerek).
- Uygulama, her kullanıcının kendi kullanıcı kimliğiyle eşlenmesini sağlayan bazı verilerin depolandığı bir veritabanına sahiptir. Bu olabilir
- her kullanıcı kimliğine karşılık gelen tüm sertifika
- her kullanıcı kimliğine karşılık gelen CA ve sertifika seri numarası.
Hangisinin yaygın olarak kullanıldığını merak ediyordum. En iyi uygulamalar nelerdir? # 3 ile devam edersem, bunu yapmanın en iyi yolları nelerdir?
Akıllı telefon uygulamalarıyla da kolayca çalışabilecek bir şey ek bir bonus olacaktır.
Güncelleme
"Kimlik doğrulama kısmını kendim kodla" ifademi açıklığa kavuşturacağım, çünkü bazı cevaplar yanlış anlaşıldığını gösteriyor - net olmamak benim için kötü.
Bu, kendim kripto şeyler yazdığım anlamına gelmiyor. Sadece aslında IIS veya başka bir web sunucusuna bağlı yapmak yerine açık bir şekilde kripto rutinleri arayacağım anlamına gelir.