ADFS証明書の更新について

あまり日本語のドキュメントが無かったので、自分のリマインダ代わりに手順を記載します。

ADFSは、その動作の為にSSL証明書を利用しますが、その用途によって「①サービス通信証明書」「②トークン暗号化解除証明書」「③トークン署名証明書」の3つが利用されます。

Office365を利用する場合、ウィザードで通常通り作成すると、①はIIS等でCSR作成した外部CA(もしくは自己署名やエンタープライズCA)の証明書で、②③がADFSが自動的に生成した証明書となります。

SSL証明書には有効期限がありますので、①②③ともに有効期限が来る前に更新をする必要があります。

ADFSサーバ – サービス通信証明書(①)

CSRの発行から登録についてもいくつか処理を実施しなくてはいけません。Microsoftのサポートページに機械翻訳のKBも載ってますので参考になさって下さい。流れとしては以下の通りです。
それを過ぎると、ADFS 2. 0 サービスの通信の証明書を変更する方法

  • 【準備】CSRを発行する
  • 【準備】CSRを外部CAに送信して証明書を発行して貰う
  • 【準備】発行された証明書を秘密キーを含む形(pfx)でエクスポートする
  • MMCの「証明書(ローカルコンピューター)」から上記のpfxを「個人」ストアにインポートする
  • MMCからインポートした証明書の「全てのタスク」「秘密キーの管理」から、ADFSファームのサービスアカウント(スタンドアロンの場合はNETWORK SERVICE)に「読み取り」のアクセス権を与える
  • IISの「Default Web Site」の「バインドの編集」から、HTTPSで利用しているSSL証明書を新しい物に変更する。
  • ADFSの管理コンソールから「サービス」「証明書」を選び、右ペインの「サービス通信証明書の設定」をクリックすると、利用できる証明書の一覧が表示されますので、新しい物に変更します。

ADFSサーバ – トークン暗号化解除証明書、トークン署名証明書(②③)

以前の投稿「ADFSインストールから350日でSSO不可」「ADFSの自己証明書の期間延長」でも記載しましたが、自己証明書でADFSサービスが自動的に更新を行ってくれるので手順的にはそれほど問題は無いと思います。

Office365の場合は自動的に期限の切れる20日前に、その時点から1年間有効なセカンダリの証明書が発行されるので、それがプライマリに昇格する5日間の間にUpdate-MsolFederatedDomainコマンドを実行するか、Microsoft Office 365 Federation Metadata Update Automation Installation Toolをインストールしておきます。

手動で任意のタイミングで実行したい場合は、以下を参考に実行されて下さい。

Add-PSSnapin Microsoft.Adfs.PowerShell
Import-Module MSOnline
$LiveCred = Get-Credential
Connect-MsolService -Credential $LiveCred
Update-ADFSCertificate
Update-MsolFederatedDomain -DomainName contoso.com
Get-MsolFederationProperty
Restart-Servivce adfssrv

毎回実施するのが面倒な場合は、Set-AdfsProperties -CertificateDuration 3650 などを加えても良いでしょう。更新後は念のためADFSサービスを再起動します。

ちなみに、ADFSファーム構成の場合、この証明書情報はActiveDirectory上に格納されますのでこの工程と①の最後の工程はADFSのプライマリ(最初にインストールした物:Get-AdfsSyncPropertiesでRoleがPrimaryComputerと出る物)で実施すればファーム内の別サーバに同期されます。

※その他の①の工程(IISへの設定)は各マシンで個別に実施する必要があります。

ADFS Proxyサーバ

ADFS Proxyサーバは、基本的にはADFSサーバでいうサービス通信証明書に相当する証明書のみ利用しています。

通常の場合はADFS Proxy構成ウィザードを走らせる必要は無く、

  • MMCの「証明書(ローカルコンピューター)」からpfxを「個人」ストアにインポートする
  • MMCからインポートした証明書の「全てのタスク」「秘密キーの管理」から、NETWORK SERVICEに「読み取り」のアクセス権を与える
  • IISの「Default Web Site」の「バインドの編集」から、HTTPSで利用しているSSL証明書を新しい物に変更する。

でいけるかと思います。

ただ、ADFS側でトークン署名証明書を更新した場合は、ADFS Proxy構成ウィザードを再実行した方が良いという情報もございますので、念のため実行しておいた方が良いでしょう。

ADFS Proxyサインイン画面のカスタマイズ

ADFSのシングルサインオン環境において、外部からブラウザでアクセスすると、ADFS Proxy経由でのアクセスとなります。
 

この際、オペレーション上で少し気になる点がありました。

  1. 前の画面でIDを入れたのに、再度最初から入力を促される
  2. 前の画面では、username@domain.nameの形式で入力する必要があるが、移行先の画面では入力例がdomainusernameになっている

少し変だなとは感じつつも、まあデフォルトで埋め込まれている物だから仕方ないな…と思っていたのですが、ExchangeのMVPのMike Pfeifferからこれを解消するカスタマイズ方が紹介されています。

Useful Customizations to AD FS 2.0 when Deploying SSO with Office 365

詳しい手法については上記ページに任せようと思いますが(日本語環境でもほぼ一緒です)、こちらに従ってC:inetpubadfslsApp_GlobalResourcesCommonResources.ja.resxとC:inetpubadfslsFormsSignIn.aspx.csのファイルを書き換えます。
 

すると、違和感の無い画面表示になり、ユーザーIDの初期値に前の画面で入力した値(HTTPヘッダ中のGETパラメータのusernameに渡されている値から取得しています)が入力されるようになります。

セキュリティの問題で、メールアドレスのドメイン名とUPNドメイン名を分けている場合などは、UsernameExampleの値を実際の名前では無く「username@example.com」などに汎用化しても良いかもですね。

Office365ライトニングトーク#2

先ほど、Office365ライトニングトーク第2回 で発表が完了しました。

発表したスライドは以下で共有しています。
http://www.slideshare.net/genkiw/office365-customize

他にもこんなことできないのとか、こうやったほうが便利だよとか有ったらみんなで共有していければと思います。

ADFSの自己証明書の期間延長

前回の投稿について、識者からいくつかコメントを頂きました。

  • 自己証明書ではなく、サービス通信証明書をトークン暗号化・トークン署名でも使ったらどうか?

確かに、ADFS関連のトレーニングではこちらの手順についても教えて頂いた記憶がございます。更新時は手動で更新になってしまいますが、全部一緒のタイミングであれば更新し忘れも無いですし、証明書更新のためシステム少し止めますよと言っても理解が得られそうです。

何より面倒くさければ最初から3年間有効な証明書とか買ってしまえば済むことですしね。

 

  • Office365なのに350日で利用出来なくなるのが問題なのだから、名前をOffice350にすれば良いのでは?

なるほどwww

 

というわけで、私の方でも少し対処を考えてみました。そもそも、ADFSの自己証明書の

  1. 期間は365日
  2. 切れる20日前に新しい自己証明書を発行(セカンダリに)
  3. 2から5日経ったらセカンダリの証明書をプライマリに昇格させる

という値が問題になっているということです。こういった物は、きっとパラメーターになっていて、PowerShellなら設定出来るでしょうということで、PowerShellでGet-ADFSPropertiesコマンドを実行してみます。

すると、それっぽいパラメータがあります。

  • CertificateDuration : 365
  • CertificateGenerationThreshold : 20
  • CertificatePromotionThreshold : 5

と言うわけで、証明書の期間を10年にして新しい自己証明書を発行してみます。

Set-AdfsProperties -CertificateDuration 3650
Update-ADFSCertificate -Urgent
Update-MsolFederatedDomain -DomainName contoso.com

これで、ADFSの自己証明書が10年に更新されました。ちなみに、通常はUpdate-ADFSCertificateはUrgentオプションを付けずに実行し、セカンダリの証明書として作成をします。プライマリに昇格するまでの5日間の間に、Update-MsolFederatedDomainコマンドにより新しい証明書をOffice365に転送します。

Office365側にも無事に転送され、10年として認識されていますようです。

と言うわけで、後で忘れそうな方は最初から延長してからADFS環境を組むのも良いかもしれません。

ADFSインストールから350日でSSO不可

MicrosoftスクリプトセンターでMicrosoft Office 365 Federation Metadata Update Automation Installation Toolというスクリプトが公開されました。

こちらですが、やっていることは単純でインストール時に入力した資格情報を元に、毎日0時にUpdate-MsolFederationDomainを実行してくれるという物です。

これの何が嬉しいかと言いますと、Office365のADFSではトークン署名証明書はデフォルトで有効期限が1年間の自己証明書として発行されます。また、自動ロールオーバーの機能によって有効期限の20日前、すなわちインストール時から345日後に新しい証明書が発行され、その5日後(インストールから350日後)に差し替えられます。

この差し替えられた証明書ですが、自動ではOffie365側には登録されないため、インストール後345~350日後の間にOffice365に情報を伝送させておく必要があるということで、これを解決するためにとりあえず毎日情報の更新をOffice365に対して行っておこうというツールです。

Microsoft Office 365 Federation Metadata Update Automation Installation Tool
http://gallery.technet.microsoft.com/scriptcenter/Office-365-Federation-27410bdc

インストールは簡単で、ADFSサーバ上で実行し、Office365の管理者IDの資格情報とローカルサーバ上の資格情報を入力すれば、自動的にC:Office365-Scripts配下にMicrosoft-Office365-Update-MSOLFederatedDomain-CONTOSO.COM.ps1(ドメイン名入り)というps1ファイルと、同じ名前のDailyタスク(毎日0:00起動)を作成してくれます。

私の環境では、ADFS2.0のRU1が出た際に一度再セットアップとUpdate-MsolFederatedDomainを掛けてしまったので、まだこう言った事象には出くわしたことが無いのですが、気づくとこういった物は期限になっていたりするので、今のうちにやっておきましょうという感じですね。

【参考】
シングル サインオンを確認および管理する
トークン署名証明書の有効期限が毎年切れる:既定では、AD FS 2.0 は、毎年有効期限の切れる 20 日前に、自己署名証明書のトークン署名証明書を新たに生成します。証明書のロールオーバー、すなわち証明書の有効期限が近づいたときに新しい証明書を生成してプライマリ証明書に昇格させる機能は、AD FS 2.0 によって生成された自己署名証明書にのみ適用されます。
AD FS 2.0 が新しいトークン署名証明書を生成するタイミングを構成できます。証明書のロールオーバーの時期が近づくと、既存の証明書と名前が同じで秘密キーと拇印が異なる新しい証明書が AD FS 2.0 によって生成されます。新しい証明書は生成後、セカンダリ証明書として 5 日間経過した後プライマリ証明書に昇格します。既定で 5 日間に設定されていますが、変更が可能です。 

ひと目でわかるADFS

日経BPさんより、先週「ひと目でわかるADFS2.0 & Office365連携」が発売されました。

発表時に「ひと目でわかるADFS(仮)」というタイトルだったので、一部で「本当か!?」とささやかれておりましたが、無事発売となったようなので早速購入して来ました。

ページ数は220Pで、1章から6章までの章立てです。

  1. 本書で学習する前に
  2. 認証と認可(承認)
  3. AD FS2.0の基本
  4. AD FS2.0のインストールと構成
  5. ローカルActive DirectoryとOffice365の連携
  6. クライアントアクセスポリシー

内容のレベルについてはOffice365やADFSのトレーニング+ハンズオンをくっつけたような感じで、トラブルシュートや運用系の部分は若干薄めですが、ADFSのさわりを扱うにはとてもよくまとまっている良い書籍かと思います。

ただ、良くも悪くも、各章ごとに知っておくべき事を必要十分な情報量を掲載しています。ADFSを触ったことのある人ならよく分かると思うのですが、認証/認可、RP/CPとか証明書まわりとか、重い部分が2章~3章に重なっており、ここをいかに華麗にマスター…さもなくばスルーするかがひと目で分かるポイントかと思います。

Office365でADFSをとりあえず利用する上では、殆ど選択肢無しのウィザード形式で実装できます。敢えて、4章から読み始めて仕組みでは無く効能・手順から入るようにするのも良いかもしれません。

Office365まとめ・公開始めます

個々の記事とは別に、まとめ記事として上の固定ページの方に「Office365まとめ」の公開を始めます。とはいっても、結構前から上に出てましたけどね;;;

Office365まとめ
https://blog.o365mvp.com/o365/

元は自分の作業のメモ書き程度に利用してましたが、これからは意図してちゃんとこちらのページの方も一緒に更新していきたいと思います。

うまく纏めていって、TIPS集にしていければと思います。

期間限定訴訟ホールドをPowerShellから設定

期間限定訴訟ホールドとは、単一アイテムの回復期限(各メールボックスの削除済みアイテムを復活できる期間:デフォルト14日)を延長することにより、特定のメールボックスにおいて一定期間情報を保全する機能です。

こちらの期限の延長は、30日までであれば通常のExchange Onlineプラン1などでも実施することはできたのですが、利用しようと思うと従来は都度サービスリクエスト(SR)を上げて設定して貰う必要があり、かつメールボックス単位で設定を入れる必要があるので、全メールボックスで期間を30日にするなどの処理は非常に大変でした。

今年に入ってからのサービスの改善で、30日以内の変更であれば、この処理をPowerShellから管理者が実行できるようになりました。コマンドは、PowerShellでExchange Onlineに接続した後に、

 Set-Mailbox -Identity [対象] -RetainDeletedItemsFor [保存期間]

です。例によって、-Identityは省略不可です。また、保存期間は DD.HH:MM:SS形式(例えば30日は30.00:00:00)ですが、省略してDDのみ(30とだけ入力すれば30日と解釈)でも可能です。また、この-RetainDeletedItemsForはTab補完ができませんが、パラメーターとしては存在するので頑張って入力しましょう。

また、31日以上にする場合は、Exchange Onlineのプラン2以上のライセンスが必要になり、かつコマンドからも設定はできませんので、従来通りSRを上げて対応しましょう。

こちらは、特に追加費用無く設定することができますので、標準でデプロイする際に設定しても損は無いかもしれません。

Office365 ライトニングトーク第2回

5月に引き続き、7/6に品川のマイクロソフト本社で第2回のOffice365ライトニングトークが開催されます。

Office365 ライトニングトーク第2回 「俺にOffice365についてしゃべらせろ!」

前回はアクセス制御の部分の話をしましたが、今回はもう少しOffice365の全般的な話をしたいと思っています。

普段からちょこちょこと「Office365まとめ」にメモを書いているのですが、Office365のカスタマイズ(設定変更)について簡単に話をしようかなと思います。

ワールドワイドで見ると、結構日本ではOffice365のデフォルト設定がうまく現在の運用やポリシーに適合しないことがあるので、その辺のところを喋れればなと思います。

ご都合よろしければご来場いただけると幸いです。

ディレクトリ同期のオブジェクト上限値

Office365のディレクトリ同期ツールを利用すると、社内のActiveDirectoryの以下のオブジェクトをOffice365に(使用するしないに関わらず)同期してくれます。

こちらのMicrosoftのドキュメントをチェックすると、この同期のオブジェクト数には上限値が定められていて、それ以上はSRを上げて上限値を引き上げないといけないとあります。この閾値は20000と定められており、こちらはオンプレミスのAD上で「展開準備ツール(Deployment Rediness Tool)」を実行することにより、おおよその数値を知ることが可能です。

カウント対象となるのは以下のオブジェクトです。

  • ユーザー
  • グループ(配布グループ、セキュリティグループ)
  • 外部連絡先
【参考】ディレクトリ同期を準備する
http://onlinehelp.microsoft.com/ja-jp/Office365-enterprises/ff652544.aspx
社内ドメインのオブジェクトの合計数が 20,000 個を超えると、ディレクトリ同期をアクティブ化する前に Office 365 サポートに連絡する必要があります。

殆どのオブジェクトがオンプレミスで同期して利用している場合は問題にならないのですが、例えばExchangeの配布グループはOffice365側で作成(※セルフサービス型で利用したい為)など、ディレクトリ同期するオブジェクトの他に相当数のオブジェクトがクラウドID(非同期オブジェクト)で存在する場合、20000には達していないのに、以下の様なアラートが発生する場合があります。

Unable to add this user because the total number of allowed objects has already been reached.
 + FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.Quota  
ExceededExcption.Microsoft.Online.ADministration.Automation.NewUser

試しに、数十個のオブジェクトだけディレクトリ同期した環境にひたすらオブジェクト(ユーザー)を作っていくと、確かに20000弱(今回の場合は19960個目)のオブジェクトで上記のエラーが出ます。

また、これが発生するとディレクトリ同期ツールからオンプレミスで新規でできたオブジェクトを追加することはできません。どうやら、20000というクォータは同期したオブジェクトの数ではなく、Office365上で作成したオブジェクトも含む数値のようです。

参考までに、これは一時的にではありますが突破することは可能です。

Exchange OnlineからGUIやCSV経由でユーザーを新規作成し、後からOffice365ポータルに同期してサブスクリプション割り当てなどという事を行うことができるのですが、こちらは上記の影響は受けないので作成→ポータルに同期が可能です。

新規で作成したオンプレミスのオブジェクトと同じメールアドレスを持たせて作成すれば、ソフトマッチで同期オブジェクトとすることも可能です。

皆様におかれましてはこうならないように、大規模環境の場合は、上記条件を考慮の上計画的にオブジェクト数を監視して、クォータ上限の引き上げを行って頂ければと思います。