So-net無料ブログ作成
メッセージを送る

某ブログのECCとRSAのハイブリッド設定を試してみる

このツイートがリツイートで流れてきて、ここを見たんだが、なんだか書いていることが変な気がする。

とはいうもののここでいうハイブリッドな設定は2.2系でしか試したことがないので2.4系の場合なんともなのだが、取り敢えず、ドキュメントを見る限り、記載のディレクティブの説明は変わっていない模様。まあ、ドキュメントが実装に追いついていない場合もあるだろうし、兎も角、百聞は一試しに如かずということで試してみた。結論から言えばSSLCertificateChainFileを2行以上記載する意味はない。

ちなみに、お試し環境はFreeBSD 9.1-RELEASE-p7に、portsからApache2.4.6を、OpenSSL1.0.1eを入れて試してみました。証明書は自前でルートCAと中間CAを作ってサーバー証明書を発行した次第です。具体的にいえば、CA.plopenssl.cnfをごにょごにょ弄ってECCとRSAの独立したチェーンを作成しました。確認は、s_client(1)-cipher付けて返される証明書を調整して-showcertsで送付されてくる証明書を見たりして確認してます。

で、結果ですが、SSLCertificateChainFileを2行以上書くと、一番最後に書いたものだけが有効になるようです。まあ、何か他のモジュール入れたりパッチ当てたりしたら複数行書けるのかもしれないですけど、取り敢えず、上記お試し環境では最後の行しか使われませんでした。つまり、ここのように

131: SSLCertificateChainFile "/usr/local/ssl/ecc_ca.crt"
132: SSLCertificateChainFile "/usr/local/ssl/rsa_ca.crt"


となっている場合、/usr/local/ssl/rsa_ca.crtのものしか使われないということです。Server Certificateで送付されてくる証明書は、SSLCertificateFileに指定したものに続けてSSLCertificateChainFileに指定したものになりますが、

108: SSLCertificateFile "/usr/local/ssl/ecc_ssl.crt"
109: SSLCertificateFile "/usr/local/ssl/rsa_ssl.crt"


の両方が/usr/local/ssl/rsa_ca.crtに対応する秘密鍵で署名されているなら問題ないですが、異なる場合、サーバー側がハンドシェイクによって選択されるアルゴリズムによってはServer Certificateで送付されてくる証明書のチェーンが繋がらないことになります。ただ、ブラウザ側で中間証明書まで含めて保持している場合は問題ないですが、それを前提にするなら中間証明書の設定なんて要らないですね。

こういう場合、SSLCertificateChainFileに複数の中間証明書を数珠つなぎで記載してやっても、それがそのまま繋がって送付されてくるのでブラウザ側でチェーンをつなげてくれる場合が多いかと思いますが、サーバー証明書に対応するチェーンの分だけ選択して送付したいならば、SSLCACertificatePathSSLCACertificateFileに中間証明書を指定してやればよいです。

SSLCACertificatePathの場合、指定したディレクトリに各中間証明書を各々独立した拡張子.pemなファイル記載して、c_rehashスクリプトでも実行してやってハッシュ値からのリンクを貼ってやればよいですし、SSLCACertificateFileの場合、中間証明書を数珠つなぎに書いてやればよいです。

ただ、SSLCACertificatePathSSLCACertificateFileもクライアント認証する際に使われるものですので、クライアント認証する際はそこに記載するべき証明書も変わってくる可能性がありますので、そのあたりは問題が生じるかもしれません。また、チェーンの繋がったルート証明書もそこに配置するとServer Certificateでそれも繋げて送付してきますので、無駄といえば無駄ですね。

いずれにせよ、このあたりがECC対応になっているのってシマンテック絡んだ話ですよね。まあ、ここはnginxなので記事の設定ではないのでしょうけど、同じ会社のサイトのKumonos(クモノス)なんかは間違った設定になっておらず、ちゃんと設定されているんですよね。

これって、一体何の罠?

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。