Apache HTTP Server

Apache HTTP Server最新情報

NRIのOpenStandiaが提供するApache HTTP Server最新情報

Apache HTTP Serverの保守サポートサービスの内容はこちら Apache HTTP Serverの導入についてはこちら OSS全般の事例紹介はこちら

Apache HTTP Serverのサポート対応事例

stateタイムアウト時のエラー画面が正しく表示されない問題を解消

mod_auth_openidcでは、認証リクエストでmod_auth_openidcが発行するstateにタイムアウト(デフォルトは5分)を設定することができます。OPでの認証の際にログイン画面表示後にすぐにログインせずに放置したケースなどで、認証レスポンスで送信されきたstateが上記タイムアウト時間を超過することがあります。その場合、mod_auth_openidcはstateのタイムアウトを検知して、タイムアウトエラー画面を表示します。

ある顧客環境で、このstateタイムアウトエラーが発生した際に、エラー画面が適切に表示されないという問い合わせがあり、調査を行いました。

再現確認および調査

顧客環境では、ELB + Apache(2.4.43) + mod_auth_openidc(2.4.0.3)が利用されていました。Apacheとmod_auth_openidcだけを使ったシンプルな構成では問題が再現しなかったため、ブラウザやELBの経由の有無を変えながら調査を行っていたところ、ELB経由かつIEもしくはChromeを使っている場合に問題が再現することが特定できました。

ELB経由\ブラウザ
IE
Chrome
FireFox
ELB経由なし
再現せず
再現せず
再現せず
ELB経由あり
★再現★
★再現★
再現せず

なぜこのような動作の違いが生じているのか確認するため、ネットワークキャプチャを取得してレスポンスの中身を確認したところ、下記のようにエラー画面のレスポンスが想定外な状態になっていることが分かりました。

Apache HTTP Serverサポート対応事例

「本来のエラー画面レスポンス」の下に、本来は出力されるべきでない「重複したエラー画面レスポンス + Apacheのエラー画面レスポンス」が出力されてしまっており、Content-Lengthに一致したレスポンスサイズになっていないことが分かりました(Content-Lengthは、「本来のエラー画面レスポンス」のサイズだけになっています)。

リバースプロキシとしてApacheだけを使っている場合は、実際のレスポンスボディサイズとContent-Lengthが一致していない場合でも、何事もなかったように処理されてしまうため、顧客環境の問題は再現しませんでした。一方で、 ELBを経由している場合には、実際のレスポンスサイズとContent-Lengthが一致していないと、IEやChromeを使っている場合には、ブラウザが正しくレスポンスを受け取ることができなくなります(ブラウザ自身のエラー画面や真っ白い画面になる)。

まとめ

上記のような調査結果から、以下の4つの条件を満たした場合に、問題の事象が再現することが判明しました。

  • mod_auth_openidcが2.4.1以下である
  • OIDCStateTimeoutを超過してタイムアウトエラーが発生する
  • ロードバランサにELBを利用している
  • ブラウザとして、IEもしくはChromeを使用している

直接の原因は、stateタイムアウト発生時のエラー画面レスポンスが不正な状態で出力されていることです。

当該問題に関しては、mod_auth_openidcのコミュニティに報告を行い、バグとして修正されました。 実際のやりとりは以下の通りです。

mod_auth_openidc 2.4.2以降でこの問題は修正されています。

TOPに戻る

OpenStandiaに関する
資料請求・お問い合わせはこちら

  • 資料請求
  • お問い合わせ

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

  • OpenStandiaサポート対象オープンソース|50種類以上のOSSのサポートをご提供します。
  • 人気midPoint
  • 人気Keycloak
  • 注目MongoDB
  • ForgeRock AM(OpenAM)
  • ForgeRock IDM(OpenIDM)
  • MongoDB
  • Postfix
  • Apache HTTP Server
  • ZABBIX
  • PostgreSQL
  • Apache Struts
  • Apache Kafka
  • Apache Hadoop
  • Apache Spark
  • Spring Framework
  • Apache Tomcat
  • Solr
  • iBATIS
  • DRBD
  • MySQL
  • JBoss
  • Ruby on Rails
  • Jaspersoft
  • OpenLDAP
  • Apache log4j
  • Apache Subversion
  • ForgeRock DS(OpenDJ)
  • Pacemaker
  • Samba
  • Red Hat Enterprise Linux
  • Nginx
  • BIND
  • Dovecot
  • Pentaho
  • sendmail
  • Courier-IMAP
  • ForgeRock DS(OpenDJ)
  • Heartbeat
  • Hibernate
  • Hinemos
  • MyBatis
  • MySQL Cluster
  • Apache Axis2
  • Squid
  • OpenSSO