エンジニアレポート

クライアント証明書とファイルアップロード

2018年12月10日

データスタジアムのエンジニア、池田です。
主に野球に関するサービスの開発・運用を担当しています。

クライアント証明書認証の利用

データスタジアムでは顧客のご要望に応じ、利用端末を限定する目的でクライアント証明書認証を利用することがあります。

アクセス元のIPアドレスで制限できる場合は、IPアドレス制限だけで済ますことも多いのですが、アクセス元が固定できない、モバイル機器でのアクセスが必要な場合にはクライアント証明書認証を使用します。

証明書がインストールされていない端末(ブラウザ)からのアクセスを拒否するという目的ですので、独自認証局(オレオレ認証局)を使うことが多いです。

(証明書自体の信用性や、安心感を購入するという形で、SSL証明書などを取り扱っている会社さんの認証局を使用したクライアント証明書を利用するという選択肢もありますが、そこそこな初期費用や、ライセンス数に応じた月ウン万円のランニングコストがかかるので、なかなか導入しようというお客様はいなかったりもします。。。)

アップロードできない!?

過去にクライアント証明書認証を実施しているサービスでファイルアップロード機能を実装した時に、アップロードができず、こんなエラーがでたことがありました。

002_error_image

「はて?これは?」と、初めて見るエラーでしたので、Apacheのエラーコードも413と初見でした。Google先生に相談してみると、 Apacheのドキュメント にもありますが、SSLRenegBufferSizeという値のデフォルトが131072byteとなっており、128KBまでしかアップロードできない設定になっているとのこと。

「じゃあ、これをデカい数字にしとけばよいのね」と、PHPの以下2つの設定を考慮し、ほぼ同じ値に。

  • post_max_size
  • upload_max_filesize

「これで解決か?」と思い、ファイルアップロードしてみると、1回テストでアップロードはできたものの、その他のフォーム系がほとんど動かなくなるという悪夢が。

当時は、状況的に時間をかけられない感じだったので、急ぎ、ファイルアップロードの部分については、クライアント証明書認証の対象から除外するということで、逃げておりました。

実際のところどうなってるの?

今回この記事を書くにあたり、SSLRenegBufferSizeを設定するということだけでサクっと終わらすということも考えたのですが、せっかくなので、簡単な環境を作って、幾つか試してみました。

試した環境①
OS:CentOS6.5
Webサーバ:Apache2.2
言語:PHP5.6

実験結果は以下のようになりました。

002_results

単純に、SSLRenegBufferSizeの設定を適正な値にさえすれば、よいのでは?と予想していたのですが、今回の設定の差分だけでみると、メモリの使い方に違いがあったようです。

クライアント証明書を設定したNo.7以降では、topコマンドや、dstatコマンドで状況を見ていると、メモリをどんどん消費していきます。そして、ディスクへの書き込みがアップロード完了まで発生しないという状況になっていました。

そのため、大きいファイルをアップロードしようとすると、マシンスペックに応じてアップロードに限界があるようです。No.10,13でメモリを使い切り、httpのプロセスがkillされるという状況が発生し、アップロード失敗しました。

マシンのメモリを4GBまで大きくして初めて1.8GBのファイルのアップロードに成功するという形となり、2.8GBでRequest Entitiy Too Largeのエラーを出すことができました。

もう少し調べれば、メモリの使い方や、ディスクへの書き込みタイミングなど設定ができるのかもしれませんが、今回はここまでということで。どこかで続報が書ければ追記したいと思います。

今回わかったこと

  • クライアント証明書認証を設定をした上で、ファイルアップロード機能を実装する場合はSSLRenegBufferSizeの設定が必要
  • メモリの使い方、ディスクへのフラッシュタイミングが違う
  • マシンスペックあげればある程度いける。

このようなインフラ、ミドルウェアの設定に詳しい方をデータスタジアムでは求めております。そこまで詳しくなくても、一緒に話ししながらやっていける方もOKなので、是非一緒に解決していきましょう!

エンジニア募集中!

データスタジアムでは一緒に働いていただけるエンジニアを募集しています。野球、サッカー、バスケなどスポーツが好きな方であれば、とても面白い仕事ができる会社です。興味を持たれた方はぜひこちらをご覧ください。

エンジニアトップ エンジニアインタビュー エンジニアレポート

  • 採用情報
  • おしらせ
  • 掲載事例

ページトップヘ