SAML ってなんじゃ?

saml.png

9.5.3/9.5.4 では Idp と Sp の同居はできないっぽい → Nightly Build 20120108 (10.0) でできるようになったっぽい


検証環境の準備

Identity Provider の準備 (OpenAM)

  1. JDK 6 のインストール
    http://www.oracle.com/technetwork/java/javase/downloads/
    # chmod +x jdk-6u30-linux-x64-rpm.bin
    # ./jdk-6u30-linux-x64-rpm.bin
     
    # java -version
    java version "1.6.0_30"
    Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 20.5-b03, mixed mode)
    (/usr/java/jdk1.6.0_30 に展開され、/usr/bin/java からシンボリックリンクが張られている)
  2. Tomcat 6 のインストール
    http://tomcat.apache.org/download-60.cgi
    # mkdir /opt/openam
    # cd /opt/openam/
    # tar -xf /home/kagyuu/ダウンロード/apache-tomcat-6.0.35.tar.gz 
    起動スクリプト (/etc/rc.d/init.d/openam)
    #!/bin/sh
    #
    # openam
    #
    # chkconfig: 35 95 5
    # description: Manage OpenAM SSO Server
    CATALINA_HOME=/opt/openam/apache-tomcat-6.0.35
    export CATALINA_HOME
     
    JAVA_HOME=/usr/java/jdk1.6.0_30
    export JAVA_HOME
    
    JAVA_OPTS="-Xmx1024m -XX:MaxPermSize=256m"
    export JAVA_OPTS
    
    CATALINA_OPTS="-Dcom.iplanet.am.cookie.c66Encode=true"
    export CATALINA_OPTS
    
    case "${1}" in
    start)
      "${CATALINA_HOME}/bin/startup.sh"
      exit ${?}
      ;;
    stop)
      "${CATALINA_HOME}/bin/shutdown.sh"
      exit ${?}
      ;;
    *)
      echo "Usage:  $0 { start | stop }"
      exit 1
      ;;
    esac
    chkconfig を使って、/etc/rc3.d/、/etc/rc5.d/ に登録
    # chmod +x /etc/rc.d/init.d/openam
    # /sbin/chkconfig --add openam
    # /sbin/chkconfig --list openam
    openam 0:off	1:off	2:off	3:on	4:off	5:on	6:off
  3. OpenAM 9 のインストール
    http://www.forgerock.org/openam.html
    # cp /home/kagyuu/ダウンロード/openam_954.war /opt/openam/apache-tomcat-6.0.35/webapps/openam.war
  4. /usr/bin/system-config-firewall で 8080 ポートを開ける
    fw8080.png
  5. OpenAM 9 の初期設定
    # /etc/rc.d/init.d/openam start
    Using CATALINA_BASE:   /opt/openam/apache-tomcat-6.0.35
    Using CATALINA_HOME:   /opt/openam/apache-tomcat-6.0.35
    Using CATALINA_TMPDIR: /opt/openam/apache-tomcat-6.0.35/temp
    Using JRE_HOME:        /usr/java/jdk1.6.0_30
    Using CLASSPATH:       /opt/openam/apache-tomcat-6.0.35/bin/bootstrap.jar
  6. 初期設定は、デフォルトで
    http://sso.example.com:8080/openam/
    amconfig.png
  7. ログイン
    am-1.png
  8. [アクセス制御]-[/最上位のレルム]-[データストア]-[embedded] で、グループメンバーシップの属性名 に memberOf を指定する。これをしないと、ユーザノードからグループをたどれない
    am-5.png
  9. 共通タスクから 「ホストアイデンティティープロバイダの作成」
    am-2.png
  10. wordpress トラストサークルを作成。証明書はとりあえず test を使う。
    am-3.png
    am-4.png

(サーバー証明書を作成する場合)

  1. OpenAM インストール時に展開される証明書は /root/openam/openam/keystore.jks に格納されているもの。OpenAM 標準の keystore のパスワードは changeit
    [root@app openam]# pwd
    /root/openam/openam
  2. 証明書を作成する
    [root@app openam]# keytool -genkey -keyalg RSA -alias saml -keystore keystore.jks 
    キーストアのパスワードを入力してください: changeit
    姓名を入力してください。
      [Unknown]:  Mari TACHIBANA
    組織単位名を入力してください。
      [Unknown]:  WebAdmin
    組織名を入力してください。
      [Unknown]:  Example
    都市名または地域名を入力してください。
      [Unknown]:  Vonbrown
    州名または地方名を入力してください。
      [Unknown]:  Moon
    この単位に該当する 2 文字の国番号を入力してください。
      [Unknown]:  MR
    CN=Mari TACHIBANA, OU=WebAdmin, O=Example, L=Vonbrown, ST=Moon, C=MR でよろしいですか?
      [no]:  yes
    
    <saml> の鍵パスワードを入力してください。
    	(キーストアのパスワードと同じ場合は RETURN を押してください): 
    
  3. 自己署名する
    [root@app openam]# keytool -selfcert -alias saml -keystore keystore.jks -validity 3650 -storepass changeit
  4. 登録結果の確認
    [root@app openam]# keytool -list -v -keystore keystore.jks -storepass changeit
    
    キーストアのタイプ: JKS
    キーストアのプロバイダ: SUN
    
    キーストアには 2 エントリが含まれます。
    
    別名: saml
    作成日: 2012/01/08
    エントリタイプ: PrivateKeyEntry
    証明連鎖の長さ: 1
    証明書[1]:
    所有者: CN=Mari TACHIBANA, OU=WebAdmin, O=Example, L=Vonbrown, ST=Moon, C=MR
    発行者: CN=Mari TACHIBANA, OU=WebAdmin, O=Example, L=Vonbrown, ST=Moon, C=MR
    シリアル番号: 4f0965cc
    有効期間の開始日: Sun Jan 08 18:45:48 JST 2012 終了日: Wed Jan 05 18:45:48 JST 2022
    証明書のフィンガープリント:
    	 MD5:  89:9C:6D:77:E6:50:5B:05:25:AE:14:C4:72:94:8E:75
    	 SHA1: 4D:6B:E0:32:29:4A:27:13:5C:C2:4C:9B:C6:1E:76:5B:F9:F7:C4:93
    	 署名アルゴリズム名: SHA1withRSA
    	 バージョン: 3
    
    
    *******************************************
    *******************************************
    
    
    別名: test
    作成日: 2008/07/17
    エントリタイプ: PrivateKeyEntry
    証明連鎖の長さ: 1
    証明書[1]:
    所有者: CN=test, OU=OpenSSO, O=Sun, L=Santa Clara, ST=California, C=US
    発行者: CN=test, OU=OpenSSO, O=Sun, L=Santa Clara, ST=California, C=US
    シリアル番号: 478d074b
    有効期間の開始日: Wed Jan 16 04:19:39 JST 2008 終了日: Sat Jan 13 04:19:39 JST 2018
    証明書のフィンガープリント:
    	 MD5:  8D:89:26:BA:5C:04:D8:CC:D0:1B:85:50:2E:38:14:EF
    	 SHA1: DE:F1:8D:BE:D5:47:CD:F3:D5:2B:62:7F:41:63:7C:44:30:45:FE:33
    	 署名アルゴリズム名: MD5withRSA
    	 バージョン: 1
    
    
    *******************************************
    *******************************************
  5. トラストサークル作成時に設定する証明書に、test の他に saml を設定できるようになった
    cert.png

Service Provider の準備 (simpleSAMLphp)

  1. apache 2.2 のインストール
    # yum -y install httpd
    chkconfig を使って、/etc/rc3.d/、/etc/rc5.d/ に登録
    # /sbin/chkconfig --level 35 httpd on
    # /sbin/chkconfig --list httpd
    httpd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off
  2. /usr/bin/system-config-firewall で 80 ポートを開ける
    fw80.png
  3. php のインストール
    # yum -y install php*
  4. http://code.google.com/p/simplesamlphp より simplesamlphp-1.8.1.tar.gz をダウンロード
    $ wget http://simplesamlphp.googlecode.com/files/simplesamlphp-1.8.1.tar.gz
  5. /var に展開 (var以外に展開するとややこしいことになるらしい。あと、Symbolic Link にしてもややこしいことになるらしい)
    # cd /var
    # tar -xf /home/kagyuu/ダウンロード/simplesamlphp-1.8.1.tar.gz 
    # chown -R apache:apache simplesamlphp-1.8.1/
    SELinux が有効な場合には、simpleSAMLphp のアクセスベクタを /var/www/html と同じにします
    # ls -ldZ /var/www/html
    drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
    # chcon -u system_u -Rt httpd_sys_content_t /var/simplesamlphp-1.8.1
  6. apache から見えるようにする
    # cd /etc/httpd/conf.d/
    # ls
    
    README  mod_dnssd.conf  php.conf  simplesamlphp.conf  welcome.conf
     
    # cat /etc/httpd/conf.d/simplesamlphp.conf 
    
    Alias /simplesaml "/var/simplesamlphp-1.8.1/www"
    
    <Directory "/var/simplesamlphp-1.8.1/www">
      Options Multiviews
      AllowOverride None
      Order allow,deny
      allow from all
    </Directory> 
  7. 設定変更 (/var/simplesamlphp-1.8.1/config/config.php)
    keyデフォルト値変更値備考
    'baseurlpath'=>'simplesaml/'
    'auth.adminpassword'=>'123''samlpass''123'のままだとログインできない
    'secretsalt'=>'defaultsecretsalt'eay5trurouz5cgmm1q2leneg6kj3dxz3(*1)
    'technicalcontact_name'=>'Administrator'
    'technicalcontact_email'=>'na@example.org''root@app.example.com'とりあえずローカルのメールアドレス
    'language.default'=>'en'変更不要
    'timezone'=>null変更不要(*2)
    • (*1) 暗号のSalt。平文にSaltを加えて暗号化することにより強度増強。乱数を生成する
      $ tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2>/dev/null;echo
      eay5trurouz5cgmm1q2leneg6kj3dxz3
    • (*2) Timezone : http://php.net/manual/en/timezones.php
  8. PHP のメール設定をする
    • Linux では、通常 sendmail を使うように設定されている。初期状態の sendmail でも自機にはメールを送れる (/etc/php.ini)
      ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
      ; http://www.php.net/manual/en/mail.configuration.php#ini.sendmail-path
      sendmail_path = /usr/sbin/sendmail -t -i
    • Windows の場合には、外部の SMTP サーバを指定する必要あり
  9. 証明書の作成
    # cd /var/simplesamlphp-1.8.1/cert
    # openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.pem
    # ls
    saml.crt  saml.pem  server.crt  server.pem
  10. 証明書の登録。authsources.php に saml.crt と saml.pem に追加する
    # cat /var/simplesamlphp-1.8.1/config/authsources.php
    
    <?php
    $config = array(
    
    (中略)
    
           'default-sp' => array(
                   'saml:SP',
    
                   // The entity ID of this SP.
                   // Can be NULL/unset, in which case an entity ID is generated based on the metadata URL.
                   'entityID' => NULL,
    
                   // The entity ID of the IdP this should SP should contact.
                   // Can be NULL/unset, in which case the user will be shown a list of available IdPs.
                   'idp' => 'http://sso.example.com:8080/openam',
    
                   // The URL to the discovery service.
                   // Can be NULL/unset, in which case a builtin discovery service will be used.
                   'discoURL' => NULL,
    
                   'privatekey' => 'saml.pem',
                   'certificate' => 'saml.crt',
           ),
    
    	/*
    	'example-sql' => array(
    (後略)

メタデータの交換 (Sp → Idp)

  1. apache を起動
    # /etc/rc.d/init.d/httpd start
  2. simpleSAMLphp に、先ほど設定した admin/samlpass でログイン ( http://app.example.com/simplesaml/ )
    sp-0.png
    sp-1.png
  3. [連携]
    sp-2.png
  4. [メタデータを表示]
    sp-3.png
    メタデータは http://app.example.com/simplesaml/module.php/saml/sp/metadata.php/default-sp で公開されているらしい
     
  5. OpenAM にログインして、共通タスクから [リモートサービスプロバイダを登録] を選択
    sp-4.png
  6. トラストサークルに、simpleSAMLphpのメタデータを登録する
    sp-5.png
    sp-6.png

メタデータの交換 (Idp → Sp)

  1. Idp 側のメタデータは http://sso.example.com:8080/openam/saml2/jsp/exportmetadata.jsp で公開されている。[ソースを表示] で XML をクリップボードに積み込む
    idp-0.png
  2. [連携]-[XMLを simpleSAMLphp メタデータに変換]
    idp-1.png
  3. Idp 側のメタデータを貼り付ける
    idp-2.png
  4. [パース] ボタンを押して、php プログラムを生成する
    idp-3.png
  5. /var/simplesamlphp-1.8.1/metadata/saml20-idp-remote.php を生成されたプログラムに書き換える
    # mv saml20-idp-remote.php saml20-idp-remote.php_
    # vi saml20-idp-remote.php
    
         1 <?php
         2 
         3 $metadata['http://sso.example.com:8080/openam'] = array (
         4   'entityid' => 'http://sso.example.com:8080/openam',
         5   'contacts' =>
         6   array (
         7   ),
         8   'metadata-set' => 'saml20-idp-remote',
         9   'SingleSignOnService' =>
        10   array (
    (以下略)
  6. Idp側のメタデータが登録された
    idp-4.png

接続の確認をする

  1. [認証]-[設定されている認証元をテスト]
    idp-5.png
  2. OpenAM のログイン画面に遷移する。demo/changeit でログイン
    idp-7.png
  3. ログインできた
    idp-8.png
  4. OpenAM 側にログインすると demo ユーザでログインされている
    idp-9.png

ユーザ登録と連携項目の設定

  1. ユーザ登録
    1. [アクセス制御]-[/(最上位のレルム)]-[対象]-[ユーザ] で、「鈴木一朗」を追加
      con-1.png
    2. [アクセス制御]-[/(最上位のレルム)]-[対象]-[グループ]で、「wpadmin」を追加して、「鈴木一朗」を参加させる
      con-2.png
  2. 連携項目の設定
    1. [連携]
      con-3.png
    2. [SP]-[処理表明]-[属性マッパ] で連携項目を設定
      Wordpress で使うのは、
      WordpressSp項目Idp項目
      ユーザ名uiduid
      メールmailmail
      givenNamegivenName
      snsn
      権限eduPersonEntitlement?memberOf
      con-4.png
  3. simpleSAMLphp の [認証]-[設定されている認証元をテスト] で、ichiro/password でログイン
    con-5.png

Wordpressのインストール

  1. Apache 2.2、PHP 5、Mysql 5
    # yum -y install httpd php-* mysql-*
  2. 自動起動
    # /sbin/chkconfig --level 35 httpd on
    # /sbin/chkconfig --level 35 mysqld on
    # /sbin/chkconfig --list httpd
    httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
    # /sbin/chkconfig --list mysqld
    mysqld         	0:off	1:off	2:off	3:on	4:off	5:on	6:off
  3. 起動
    # /etc/rc.d/init.d/httpd start
    # /etc/rc.d/init.d/mysqld start
  4. mysql 管理ユーザの作成
    # /usr/bin/mysqladmin -u root password 'mysqlpassword'
  5. wordpress 管理ユーザの作成
    # mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 4
    Server version: 5.1.52 Source distribution
    
    Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL v2 license
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> create database wordpressdb;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> grant all on wordpressdb.* to 'wpadmin'@'localhost' identified by 'wppassword';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> exit;
    Bye
  6. Wordpress を配置
    • http://ja.wordpress.org/ から wordpress-3.3-ja.tar.gz をダウンロード
      $ wget http://ja.wordpress.org/wordpress-3.3-ja.tar.gz
    • Web サーバに配置
      # cd /var/www/html/
      # tar -xf /home/kagyuu/ダウンロード/wordpress-3.3-ja.tar.gz 
      # ls
      wordpress
      # chown -R apache:apache wordpress
      wordpress ディレクトリの所有者を apache:apache にするのを忘れずに (wordpress が設定ファイルを書き込めない)
  7. Wordpress の設定
    http://app.example.com/wodpress/ にアクセス
    wp-0.png
    wp-1.png
    mysql の接続設定
    wp-2.png
    wp-3.png
    Wordpress 管理者の設定
    wp-4.png
    wp-5.png
    管理者としてログイン
    wp-6.png
    wp-7.png
    wp-8.png

simpleSAMLphp authentication plugin の導入

  1. Safari で、Wordpress に admin でログイン
    saml-0.png
  2. [plugin]-[新規追加] で、http://wordpress.org/extend/plugins/simplesamlphp-authentication/installation/ からダウンロードした simplesamlphp-authentication.0.5.2.zip をアップロード
    saml-1.png
  3. プラグイン編集で、プログラムを変更する (Bug Fix?)
    saml-2.png
    saml-3.png
        30 $simplesaml_authentication_opt = get_option('simplesaml_authentication_options');
        31 
    +   32 $simplesaml_authentication_opt = array(
    +   33   'new_user' => TRUE,
    +   34   'slo' => FALSE,
    +   35   'redirect_url' => '',
    +   36   'email_suffix' => 'example.com',
    +   37   'sp_auth' => 'default-sp',
    +   38   'include_path' => '/var/simplesamlphp-1.8.1',
    +   39   'admin_entitlement' => 'cn=wpadmin,ou=groups,dc=opensso,dc=java,dc=net',
    +   40 );
        41 
        42 $simplesaml_configured = true;
        43 
        44 // try to configure the simpleSAMLphp client
        45 if ($simplesaml_authentication_opt['include_path'] == '') {
    Nさんによると、plugin のソースコードを書き換えなくても、Wordpress の [設定] で、同様の設定ができるらしい
     
  4. プラグインを有効化する
    saml-4.png
    ここで、admin をログオフしない。SSO でログインできる管理者ユーザが登録できないと、Wordpress に、誰もログインできなくなる !!!

Wordpress で SSO を試してみる

  1. 別ブラウザ( Chrome )で、Wordpress にアクセスして、ログイン
    saml-5.png
  2. OpenAM のログイン画面が表示される
    saml-7.png
  3. 先ほど OpenAM に登録した ichiro/password でログインできる。※ ichiro は、Wordpress には登録していなかったけど、ログインできたことに注目 ※
    saml-8.png
  4. ichiro と言う管理者が登録された
    saml-9.png
  5. Admin はログオフしていい。
    • 二度と Admin ではログインできないが、ichiro でログインすれば管理者権限が必要な操作が可能。
    • あと、Safari のキャッシュをクリアする必要がある (ログイン画面のキャッシュを削除する必要がある)

参考文献

  1. simpleSAMLphp Installation and Configuration, simpleSAMLphp, 2010-03-18, http://simplesamlphp.org/docs/1.5/simplesamlphp-install
  2. SimpleSAMLphp Service Provider QuickStart?, simpleSAMLphp, 2010-03-18, http://simplesamlphp.org/docs/1.5/simplesamlphp-sp
  3. Connecting OpenSSO IDP with SimpleSAMLphp SP, KENNING CORPORATION, 2009-04-25, http://kenning.co.nz/identity-management/connecting-opensso-idp-with-simplesamlphp-sp/
  4. SAML IDP Metadata with OpenSSO, KENNING CORPORATION, 2009-04-25, http://kenning.co.nz/identity-management/saml-idp-metadata-with-opensso/
  5. Comment utiliser OpenAM avec SimpleSAMLphp en tant que fournisseurs de services, http://wiki.opencsi.com/public/bin/view/OpenAM/SimpleSAMLphp
  6. http://moodle.org/plugins/view.php?plugin=auth_saml

Java#OpenAM


*1 住基ネット導入時に、公共サービスの効率化のために一意IDが必要という賛成派の意見に対して、SAML を使って Name Identifier でひもづければ別々に管理しても OK と言う反論が出た

添付ファイル: filewp-7.png 2494件 [詳細] filewp-8.png 2267件 [詳細] filesaml.png 3388件 [詳細] filewp-2.png 2494件 [詳細] filewp-1.png 2655件 [詳細] filesp-2.png 2686件 [詳細] filewp-5.png 2612件 [詳細] filewp-6.png 2521件 [詳細] filevm.png 2894件 [詳細] filewp-0.png 2683件 [詳細] filesp-6.png 2796件 [詳細] filewp-3.png 2597件 [詳細] filesp-0.png 3117件 [詳細] filesp-5.png 2876件 [詳細] filewp-4.png 2596件 [詳細] filesp-3.png 2798件 [詳細] filesp-4.png 2765件 [詳細] filesp-1.png 2666件 [詳細] filesaml-4.png 2377件 [詳細] filesaml-2.png 2389件 [詳細] fileidp-8.png 2565件 [詳細] filesaml-1.png 2583件 [詳細] fileidp-9.png 2587件 [詳細] fileidp-4.png 2827件 [詳細] fileidp-5.png 2809件 [詳細] fileidp-2.png 2680件 [詳細] fileidp-3.png 2845件 [詳細] filesaml-5.png 2352件 [詳細] filesaml-0.png 2435件 [詳細] filesaml-9.png 2438件 [詳細] filesaml-3.png 2364件 [詳細] filesaml-7.png 2429件 [詳細] fileproxy.png 2980件 [詳細] filesaml-8.png 2381件 [詳細] fileidp-7.png 2709件 [詳細] filesaml-10.png 2483件 [詳細] fileamconfig.png 2714件 [詳細] fileidp-0.png 3004件 [詳細] fileam-5.png 2916件 [詳細] filecon-1.png 2829件 [詳細] fileerr.png 2879件 [詳細] filecert.png 2580件 [詳細] fileidp-1.png 2986件 [詳細] filecon-5.png 2764件 [詳細] filecon-2.png 2710件 [詳細] filefw80.png 2647件 [詳細] filecon-3.png 2865件 [詳細] filecon-4.png 2936件 [詳細] filefw8080.png 2771件 [詳細] fileam-4.png 2812件 [詳細] fileam-3.png 2898件 [詳細] fileam-1.png 2953件 [詳細] fileam-2.png 2972件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2012-03-11 (日) 23:43:51 (4653d)
Short-URL: http://at-sushi.com/pukiwiki/index.php?cmd=s&k=3776687fe7
ISBN10
ISBN13
9784061426061