AEM で SAML 関連の問題をトラブルシューティングする方法

AEM で SAML 関連の問題をトラブルシューティングする方法

目的

AEM で SAML 関連の問題をどのように解決することができますか? トラブルシューティングにはどのような情報が必要ですか?

手順

無限ループ問題:

  • ds:signature が SAML アサーションに含まれているかどうかを確認してください。含まれていない場合、署名は IdP 側でおこなわれます。署名済みアサーションのチェックボックスをオンにしてください。
  • SAML レスポンスで nameId 形式を確認してください。形式は、SAML 設定で設定されている nameId ポリシー形式と正確に一致する必要があります。
  • SAML レスポンスで SAML AudienceRestriction を確認してください。このタグの値は、SAML 設定のエンティティ ID と完全に一致する必要があります。
  • saml2:conditions(NotBefore と NotOnOrAfter)で、サーバーが NTP サーバーと同期しているかどうかを確認してください。同期していない場合、ntpd を使用して、システム時刻が同期するようにします(ntpdate -s pool.ntp.org)。テストするには、クロックトレランスを -1 に変更してください。これにより、クロック周波数差が無視されます。
  • IdP 側でアサーションが署名されているかどうかを確認してください。署名されていない場合、IdP チームに、レスポンスが署名されていること、および SAML 仕様に従ってアサーションに署名する必要があることを連絡してください。 
  • IdP からのアサーションが暗号化されているかどうかを、SAML Tracer の出力で確認してください。暗号化されている場合は、SAML 認証ハンドラーの設定で、暗号化チェックボックスをオンにする必要があります。

SAML 証明書の形式が正しいか確認する:

  • SAML レスポンスから署名を取得し、証明書を修正します(65 行目の後に Enter キーを押すなど)。
  • この証明書を AEM トラストストアにインストールし、証明書の詳細を IdP と照合することができます。

暗号化:

  • 最初は必ず暗号化なしで SAML 設定をおこなってください。設定が完了してから、暗号化を有効にしてください。この方法なら、問題を容易にデバッグすることができます。

Dispatcher:

  • SAML ログインリクエストがフィルターセクションで許可されているかどうかを確認してください。許可されていない場合は、*/saml_login への POST リクエストを許可するように /filter セクションを更新してください。

    /0100 { /type "allow" /method "POST" /url "*/saml_login" }
  • httpd.conf 内の Web サーバーレベルで Mod ヘッダー(mod_header)が変更されていることを確認してください。以下の形式になっているはずです。
    <<<<<< Header always edit Set-Cookie (.*) "$1; HTTPOnly; Secure" >>>>>

無効なアサーション:

com.adobe.granite.auth.saml.model.Assertion Invalid Assertion: Signature invalid.
com.adobe.granite.auth.saml.SamlAuthenticationHandler Private key of SP not provided: Cannot sign Authn request
  • トラストストアに保管されている証明書に問題がある可能性があります。その場合の解決策は、idp_cert を削除して新しく再アップロードし、使用例を確認することです。
  • SAML レスポンスを暗号化していない場合は、「Private key of SP not provided: Cannot sign Authn request」というエラーを無視できます。

秘密鍵を取得できない:

[com.adobe.granite.security.user.internal.servlets.KeyStoreManagingServlet,1121, [javax.servlet.Servlet]] ServiceEvent REGISTERED
saml.log:27.01.2019 14:16:13.642 *ERROR* [qtp275633701-179] com.adobe.granite.auth.saml.SamlAuthenticationHandler KeyStore uninitialized. Cannot retrieve private key to decrypt assertions.
  • このエラーは、IdP がアサーションを暗号化したことにより、レスポンスを復号化するための秘密鍵がないことを意味します。レスポンスを暗号化したい場合は、AEM キーストアに有効な秘密鍵をアップロードする必要があります。

SAML 関連のサポートチケットの生成時に提供する情報:

  • SAML リクエスト
  • SAML レスポンス
  • SAML 設定
  • SAML のデバッグログ(com.adobe.granite.auth.saml)
  • Error.log
  • SAML リクエスト/レスポンスを抽出するための HAR[1] ファイル

[1]https://help.tenderapp.com/kb/troubleshooting-your-tender-site/generating-an-har-file

アドビのロゴ

アカウントにログイン