質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

1回答

3380閲覧

ApacheのSSLCipherSuiteとSSLRenegBufferSizeの関係が知りたい

kisanuki

総合スコア6

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

0クリップ

投稿2018/09/04 04:18

編集2018/09/07 12:23

質問したいこと

アプリケーションサーバに画像をpostするとSSL終端をしているApacheでサイズ超過のエラーが発生した。
暫定的な回避方法は見つかったが、SSLCipherSuiteとSSLRenegBufferSizeの関係がよく分からないためSSLCipherSuiteとSSLRenegBufferSizeにどのような関連があるのか教えて頂きたいです。

構成

Client →(https) Apache(SSL終端) →(http) ApplicationServer

発生している問題・エラーメッセージ

画像をアプリケーションサーバにポストするとエラーが発生しアップロードに失敗する。

[error] [client 10.82.12.18] request body exceeds maximum size (131072) for SSL buffer, referer: https://sv.hoge.com/ [error] [client 10.82.12.18] could not buffer message body to allow SSL renegotiation to proceed, referer: https://sv.hoge.com/

試したこと

・アプリケーションサーバに直接アクセス(http)し画像をアップロードすると成功する。

・Apache経由でもSSLCipherSuiteを以下に設定すればエラー発生せずアップロードが成功する。
SSLCipherSuite HIGH:!MD5:!ADH

・以下のSSLCipherSuiteのときだけ事象が発生しアップロードに失敗する。
SSLCipherSuite HIGH:!MD5:!ADH:!DES-CBC3-SHA:!ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA

・エラーメッセージでググるとSSLRenegBufferSize の上限を大きくしろ、という記事が出てくるがReverseProxyとして使ってるだけなので関係なさそう
(SSLRenegBufferSizeはdirectory に設定するDirectiveで下記のとおりReverseProxyの場合、設定箇所がない)

・オンプレ環境では本設定で問題なかったが、AWS環境だと本事象が発生するようになった。

補足情報(Apacheバージョン、該当箇所のconfig)

root:~$ httpd -V Server version: Apache/2.2.15 (Unix) Server built: Sep 19 2017 11:18:50 Server's Module Magic Number: 20051115:25 Server loaded: APR 1.3.9, APR-Util 1.3.9 Compiled using: APR 1.3.9, APR-Util 1.3.9 Architecture: 64-bit Server MPM: Prefork
root:~$ cat vhost.conf .. 一部省略 .. <VirtualHost *:443> ServerName sv.hoge.com:443 SSLEngine on SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On SSLCipherSuite HIGH:!MD5:!ADH # ←エラーでない SSLCipherSuite HIGH:!MD5:!ADH:!DES-CBC3-SHA:!ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA # アップロードエラー SSLCertificateFile /etc/pki/sv.crt SSLCertificateKeyFile /etc/pki/sv.key SSLCertificateChainFile /etc/pki/CA.crt # Direcotry / にSSLRenegBufferSize をセットしてみるが事象変わらず # <Directory /> # SSLRenegBufferSize 100000000 # </Directory> # cipherlogを追加 CustomLog logs/ssl_cipher.log "%t %h %{SSL_PROTOCOL}e %{SSL_CIPHER}e %{SSL_SESSION_ID}e %{SSL_SESSION_RESUMED}e RequestHeader edit Referer https://sv.hoge.com/ / ProxyPass / http://appsv:8080/ ProxyPassReverse / http://appsv:8080/ </VirtualHost>

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

SSLRenegBufferSize 制限にひっかかっているということは、アップロード前と SSLCipherSuite が変わって renegotiation しているということなのかもしれません。
ただ、設定を見る限り、SNI で VirtualHost を複数設置したり、Directory ごとに Cipher を変えたり、クライアント証明書認証を使っているわけではないので、なぜ renegotiation しているのかはわかりません。

LogLevel debug にすると、/var/log/httpd/ssl_error_log に renegotiation が記録されますので、それぞれの SSLCipherSuite で renegotiation するかしないかや、その他のログを調べると、何かわかるかもしれません。

(SSLRenegBufferSizeはdirectory に設定するDirectiveで下記のとおりReverseProxyの場合、設定箇所がない)

<VirtualHost *:443> の中に DocumentRoot の <Directory> を新規に設定し、その中に SSLRenegBufferSize を設定するのだと思います。

投稿2018/09/05 15:17

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kisanuki

2018/09/07 12:27 編集

レスありがとうございます。 ご推察のとおり直前でrenegotiationしています (errorしか載せておらず失礼しました) 下記のとおりcurlでpostすると以下のログのみ記録されます。 `SSLCipherSuite`が変わった様子もなくこれ以上に細かい情報のでないのでApacheのソースを追うことにしました。 `curl -X POST -F file=@./image.jpg https://sv.hoge.com/content/create.html` ``` ==> ssl_error_log <== [Fri Sep 07 21:13:51 2018] [info] Initial (No.1) HTTPS request received for child 31 (server sv.hoge.com:443) [Fri Sep 07 21:13:51 2018] [debug] ssl_engine_kernel.c(423): [client xx.xx.xx.xx] Reconfigured cipher suite will force renegotiation [Fri Sep 07 21:13:51 2018] [error] [client xx.xx.xx.xx] request body exceeds maximum size (131072) for SSL buffer [Fri Sep 07 21:13:51 2018] [error] [client xx.xx.xx.xx] could not buffer message body to allow SSL renegotiation to proceed ==> ssl_access_log <== xx.xx.xx.xx - - [07/Sep/2018:21:13:51 +0900] "POST /content/create.html HTTP/1.1" 413 471 ==> ssl_request_log <== [07/Sep/2018:21:13:51 +0900] xx.xx.xx.xx TLSv1.2 DHE-RSA-AES256-GCM-SHA384 "POST /content/create.html HTTP/1.1" 471 ==> ssl_cipher.log <== [07/Sep/2018:21:13:51 +0900] xx.xx.xx.xx - - - - : ```
TaichiYanagiya

2018/09/08 09:36

curl で 1リクエストで renegotiation するのは変ですね。 他に 443 番ポートで VirtualHost があるのでしょうか?
kisanuki

2018/09/09 12:54

解決ではありませんがおおよそ起こっていたことがわかりました。 結論から言うと、全面にいるCLBがSSL終端していることで発生した可能性が高いです。 まず、質問欄記載の構成図にELBが抜けていました。 (要件がかわりELBもSSL終端するようになったことをすっかり忘れていました。) ■もっと詳し構成 browser <--(https)--> CLB[※] <--(HTTPS)--> Apache[※] →(http) ApplicationServer ※の箇所がSSL終端 雑な推測ですが、上記構成がゆえにCLBで一旦SSLが解かれ、CLBから後続のApacheにHTTPSを貼るときにrenegotiationが発生してしまう、といったオチだと思われます。 Apacheから自分自身にPostしたら事象は発生しませんでした。 CLBのログを見たいところですが、私の関与できる範囲の外になるため 中途半端な説明になることご了承ください。 「他に 443 番ポートで VirtualHost があるのでしょうか?」の一言でピンと来ました 感謝です。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問