【ADFS+SharePoint】イベントID8311が出たときの私の対処法

今日は、このブログが始まってから150回目の投稿です。
これまで、私がセミナー、講演、Webマガジン等で提供させていただいたサービスに対する
補足となるような内容を扱ってきたので、いきなりこのブログを見た人にとってはマニアックな内容に映るかもしれません。
ですが、今後もこれまでと同様な感じの内容を投稿していきますので、よろしくお願いします。

■ ■ ■

SharePoint Server 2010では、Webアプリケーションを作成するときに認証方法として
クレームベース認証を選択すると、さらにWindows認証、フォームベース認証、IDプロバイダー認証が選択できます。
ここでIDプロバイダー認証を選択すると、Active Directory フェデレーションサービス(ADFS)と連携した認証が実装できます。
今日は、ADFSとSharePoint Serverを連携させるための設定を行った時に私がハマったトラブルを紹介します。

ADFSでは証明書を色々と使います。そして、利用者側では正しい証明書を使っているかチェックをします。
通常、正しい証明書を使っているかどうかは[ルート証明機関]の中で登録されている証明機関から発行された
証明書を使っているかどうかで判断します。しかし、SharePoint ServerとADFSを連携させる場合には、
SharePoint Serverの中でルート証明機関の情報を登録しておかなければなりません。

具体的には、SharePoint Serverの[サーバーの全体管理]-[セキュリティ]-[信頼関係の管理]の中に
登録されている情報をもとに判断するのですが、[信頼関係の管理]にルート証明機関の情報が登録されていないと
イベントビューアのアプリケーションログ イベントID 8311のエラーが表示され、SharePointへのサインインに失敗します。

image

そのため、イベントID 8311のエラーでサインインに失敗するときには、[信頼関係の管理]を参照し、
適切なルート証明機関の情報(ルート証明書)が登録されているか確認してください。
そして、登録されていないときには、登録してください。
登録するときには、[SharePoint 2010 管理シェル]から行います。
このあたりはSecurtiy Token Serviceを構成するの手順5を参考にすると良いです、と言いたいのですが、
手順5は手順が抜けているように思います。私の環境では手順5の部分を以下のように実行したら、登録できました。


$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2(“ルート証明書のパス”)
New-SPTrustedRootAuthority -Name “Root Cert” -certificate $cert

このコマンドレットを実行した後で[信頼関係の管理]画面を見ると、
Root Certという名前のルート証明書が登録されていることが確認できます。

image

また、私の環境では上記のコマンドレットを実行したつもりなのですが、なぜか[信頼関係の管理]画面に
登録されていないことがありました。
このときには、Event ID 8311, certificate validation errors in MSS 2010(英語)のWebサイトに掲載されている
コマンドレットを[SharePoint 2010 管理シェル]から実行したら、解決したなんていうケースもありました。
参考までに掲載しておきます。


$rootCert = (Get-SPCertificateAuthority).RootCertificate

New-SPTrustedRootAuthority -Name “localNew” -Certificate $rootCert

イベントID 8311のエラーでSharePointのサインインに失敗するときには、試してみてください。