SSLのWebサーバにクライアント証明書をもったクライアントが接続できなくなった、そんなとき

動的IPでサーバ運用したい、そんなときに使えるのがDDNS。
DDNSの更新方法にはいろいろあるんでしょうけど、うちとこではこうしてます。

1)
うちのサーバで付けたいホスト名を書き込んだクライアント証明書を作り、相手に渡します。
2)
動的IPのマシンにクロンを仕掛けておいて、クライアント証明書つきで所定のURLにアクセスするようにします。w3mを使えば、1行のコマンドで簡単に実現できます。
3)
うちとこのサーバでは、クライアント証明書に書き込んだホスト名に、アクセスしてきたクライアントのREMOTE_ADDRを対応付けて、DDNSを更新します。

もう数年運用してますがあるとき3)が動かなくなりました。そんなとき。

エラーログを見てみます。


[Wed Jan 19 00:02:42 2011] [error] Re-negotiation request failed
[Wed Jan 19 00:02:42 2011] [error] SSL Library Error: 336068931 error:14080143:SSL routines:SSL3_ACCEPT:unsafe legacy renegotiation disabled

グーグル先生に聞いて、2~3サイトめぐって、腰を据えて中を見るとわかります。ただ、割合に見つけにくいと感じたので、わたしブログしちゃおうかなと思いました。

結論は、クライアント側のSSLライブラリと、サーバ側のSSLライブラリのバージョンミスマッチです。
サーバが新しすぎ、、、でもないですね。クライアントを更新した方がベターです。
かといって、こんな夜中に遠隔地にあるクライアントマシンのバージョンアップなんかできません。
取り急ぎ、レガシー対策用のオプションをApacheに追加してしのぎます。

SSLInsecureRenegotiation on

を入れてApacheをリロード。これで解決!

ちなみに入れる場所ですが SSLCertificateKeyFile と並べておけば間違いないです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>