Kullanıcı Modu Başlatma
Dağıtılmış (istemci/sunucu) uygulamalar, kimliği doğrulanmış bağlantılar elde etmek ve ileti alışverişi yapmak için güvenlik paketleri kullanır. Uygulama, SSP/APs tarafından uygulananişlevleriyle eşlenen güvenlik destek sağlayıcısı arabirimi (SSPI) işlevlerini ve kullanıcı modu SSP/AP'ler tarafından uygulanan işlevleriniçağırır. Bu eşleme, istemciye ve sunucu işlemlerine dinamik olarak yüklenebilen güvenlik sağlayıcısı DLL (Secur32.dll veya Security.dll) tarafından gerçekleştirilir. DLL, Secur32.lib kullanılarak statik olarak da bağlanabilir. Hem DLL hem de LIB, Microsoft Windows Yazılım Geliştirme Seti (SDK) ile birlikte gönderilir.
Güvenlik paketini içeren SSP/AP DLL düzgün şekilde kaydedildiyse, güvenlik paketini istemciye veya sunucunun işlemine yükleme sistem tarafından işlenir.
Sunucu, bir bağlantı noktasını izleyerek istemciyle güvenli bir bağlantı elde etme işlemini başlatır ve istemcinin ileti göndermesini bekler. İstemci,InitializeSecurityContext (Genel)SSPI işlevini çağırarak sunucuya güvenli bir bağlantı alma işlemini başlatır. Bu işlev özel güvenlik paketinin SpInitLsaModeContext işleviyle eşlenir. spInitLsaModeContext istemciye bir belirteç döndürür ve bu belirteç sunucuya iletir.
İstemciden belirteci aldıktan sonra sunucu, güvenlik paketinin SpAcceptLsaModeContext işlevine gönderilen AcceptSecurityContext (Genel)SSPI işlevini çağırır. SpAcceptLsaModeContext işlevi başarılı olursa ve güvenlik bağlamını oluşturmak için başka işlem gerekmiyorsa, işlevin çağırana STATUS_SUCCESS döndürmesi gerekir. Ek işleme gerekiyorsa, işlevin SEC_I_CONTINUE_NEEDED döndürmesi ve sunucuya bir belirteç döndürmesi gerekir. Sunucu belirteci istemciye iletir ve InitializeSecurityContext (Genel) yeniden çağırır.
Bu çağrı döngüsü, kimliği doğrulanmış bir bağlantı kurulana veya başarısız olana kadar gerektiği kadar tekrarlanabilir. Bu işlem sırasında SpAcceptLsaModeContext veya SpInitLsaModeContext işlevi başarılı olursa vegüvenlik bağlamını oluşturmak için başka işlem gerekmiyorsa, işlevin çağırana STATUS_SUCCESS döndürmesi gerekir. Ek işleme gerekiyorsa, işlevin SEC_I_CONTINUE_NEEDED döndürmesi ve bunu iletmekle sorumlu olan çağırana bir belirteç döndürmesi gerekir.
Güvenlik paketi tarafından uygulanan protokol, bu döngünün kaç kez yineleneceğini belirler. Örneğin, üç bacaklı karşılıklı kimlik doğrulamasını destekleyen güvenlik paketlerinde çağrı dizisi aşağıdaki gibidir:
- İstemci, InitializeSecurityContext (Genel)çağırarak bir belirteç alır ve bunu sunucuya gönderir. Sunucu, AcceptSecurityContext (Genel) ilk kez çağırır ve istemciye gönderdiği yanıt belirtecini geri alır.
- İstemci, InitializeSecurityContext (Genel)için ikinci bir çağrıda sunucudan alınan belirteci kullanır ve son belirteci geri alır. İstemci bu belirteci sunucuya gönderir.
- Sunucu, AcceptSecurityContext (Genel)son çağrısında kullandığı 2. adımda oluşturulan belirteci alır.
SpAcceptLsaModeContext ve SpInitLsaModeContext işlevleri başarılı olduğunda ve güvenlik bağlamını oluşturmak için başka işlem gerekmediğinde, işlevler çağırana STATUS_SUCCESS döndürmelidir. Ayrıca, özel güvenlik paketi kullanıcı modu SSP/AP'ler tarafından uygulananişlevlerini destekliyorsa, SpAcceptLsaModeContext ve SpInitLsaModeContextMappedContext parametresi aracılığıyla TRUE döndürmelidir. MappedContext değeri uygulamaya geri geçirilmiyor; LSA tarafından durduruldu.
MappedContext true olduğunda LSA, SSP/AP DLL'sinin SpUsermodeInitialize işlevini çağırır. Bu işlev, her güvenlik paketi tarafından uygulanan kullanıcı modu işlevlerine yönelik işaretçi tabloları sağlar. SpUsermodeInitialize tarafından döndürülen işlev tabloları kullanılarak her paketinSpInstanceInit işlevi çağrılır. SpInstanceInit, kullanıcı modu SSP/AP'ler tarafından çağrılanLSA işlevlerine yönelik bir işaretçi tablosu alır.