Takip et

Ubuntu 16.04 Üzerinde SAML Kimlik Doğrulaması İçin SimpleSAMLphp Kurulumu ve Yapılandırması

Ubuntu 16.04 Üzerinde SAML Kimlik Doğrulaması İçin SimpleSAMLphp Kurulumu ve Yapılandırması Giriş Günümüzün karmaşık web uygulamaları

Ubuntu 16.04 Üzerinde SAML Kimlik Doğrulaması İçin SimpleSAMLphp Kurulumu ve Yapılandırması

Giriş

Günümüzün karmaşık web uygulamaları ve kurumsal ağ yapılarında, kullanıcıların birden fazla servise tek bir kimlik bilgisiyle erişebilmesi (Single Sign-On – SSO) kritik bir ihtiyaç haline gelmiştir. Bu ihtiyacı karşılamak için geliştirilen en yaygın standartlardan biri Güvenlik Onaylama İşaretleme Dili (Security Assertion Markup Language – SAML)’dir. SAML, farklı güvenlik alanları arasında kimlik doğrulama ve yetkilendirme verilerinin güvenli bir şekilde değişimini sağlayan XML tabanlı bir protokoldür. Bu sayede kullanıcılar, bir kimlik sağlayıcıya (Identity Provider – IdP) bir kez giriş yaparak, birden fazla servis sağlayıcıya (Service Provider – SP) tekrar kimlik doğrulaması yapmadan erişebilirler.

SimpleSAMLphp, PHP ile yazılmış, açık kaynaklı ve kullanımı kolay bir SAML 2.0 IdP ve SP uygulamasıdır. PHP tabanlı uygulamalarınıza SAML kimlik doğrulama yeteneği kazandırmak için ideal bir çözümdür. Hem IdP hem de SP rolünde çalışabilme yeteneği, esnek yapılandırma seçenekleri ve geniş topluluk desteği sayesinde, SimpleSAMLphp birçok geliştirici ve sistem yöneticisi için tercih sebebi olmuştur.

Bu makalede, Ubuntu 16.04 işletim sistemi üzerinde SimpleSAMLphp’nin nasıl kurulacağını ve hem servis sağlayıcı (SP) hem de kimlik sağlayıcı (IdP) olarak nasıl yapılandırılacağını adım adım detaylı bir şekilde inceleyeceğiz. Ubuntu 16.04, uzun süreli destek (LTS) sürümü olması nedeniyle hala birçok kurumsal ortamda kullanılmaktadır, bu yüzden bu platforma özel kurulum ve yapılandırma adımları büyük önem taşımaktadır. Makalenin sonunda, SimpleSAMLphp’yi kullanarak güvenli ve esnek bir SAML tabanlı kimlik doğrulama sistemi kurmuş olacaksınız.

Önkoşullar

SimpleSAMLphp kurulumuna başlamadan önce, Ubuntu 16.04 sunucunuzda bazı temel bileşenlerin kurulu ve yapılandırılmış olması gerekmektedir. Bu bölümde, gerekli tüm önkoşulları ve bunların kurulum adımlarını ele alacağız.

Sistem Güncellemesi

İlk adım olarak, sunucunuzdaki paket listelerini güncelleyin ve mevcut paketleri yükseltin:

sudo apt update
sudo apt upgrade -y

Apache2 Web Sunucusu Kurulumu

SimpleSAMLphp bir web uygulaması olduğu için, bir web sunucusuna ihtiyaç duyar. Bu makalede Apache2 kullanacağız. Apache2’yi kurmak için aşağıdaki komutu çalıştırın:

sudo apt install apache2 -y

Kurulumdan sonra Apache2 servisinin çalıştığından emin olun:

sudo systemctl status apache2

PHP ve Gerekli Uzantıların Kurulumu

Ubuntu 16.04 varsayılan olarak PHP 7.0 sürümünü sunar. SimpleSAMLphp’nin düzgün çalışması için bazı PHP uzantılarına ihtiyacı vardır. Gerekli PHP paketlerini ve uzantılarını kurmak için aşağıdaki komutu kullanın:

sudo apt install php libapache2-mod-php php-xml php-mbstring php-gd php-json php-mysql php-ldap -y

* php: PHP çekirdek paketi.
* libapache2-mod-php: Apache için PHP modülü.
* php-xml: XML işleme yetenekleri için gereklidir (SAML XML mesajları için).
* php-mbstring: Çok baytlı dizeleri işlemek için gereklidir.
* php-gd: Görüntü işleme yetenekleri için gereklidir (örneğin, CAPTCHA).
* php-json: JSON işleme yetenekleri için gereklidir.
* php-mysql: Veritabanı tabanlı kimlik doğrulama kaynakları kullanacaksanız gereklidir.
* php-ldap: LDAP tabanlı kimlik doğrulama kaynakları kullanacaksanız gereklidir.

Kurulumdan sonra, Apache’nin PHP modülünü etkinleştirdiğinden emin olmak için Apache servisini yeniden başlatın:

sudo systemctl restart apache2

Composer Kurulumu

SimpleSAMLphp’nin bağımlılıklarını yönetmek için Composer’ı kullanacağız. Composer’ı kurmak için aşağıdaki adımları izleyin:

sudo apt install curl -y
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

Composer’ın doğru şekilde kurulduğunu kontrol etmek için:

composer --version

SimpleSAMLphp Kurulumu

Önkoşullar tamamlandıktan sonra, SimpleSAMLphp’yi sunucumuza kurmaya başlayabiliriz. Güvenlik en iyi uygulama olarak, SimpleSAMLphp’yi web sunucusunun kök dizini (document root) dışına kurmak önerilir.

SimpleSAMLphp Dosyalarının İndirilmesi ve Yerleştirilmesi

SimpleSAMLphp’yi Composer kullanarak indirebilirsiniz. Bu, bağımlılıkları da otomatik olarak yöneteceğinden önerilen yöntemdir. SimpleSAMLphp için /var/simplesamlphp gibi bir dizin oluşturalım:

sudo mkdir /var/simplesamlphp
sudo chown www-data:www-data /var/simplesamlphp
sudo chmod 755 /var/simplesamlphp
cd /var/simplesamlphp
sudo -u www-data composer create-project simplesamlphp/simplesamlphp --stability=stable .

Bu komut, /var/simplesamlphp dizinine SimpleSAMLphp’nin en son kararlı sürümünü indirecek ve tüm bağımlılıkları kuracaktır. -u www-data komutu, Composer’ın Apache kullanıcısı (www-data) olarak çalışmasını sağlar, bu da dosya izinleri sorunlarını önler.

Apache Yapılandırması

SimpleSAMLphp’nin web arayüzüne erişebilmek için Apache’de bir alias veya VirtualHost yapılandırması yapmamız gerekiyor. Bu makalede, SimpleSAMLphp’nin www dizinini bir alias olarak yapılandıracağız.

Apache yapılandırma dosyalarınızı düzenlemek için sudo nano /etc/apache2/conf-available/simplesamlphp.conf komutunu kullanın ve aşağıdaki içeriği ekleyin:

Alias /simplesaml /var/simplesamlphp/www


    Require all granted

Bu yapılandırma, /simplesaml URL’sine gelen istekleri /var/simplesamlphp/www dizinine yönlendirecektir.

Yapılandırmayı etkinleştirin ve Apache’yi yeniden başlatın:

sudo a2enconf simplesamlphp
sudo systemctl restart apache2

Artık tarayıcınızdan http://your_server_ip_or_domain/simplesaml adresine giderek SimpleSAMLphp kurulum sihirbazına erişebiliyor olmanız gerekir.

Dosya İzinleri

SimpleSAMLphp’nin günlük dosyaları, sertifikalar ve oturum verileri gibi bazı dizinlere yazma iznine ihtiyacı vardır. Bu dizinlerin www-data kullanıcısına ait olduğundan emin olun:

sudo chown -R www-data:www-data /var/simplesamlphp/log
sudo chown -R www-data:www-data /var/simplesamlphp/cert
sudo chown -R www-data:www-data /var/simplesamlphp/data

Temel Yapılandırma

SimpleSAMLphp’nin temel yapılandırması, config/config.php ve config/authsources.php dosyaları üzerinden yapılır. Bu dosyalar, SimpleSAMLphp’nin davranışını, güvenlik ayarlarını ve kimlik doğrulama kaynaklarını tanımlar.

config.php Dosyasının Yapılandırılması

config/config.php dosyası, SimpleSAMLphp’nin ana yapılandırma dosyasıdır. Örnek bir dosya (config-templates/config.php) bulunur, bunu kopyalayarak düzenleyebilirsiniz:

sudo cp /var/simplesamlphp/config-templates/config.php /var/simplesamlphp/config/config.php
sudo nano /var/simplesamlphp/config/config.php

Aşağıdaki önemli parametreleri düzenleyin:

* baseurlpath: SimpleSAMLphp’nin web üzerinden erişilebilir olduğu yolu belirtir. Apache alias’ınıza göre ayarlayın.

'baseurlpath' => 'simplesaml/',

* technicalcontact_name ve technicalcontact_email: Hata durumlarında iletişim kurulacak teknik kişinin adı ve e-posta adresi.

'technicalcontact_name' => 'Yönetici',
'technicalcontact_email' => 'admin@example.org',

* auth.adminpassword: SimpleSAMLphp yönetim paneline erişim için kullanılacak şifre. Güvenli bir şifre belirleyin.

'auth.adminpassword' => 'cok_guclu_bir_sifre', // KESİNLİKLE DEĞİŞTİRİN!

* secretsalt: Güvenlik için kullanılan rastgele bir dize. Yeni ve benzersiz bir dize oluşturun. Yönetim panelinde “Configuration” sekmesinde önerilen bir değer bulabilirsiniz.

'secretsalt' => 'rastgele-benzersiz-bir-dize', // KESİNLİKLE DEĞİŞTİRİN!

* timezone: Sunucunuzun saat dilimi.

'timezone' => 'Europe/Istanbul',

* enable.saml20-idp ve enable.saml20-sp: Hangi rolleri etkinleştirmek istediğinizi belirtin.
* Sadece SP olarak kullanacaksanız enable.saml20-idp değerini false yapın.
* Sadece IdP olarak kullanacaksanız enable.saml20-sp değerini false yapın.
* Hem SP hem IdP olarak kullanacaksanız ikisini de true bırakın.

'enable.saml20-idp' => true,
'enable.saml20-sp' => true,

authsources.php Dosyasının Yapılandırılması

config/authsources.php dosyası, SimpleSAMLphp’nin kullanacağı kimlik doğrulama kaynaklarını tanımlar. Örnek bir dosya (config-templates/authsources.php) bulunur, bunu kopyalayarak düzenleyebilirsiniz:

sudo cp /var/simplesamlphp/config-templates/authsources.php /var/simplesamlphp/config/authsources.php
sudo nano /var/simplesamlphp/config/authsources.php

Bu dosyada, default-sp adında bir servis sağlayıcı yapılandırması ve example-userpass adında basit bir kullanıcı adı/şifre tabanlı kimlik doğrulama kaynağı göreceksiniz.

* default-sp: Bu, SimpleSAMLphp’yi bir servis sağlayıcı olarak kullanırken referans alacağınız varsayılan yapılandırmadır.

'default-sp' => array(
    'saml:SP',
    // The entity ID of this SP.
    // Can be omitted if the entity ID can be calculated from the base URL.
    // 'entityID' => null,
    // The IdP that this SP should contact.
    // Can be omitted if you want to allow the user to choose an IdP from a list.
    'idp' => null,
    'privatekey' => 'saml.pem',
    'certificate' => 'saml.crt',
    /*
     * When using SAML 2.0, the IdP may request that the SP signs the authentication request.
     * This setting controls whether the SP should sign the authentication requests.
     * Note that this setting is ignored if the IdP does not request signed authentication requests.
     */
    'sign.authnrequest' => true,
    /*
     * When using SAML 2.0, the IdP may request that the SP signs the logout request.
     * This setting controls whether the SP should sign the logout requests.
     * Note that this setting is ignored if the IdP does not request signed logout requests.
     */
    'sign.logoutrequest' => true,
    /*
     * When using SAML 2.0, the IdP may request that the SP signs the logout response.
     * This setting controls whether the SP should sign the logout responses.
     * Note that this setting is ignored if the IdP does not request signed logout responses.
     */
    'sign.logoutresponse' => true,
    ),

idp parametresini boş bırakmak, kullanıcının birden fazla IdP varsa seçim yapmasına olanak tanır. Tek bir IdP kullanacaksanız, buraya IdP’nizin entityID değerini girebilirsiniz.
* example-userpass: Bu, bir IdP olarak SimpleSAMLphp’yi test etmek için kullanabileceğiniz basit bir kimlik doğrulama kaynağıdır. Gerçek dünyada LDAP, SQL veya başka bir dizin hizmeti kullanmanız gerekir.

'example-userpass' => array(
    'exampleauth:UserPass',
    'admin:adminpassword', // Kullanıcı adı:şifre
    'test:testpassword',
    ),

Bu kısma kendi kullanıcılarınızı ve şifrelerinizi ekleyebilir veya daha sonra LDAP/SQL gibi gerçek bir kimlik doğrulama kaynağı ile değiştirebilirsiniz.

Sertifika Oluşturma

SAML mesajlarının güvenliğini sağlamak için dijital imzalar ve şifreleme kullanılır. SimpleSAMLphp, bu işlemler için bir özel anahtar (.pem) ve bir genel sertifika (.crt) dosyasına ihtiyaç duyar. Bu dosyalar cert dizininde bulunur. Eğer mevcut değillerse, kendi kendine imzalı (self-signed) sertifikalar oluşturabilirsiniz.

cd /var/simplesamlphp/cert
sudo openssl req -newkey rsa:2048 -new -x509 -days 3650 -nodes -out saml.crt -keyout saml.pem

Bu komut, 2048 bit RSA anahtarı kullanarak 10 yıl geçerli (-days 3650) bir sertifika ve özel anahtar oluşturur. Komut sizden bazı bilgiler isteyecektir (ülke, şehir, kuruluş adı vb.). Common Name (Ortak Ad) alanına sunucunuzun tam nitelikli alan adını (FQDN) veya IP adresini girmeniz önemlidir.
Oluşturulan dosyaların www-data kullanıcısı tarafından okunabilir olduğundan emin olun:

sudo chown www-data:www-data saml.crt saml.pem
sudo chmod 644 saml.crt
sudo chmod 600 saml.pem

Servis Sağlayıcı (SP) Olarak Yapılandırma

SimpleSAMLphp’yi bir servis sağlayıcı olarak yapılandırmak, uygulamanızın bir kimlik sağlayıcıdan kimlik doğrulama taleplerini almasını ve kullanıcı bilgilerini işlemesini sağlar.

SP Metadata Oluşturma

SimpleSAMLphp yönetim paneline (örneğin, http://your_server_ip_or_domain/simplesaml) gidin.
“Federation” sekmesine tıklayın.
“Show metadata” başlığı altında, “Service Provider” bölümündeki default-sp için “Show metadata” bağlantısına tıklayın.
Burada, SP’nizin XML metadata’sını göreceksiniz. Bu metadata’yı kopyalayın ve kimlik sağlayıcınıza (IdP) verin. IdP, bu metadata’yı kullanarak SP’nizi tanıyacak ve SAML iletişimini kuracaktır. Metadata, SP’nizin entityID, Assertion Consumer Service (ACS) URL’si ve sertifika bilgilerini içerir.

Kimlik Sağlayıcı (IdP) Metadata’sını Ekleme

SP’nizin IdP ile iletişim kurabilmesi için IdP’nin metadata’sına ihtiyacı vardır. IdP’nizden metadata XML dosyasını alın. Bu dosyayı /var/simplesamlphp/metadata dizinine saml20-idp-remote.php adıyla kaydedin.
Örneğin, IdP’nizin metadata’sı idp-metadata.xml ise:

sudo nano /var/simplesamlphp/metadata/saml20-idp-remote.php

İçeriği aşağıdaki gibi düzenleyin (IdP’nizin entityID ve SingleSignOnService URL’sini kendi değerlerinizle değiştirin):


 * SAML 2.0 IdP Remote metadata for SimpleSAMLphp.
 *
 * Remember to replace 'idp.example.org' with the real entity ID of your IdP.
 */

$metadata['https://idp.example.org/simplesaml/saml2/idp/metadata.php'] = array(
    'entityid' => 'https://idp.example.org/simplesaml/saml2/idp/metadata.php',
    'SingleSignOnService' => array(
        0 => array(
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://idp.example.org/simplesaml/saml2/idp/SSOService.php',
        ),
    ),
    'SingleLogoutService' => array(
        0 => array(
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://idp.example.org/simplesaml/saml2/idp/SingleLogoutService.php',
        ),
    ),
    'certData' => 'MIICQDCCASqgAwIBAgIJANcET... (IdP'nizin sertifika verisi)',
);

certData alanına IdP’nizin sertifikasını Base64 kodlu olarak eklemelisiniz. Genellikle IdP metadata XML’inde etiketi altında bulunur.

Uygulama Entegrasyonu (PHP Örneği)

Şimdi SimpleSAMLphp SP’yi kendi PHP uygulamanıza nasıl entegre edeceğinizi görelim. Varsayalım ki uygulamanız /var/www/html/myapp dizininde bulunuyor.
Öncelikle, uygulamanızın index.php veya kimlik doğrulaması gerektiren herhangi bir sayfasında SimpleSAMLphp kütüphanesini yüklemeniz ve bir SimpleSAML_Auth_Simple nesnesi oluşturmanız gerekir.

isAuthenticated()) {
    // Kimlik doğrulaması yapılmadıysa, IdP'ye yönlendir
    $as->requireAuth();
}

// Kimlik doğrulaması başarılıysa, kullanıcı niteliklerini al
$attributes = $as->getAttributes();

echo "

Hoş Geldiniz, " . htmlspecialchars($attributes['cn'][0]) . "

"; echo "

Kullanıcı Nitelikleri:

"; echo "
";
print_r($attributes);
echo "

";

// Oturumu kapatma linki
echo '

Oturumu Kapat

';
?>


Bu basit örnek, kullanıcının kimlik doğrulaması yapılmamışsa IdP’ye yönlendirir. Başarılı bir kimlik doğrulamasından sonra, IdP’den gelen kullanıcı niteliklerini (attributes) alır ve ekrana basar. cn (Common Name) gibi nitelikler, IdP’nizin sağladığı özniteliklere bağlı olacaktır.

Kimlik Sağlayıcı (IdP) Olarak Yapılandırma

SimpleSAMLphp’yi bir kimlik sağlayıcı olarak yapılandırmak, kullanıcılarınızın kimlik bilgilerini doğrulamasını ve bu bilgileri servis sağlayıcılara (SP) göndermesini sağlar.

IdP Metadata Oluşturma

SimpleSAMLphp yönetim paneline (örneğin, http://your_server_ip_or_domain/simplesaml) gidin.
“Federation” sekmesine tıklayın.
“Show metadata” başlığı altında, “Identity Provider” bölümündeki saml20-idp-hosted için “Show metadata” bağlantısına tıklayın.
Burada, IdP’nizin XML metadata’sını göreceksiniz. Bu metadata’yı kopyalayın ve servis sağlayıcınıza (SP) verin. SP, bu metadata’yı kullanarak IdP’nizi tanıyacak ve SAML iletişimini kuracaktır.

Kimlik Doğrulama Kaynaklarını Yapılandırma

config/authsources.php dosyasında, IdP’nizin kullanıcıları nasıl doğrulayacağını tanımlamanız gerekir. Daha önce bahsettiğimiz example-userpass basit bir test kaynağıdır. Gerçek dünyada genellikle LDAP veya SQL tabanlı bir kimlik doğrulama kaynağı kullanılır.

LDAP Kimlik Doğrulama Kaynağı Örneği

Eğer bir LDAP sunucunuz varsa (örneğin OpenLDAP, Active Directory), SimpleSAMLphp’yi buna bağlayabilirsiniz. authsources.php dosyasını düzenleyerek aşağıdaki gibi bir LDAP kimlik doğrulama kaynağı ekleyebilirsiniz:

sudo nano /var/simplesamlphp/config/authsources.php
'ldap-auth' => array(
    'authsource:LDAP',
    'hostname' => 'ldap.example.org', // LDAP sunucunuzun adresi
    'port' => 389, // LDAP portu (LDAPS için 636)
    'attributes' => array('uid', 'cn', 'mail'), // SP'ye gönderilecek nitelikler
    'searchbase' => 'dc=example,dc=org', // Kullanıcıların aranacağı temel DN
    'searchattribute' => 'uid', // Kullanıcı adı niteliği
    'usernameattribute' => 'uid', // Oturum açma için kullanılacak nitelik
    'binddn' => 'cn=admin,dc=example,dc=org', // LDAP bağlama kullanıcısı (okuma izni olan)
    'bindpw' => 'admin_password', // LDAP bağlama şifresi
    'dnpattern' => 'uid=%username%,ou=users,dc=example,dc=org', // Kullanıcı DN deseni
    'privileges' => true, // Yönetici haklarını kullan
    'referrals' => false,
    'debug' => false,
    'timeout' => 30,
),

Bu yapılandırmada, IdP’niz kullanıcıları LDAP sunucusu üzerinden doğrulayacak ve uid, cn, mail gibi nitelikleri SP’ye gönderecektir.

Servis Sağlayıcı (SP) Metadata’sını Ekleme

IdP’nizin SP ile iletişim kurabilmesi için SP’nin metadata’sına ihtiyacı vardır. SP’nizden metadata XML dosyasını alın. Bu dosyayı /var/simplesamlphp/metadata dizinine saml20-sp-remote.php adıyla kaydedin.

sudo nano /var/simplesamlphp/metadata/saml20-sp-remote.php

İçeriği aşağıdaki gibi düzenleyin (SP’nizin entityID ve AssertionConsumerService URL’sini kendi değerlerinizle değiştirin):


 * SAML 2.0 SP Remote metadata for SimpleSAMLphp.
 *
 * Remember to replace 'sp.example.org' with the real entity ID of your SP.
 */

$metadata['https://sp.example.org/simplesaml/module.php/saml/sp/metadata.php/default-sp'] = array(
    'entityid' => 'https://sp.example.org/simplesaml/module.php/saml/sp/metadata.php/default-sp',
    'AssertionConsumerService' => array(
        0 => array(
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
            'Location' => 'https://sp.example.org/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
        ),
    ),
    'SingleLogoutService' => array(
        0 => array(
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://sp.example.org/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp',
        ),
    ),
    'certData' => 'MIICQDCCASqgAwIBAgIJANcET... (SP'nizin sertifika verisi)',
);

certData alanına SP’nizin sertifikasını Base64 kodlu olarak eklemelisiniz. Genellikle SP metadata XML’inde etiketi altında bulunur.

Nitelik Eşleştirme (Attribute Mapping)

IdP’nizden gelen kullanıcı niteliklerini SP’nizin anlayacağı formata dönüştürmek gerekebilir. Bu işlem config/authproc.php dosyasında yapılır. Bu dosya, kimlik doğrulama sürecinde nitelikleri manipüle etmenizi sağlar.
Örnek olarak, IdP’niz uid niteliğini gönderirken, SP’niz username bekliyorsa, bir nitelik eşleştirme kuralı ekleyebilirsiniz:

sudo cp /var/simplesamlphp/config-templates/authproc.php /var/simplesamlphp/config/authproc.php
sudo nano /var/simplesamlphp/config/authproc.php

Aşağıdaki satırı ekleyin veya düzenleyin:

10 => array(
    'class' => 'core:AttributeMap',
    'uid' => 'username',
),

Bu, uid niteliğini username olarak yeniden adlandırır.

Test ve Sorun Giderme

Kurulum ve yapılandırma tamamlandıktan sonra, SAML akışının düzgün çalıştığından emin olmak için testler yapmalısınız.

SimpleSAMLphp Yönetim Paneli Üzerinden Test

Yönetim paneline (örneğin, http://your_server_ip_or_domain/simplesaml) giriş yapın.
* Servis Sağlayıcı (SP) Testi: “Authentication” sekmesine tıklayın. “Test configured authentication sources” altında, default-sp bağlantısına tıklayın. Bu sizi IdP’ye yönlendirmeli, kimlik doğrulamasını tamamlamalı ve ardından SP’ye geri dönerek kullanıcı niteliklerini göstermelidir.
* Kimlik Sağlayıcı (IdP) Testi: “Authentication” sekmesine tıklayın. “Test configured authentication sources” altında, example-userpass (veya yapılandırdığınız LDAP/SQL kaynağı) bağlantısına tıklayın. Bu, basit bir giriş ekranı sunmalı ve başarılı bir girişten sonra kullanıcı niteliklerini göstermelidir.

Uygulama Entegrasyon Testi

SP olarak yapılandırdığınız uygulamanıza (örneğin, http://your_server_ip_or_domain/myapp/index.php) erişmeyi deneyin. Eğer her şey doğru yapılandırıldıysa, IdP’ye yönlendirilecek, kimlik doğrulamasını yapacak ve ardından uygulamanıza geri dönerek kullanıcı niteliklerini göreceksiniz.

Yaygın Sorunlar ve Çözümleri

* Metadata Uyuşmazlığı: SP ve IdP metadata’larının doğru ve güncel olduğundan emin olun. entityID değerleri, ACS/SSO URL’leri ve sertifikalar eşleşmelidir.
* Sertifika Hataları: Sertifikaların doğru şekilde oluşturulduğunu, certData alanlarının doğru Base64 kodlu sertifika verisini içerdiğini ve özel anahtarın (.pem) izinlerinin doğru (600) olduğundan emin olun.
* Zaman Damgası Farkları (Clock Skew): SAML mesajları zaman damgalarına duyarlıdır. SP ve IdP sunucularının sistem saatlerinin senkronize olduğundan emin olun (NTP kullanarak).
* Nitelik Eşleştirme Sorunları: IdP’den gelen niteliklerin SP’nin beklediği isimlerle eşleştiğinden emin olun. authproc.php dosyasını kontrol edin.
* Yönlendirme Hataları: baseurlpath ayarının config.php dosyasında doğru olduğundan emin olun. Apache alias veya VirtualHost yapılandırmasını kontrol edin.
* Log Dosyalarını Kontrol Etme: SimpleSAMLphp’nin log/simplesamlphp.log dosyasını kontrol ederek detaylı hata mesajlarına ulaşabilirsiniz. Apache error loglarını (/var/log/apache2/error.log) da inceleyin.
* Tarayıcı Geliştirici Araçları: Tarayıcınızın geliştirici araçlarını (Network sekmesi) kullanarak SAML mesaj akışını izleyin. SAML mesajlarını deşifre etmek için SAML Chrome Panel gibi tarayıcı eklentileri kullanışlıdır.

Güvenlik İpuçları

Üretim ortamında SimpleSAMLphp kullanırken aşağıdaki güvenlik ipuçlarını göz önünde bulundurmanız önemlidir:

* HTTPS Kullanımı: Tüm SAML iletişiminin HTTPS üzerinden yapıldığından emin olun. Bu, SAML mesajlarının şifrelenmesini ve bütünlüğünü sağlar. Apache’de SSL/TLS yapılandırması yapın ve geçerli bir SSL sertifikası kullanın.
* Güçlü Şifreler ve secretsalt: auth.adminpassword ve secretsalt için karmaşık, tahmin edilemez değerler kullanın. secretsalt için SimpleSAMLphp yönetim panelinde önerilen değeri kullanmak iyi bir başlangıçtır.
* Web Kök Dizin Dışında Kurulum: SimpleSAMLphp’yi web sunucusunun kök dizini dışında bir yere kurmak (örneğin /var/simplesamlphp), hassas yapılandırma dosyalarının doğrudan web üzerinden erişilmesini engeller.
* Dosya İzinleri: Sertifika ve özel anahtar dosyalarının (.pem, .crt) ve yapılandırma dosyalarının doğru izinlere sahip olduğundan emin olun. Özel anahtarların sadece web sunucusu kullanıcısı tarafından okunabilir olması (chmod 600) kritik öneme sahiptir.
* Logları İzleme: SimpleSAMLphp ve web sunucusu loglarını düzenli olarak izleyin. Anormal aktiviteler veya hata mesajları için uyarılar ayarlayın.
* Gereksiz Modülleri Devre Dışı Bırakma: Kullanmadığınız SimpleSAMLphp modüllerini devre dışı bırakın (config.php dosyasında module.enable ayarı). Bu, saldırı yüzeyini azaltır.
* Güncel Tutma: SimpleSAMLphp’yi ve tüm bağımlılıklarını (PHP, Apache, Composer) düzenli olarak güncelleyin. Güvenlik açıkları genellikle yazılım güncellemeleriyle giderilir.
* IP Kısıtlamaları: Yönetim paneline erişimi belirli IP adresleriyle kısıtlamak, yetkisiz erişimi önleyebilir. Bu, Apache VirtualHost yapılandırmasında Require ip direktifi ile yapılabilir.

Sonuç

Bu makalede, Ubuntu 16.04 üzerinde SimpleSAMLphp’nin nasıl kurulacağını ve SAML kimlik doğrulaması için hem servis sağlayıcı (SP) hem de kimlik sağlayıcı (IdP) olarak nasıl yapılandırılacağını ayrıntılı bir şekilde ele aldık. Adım adım kurulum, temel yapılandırma, SP ve IdP rolleri için özel ayarlar ve sorun giderme ipuçları sayesinde, artık kendi SAML tabanlı SSO çözümünüzü kurabilecek bilgiye sahipsiniz.

SimpleSAMLphp, esnekliği, geniş özelleştirme seçenekleri ve açık kaynak yapısıyla, PHP uygulamalarınıza güçlü bir kimlik doğrulama katmanı eklemek için mükemmel bir araçtır. Doğru yapılandırıldığında ve güvenlik en iyi uygulamaları takip edildiğinde, kullanıcılarınız için sorunsuz ve güvenli bir SSO deneyimi sunar. SAML’nin karmaşıklığına rağmen, SimpleSAMLphp bu süreci büyük ölçüde basitleştirerek geliştiricilerin ve sistem yöneticilerinin işini kolaylaştırmaktadır. Unutmayın, üretim ortamında kullanmadan önce kapsamlı testler yapmak ve güvenlik önlemlerini titizlikle uygulamak hayati önem taşır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version