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 '';
?>
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ündekisaml20-idp-hostediç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.phpdosyasında, IdP’nizin kullanıcıları nasıl doğrulayacağını tanımlamanız gerekir. Daha önce bahsettiğimizexample-userpassbasit 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.phpdosyası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,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/metadatadizininesaml20-sp-remote.phpadıyla kaydedin.sudo nano /var/simplesamlphp/metadata/saml20-sp-remote.phpİçeriği aşağıdaki gibi düzenleyin (SP’nizin
entityIDveAssertionConsumerServiceURL’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)', );
certDataalanına SP’nizin sertifikasını Base64 kodlu olarak eklemelisiniz. Genellikle SP metadata XML’indeetiketi 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.phpdosyasında yapılır. Bu dosya, kimlik doğrulama sürecinde nitelikleri manipüle etmenizi sağlar.
Örnek olarak, IdP’nizuidniteliğini gönderirken, SP’nizusernamebekliyorsa, 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.phpAşağıdaki satırı ekleyin veya düzenleyin:
10 => array( 'class' => 'core:AttributeMap', 'uid' => 'username', ),Bu,
uidniteliğiniusernameolarak 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-spbağ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.
entityIDdeğerleri, ACS/SSO URL’leri ve sertifikalar eşleşmelidir.
* Sertifika Hataları: Sertifikaların doğru şekilde oluşturulduğunu,certDataalanları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.phpdosyasını kontrol edin.
* Yönlendirme Hataları:baseurlpathayarınınconfig.phpdosyasında doğru olduğundan emin olun. Apache alias veya VirtualHost yapılandırmasını kontrol edin.
* Log Dosyalarını Kontrol Etme: SimpleSAMLphp’ninlog/simplesamlphp.logdosyası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 vesecretsalt:auth.adminpasswordvesecretsaltiçin karmaşık, tahmin edilemez değerler kullanın.secretsaltiç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.phpdosyasındamodule.enableayarı). 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ındaRequire ipdirektifi 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.