Title: OpenLDAPとX.509クライアント認証でシングルサインオンするには
ここでは DocJp178: LDAP X.509 クライアント認証の設定 の設定手順を、次の環境を例により具体的に解説します。この設定を済ますことで、TeamPage にシングルサインオンできるようになります。
- CentOS 5.7 x64
- OpenLDAP 2.3.43 (openldap, openldap-servers, openldap-clients)
- TeamPage 5.2.32
- Internet Explorer 9
なお、OpenLDAP による LDAP サーバーの基本的な構築方法についてはここでは触れませんので、インターネットの資料や市販されている参考書などを参考にしてください。
シングルサインオンをするには、X.509 クライアント証明書が
- TeamPage にアクセスするブラウザにインストールされている
- LDAP サーバー(を稼働するユーザー)からアクセス可能なディレクトリにクライアント証明書のファイルが置かれている
- LDAP ユーザーの認証にクライアント証明書を使う設定になっている
...ことが必要です。
また、これら X.509 クライアント証明書の設定とは別に、TeamPage で DocJp178: LDAP X.509 クライアント認証の設定 が必要です。
以下、順を追って解説します。
注意 : ユーザー認証の設定を誤ると、誰も TeamPage にログインできなくなることがあり得ます。そのような事態を避けるため、作業前に必ずバックアップを取ってください。(参照 : FAQ10: TeamPage のバックアップの方法)
ブラウザからクライアント証明書をエクスポートする
クライアント証明書のファイルがない場合、ブラウザからエクスポートしてください。ここでは Internet Explorer 9 を例に説明します。
Internet Explorer の、ツール > インターネット オプション >コンテンツ タブ の [証明書] ボタンをクリックし、「証明書」画面の [個人] タブを表示します。
注意 : ここに証明書が1つも表示されない場合は、この先の設定を完了させられませんので、作業を中止してください。(参照 : DocJp104: HTTPS X.509 クライアント認証の有効化)
使用する証明書をクリックして選択し、[エクスポート] ボタンをクリックします。
「秘密キーのエクスポート」についての選択肢では、[いいえ、秘密キーをエクスポートしません] を選択して [次へ] をクリックします。
「エクスポート ファイルの形式」では、[DER encoded binary X.509 (.CER)] を選択し、[次へ] をクリックしてください。
エクスポートするファイルの名前を指定します。ここでは「jiro_private.cer」というファイル名で保存します。
エクスポートされたファイルの情報が表示されます。[完了] をクリックします。
ファイルが保存され、「正しくエクスポートされました。」というメッセージが表示されます。インターネットオプションを閉じてください。
CentOSにクライアント証明書をインストールする
上記でエクスポートした証明書ファイルを CentOS の適当なディレクトリに設置します。ここでは /etc/pki/tls/private に jiro_private.cer をコピーします。
注意 : OpenLDAP サーバーを稼働するユーザー(ユーザー「ldap」)が証明書ファイルにアクセスできることを確認してください。
LDAPユーザーの認証にクライアント証明書を使うようにする
LDAP で管理されているユーザーの認証に、上記で設置した証明書ファイル (/etc/pki/tls/private/jiro_private.cer) を使うようにします。
ユーザー「jiro」に関する情報を次のように jiro.ldif ファイルに記述します。最後の「userCertificate」行で証明書ファイルをフルパスで指定します。
dn: uid=jiro,ou=People,dc=example,dc=jp
uid: jiro
mail: jiro@example.jp
sn: koyama
givenName: jiro
cn: jiro koyama
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
objectClass: strongAuthenticationUser
objectClass: pkiUser
userPassword: mypassword
shadowLastChange: 15356
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 515
gidNumber: 515
homeDirectory: /home/jiro
userCertificate;binary:< file:///etc/pki/tls/private/private.der.cer
このファイルを ldapadd
コマンドで指定し、ユーザーアカウント「jiro」を LDAP サーバーに登録します。登録済みの場合は ldapmodify
コマンドを使用し、既存のユーザー「jiro」の情報を書き換えます。
[root@centos ~]# ldapadd -x -D 'cn=Manager,dc=example,dc=jp' -W -f jiro.ldif
Enter LDAP Password: XXXXXXXX
adding new entry "uid=jiro,ou=People,dc=example,dc=jp"
正しく登録されたかどうかを ldapsearch
コマンドで確認します。
[root@centos ~]# ldapsearch -x -D 'cn=Manager,dc=example,dc=jp' -W "uid=jiro"
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: uid=jiro
# requesting: ALL
#
# jiro, People, example.jp
dn: uid=jiro,ou=People,dc=example,dc=jp
displayName: jiro
gecos: jiro
shadowExpire: -1
shadowFlag: 0
uid: jiro
mail: jiro@example.jp
sn: koyama
givenName: jiro
cn: jiro koyama
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
objectClass: strongAuthenticationUser
objectClass: pkiUser
userPassword:: bXlwYXNzd29yZA==
shadowLastChange: 15356
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 515
gidNumber: 515
homeDirectory: /home/jiro
userCertificate;binary:: MIIG7jCCBdagAwIBAgIQcRVmBUrkkSFN6...(以下略)
以上で CentOS 側の設定は完了です。続いて TeamPage 側の設定を行います。
TeamPageのセキュリティレベルを変更する
TeamPage の サーバーセットアップ | ネットワーク タブ | HTTP サーバー タブ の「セキュリティ レベル」で、次の設定を行います。
この2つの設定が完了すると、TeamPage とブラウザとの間の通信内容が HTTPS 暗号化され、なおかつ TeamPage にログインできるのはクライアント証明書がインストールされたブラウザからだけに制限されます。
TeamPageでLDAP設定をする
続いて、TeamPage のログイン認証を LDAP サーバーで行う設定をします。(参照 : DocJp166: LDAP 設定)
一般的な設定
ユーザーディレクトリの設定画面で、今回は次のように設定しました。使用する環境に応じて書き換えてください。
設定を済ませたら [保存] ボタンをクリックします。
ルックアップのテスト
[テスト] ボタンをクリックして「ユーザーディレクトリのテスト」画面を表示し、[ルックアップのテスト] ボタンをクリックして LDAP サーバーからユーザーを検索できるかどうかをテストします。検索されたユーザーをクリックして選択し、[詳細] をクリックすると、そのユーザーの詳細情報が表示されます。
ユーザー検索が失敗する場合(「該当なし」と表示される場合)は、LDAP サーバーへの問い合わせ書式に誤りがないか確認してください。
例えば、「LDAP スキーマ マッピング」の「フルネーム属性」では既定で「fullName」が使われますが、今回の例(上記の jiro.ldif)では、フルネーム属性として「cn」が使われています。そのため、LDAP サーバーへ「fullName」属性を問い合わせても該当ユーザーが見つかりません。
また、「LDAP 検索」欄の「電子メール補完検索」と「ユーザーのルックアップ検索」では、既定で「objectClass=Person」が使われますが、上記の jiro.ldif の objectClass には「Person」がありません。ここでは代わりに「inetOrgPerson」を指定します。同様に「fullName」も「cn」に変更します。
ユーザーディレクトリの変更と移行(マイグレーション)
ユーザーのルックアップ(や、パスワード認証ユーザーのログイン)が成功することを確認したら、ユーザーディレクトリの変更とプリンシパルの移行 を行います。これは、「TeamPage 上の『jiro』というアカウントを、OpenLDAP サーバー上のユーザーアカウント『jiro』に紐付ける」という作業になります。
ユーザーディレクトリの選択画面の「ユーザー ディレクトリ」ドロップダウンから LDAP + X.509 のユーザーディレクトリ設定を選択し、[プリンシパルの移行 (トグル動作)] チェックボックスがオンになっていることを確認し、[次へ] をクリックします。
TeamPage ユーザー名に合致する LDAP ユーザーが LDAP サーバーから検索され、自動的に紐付けられて表示されます。紐付けに成功したユーザーの「新しいエンコーディング」欄は、黄色で表示されます。
自動的に紐付けできなかったユーザーは、赤い色で表示され、「新しいエンコーディング」欄に TeamPage のユーザーIDが表示されます。手動で紐付けをするには、「ユーザーのルックアップ」欄にユーザー名の一部を入力し、[ルックアップ] をクリックしてください。
「新しいエンコーディング」欄に表示された、すべてのユーザー情報が正しいかどうかを確認し、[完了] ボタンをクリックします。
再起動の確認ダイアログが表示されるので、[OK] をクリックして続行します。
再起動完了後、TeamPage にアクセスすると、ブラウザは証明書の選択画面を表示します。証明書を選択し、[OK] ボタンをクリックすると(ここではユーザー「jiro」として)TeamPage にログインします。