動的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 と並べておけば間違いないです。