某ブログのECCとRSAのハイブリッド設定を試してみる
このツイートがリツイートで流れてきて、ここを見たんだが、なんだか書いていることが変な気がする。
とはいうもののここでいうハイブリッドな設定は2.2系でしか試したことがないので2.4系の場合なんともなのだが、取り敢えず、ドキュメントを見る限り、記載のディレクティブの説明は変わっていない模様。まあ、ドキュメントが実装に追いついていない場合もあるだろうし、兎も角、百聞は一試しに如かずということで試してみた。結論から言えば
ちなみに、お試し環境は
で、結果ですが、
となっている場合、
の両方が
こういう場合、
ただ、
いずれにせよ、このあたりがECC対応になっているのってシマンテック絡んだ話ですよね。まあ、ここはnginxなので記事の設定ではないのでしょうけど、同じ会社のサイトのKumonos(クモノス)なんかは間違った設定になっておらず、ちゃんと設定されているんですよね。
これって、一体何の罠?
とはいうもののここでいうハイブリッドな設定は2.2系でしか試したことがないので2.4系の場合なんともなのだが、取り敢えず、ドキュメントを見る限り、記載のディレクティブの説明は変わっていない模様。まあ、ドキュメントが実装に追いついていない場合もあるだろうし、兎も角、百聞は一試しに如かずということで試してみた。結論から言えば
SSLCertificateChainFile
を2行以上記載する意味はない。ちなみに、お試し環境は
FreeBSD 9.1-RELEASE-p7
に、ports
からApache
は2.4.6
を、OpenSSL
は1.0.1e
を入れて試してみました。証明書は自前でルートCAと中間CAを作ってサーバー証明書を発行した次第です。具体的にいえば、CA.pl
とopenssl.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
に複数の中間証明書を数珠つなぎで記載してやっても、それがそのまま繋がって送付されてくるのでブラウザ側でチェーンをつなげてくれる場合が多いかと思いますが、サーバー証明書に対応するチェーンの分だけ選択して送付したいならば、SSLCACertificatePath
かSSLCACertificateFile
に中間証明書を指定してやればよいです。SSLCACertificatePath
の場合、指定したディレクトリに各中間証明書を各々独立した拡張子.pem
なファイル記載して、c_rehash
スクリプトでも実行してやってハッシュ値からのリンクを貼ってやればよいですし、SSLCACertificateFile
の場合、中間証明書を数珠つなぎに書いてやればよいです。ただ、
SSLCACertificatePath
もSSLCACertificateFile
もクライアント認証する際に使われるものですので、クライアント認証する際はそこに記載するべき証明書も変わってくる可能性がありますので、そのあたりは問題が生じるかもしれません。また、チェーンの繋がったルート証明書もそこに配置するとServer Certificate
でそれも繋げて送付してきますので、無駄といえば無駄ですね。いずれにせよ、このあたりがECC対応になっているのってシマンテック絡んだ話ですよね。まあ、ここはnginxなので記事の設定ではないのでしょうけど、同じ会社のサイトのKumonos(クモノス)なんかは間違った設定になっておらず、ちゃんと設定されているんですよね。
これって、一体何の罠?
コメント 0