- PR -

SSLリバースプロキシ(squid)の中間証明書の設定についての質問

1
投稿者投稿内容
ズー
会議室デビュー日: 2004/12/24
投稿数: 4
投稿日時: 2007-02-02 17:53
初めましてズーと申します。

この会議室で掲示された下記サイトを参考にさせて頂き
http://squid.robata.org/ReverseProxy_top.html
http://squid.robata.org/ReverseProxy_ssl.html
SSLリバースプロキシを構築しました。

自作サーバー発行証明書でのSSLでの通信は上手く行きました。
次に公式な認証局からのCAにて運用しようとしましたが、
その際中間CA証明書のインストールが必要と判明しました。

squid.confにはcert=とkey=の指定先しかなくそれらしき設定記述が他にみあたらず、
いろいろと検索したのですが情報を得ることができませんでした。
squidでの中間証明書の設定(インストール)はどこにすればよいのでしょうか?

Squidの設定やヒントだけでもご指示いただけると幸いです。
小生、LinuxでのSSL作業は初めてでもあり、まだ間もないため的外れな
質問をしているかもしれませんが、何とぞよろしくお願いいたします。


[ メッセージ編集済み 編集者: ズー 編集日時 2007-02-02 17:54 ]
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2007-02-03 15:17
引用:

ズーさんの書き込み (2007-02-02 17:53) より:

自作サーバー発行証明書でのSSLでの通信は上手く行きました。
次に公式な認証局からのCAにて運用しようとしましたが、
その際中間CA証明書のインストールが必要と判明しました。




結論から言えば中間証明書はIEに設定します。SSLサーバの証明書を
確認するのは、あくまでSSLクライアント側です。

つーことで、Linuxとは関係なかったりします。

http://bb.watch.impress.co.jp/cda/bbword/8158.html

の通り、サーバから公開鍵証明書を送りますが
その公開鍵証明書しか設定できません。だからsquidの設定には証明書と
秘密鍵しか設定しようがありません。

信頼するルート証明期間->中間認証局->SSLサーバ証明書

の関係になってるから中間認証局はどうするのだろうと思ったのでしょうけど。
SSLサーバの証明書をチェックするのは、SSLクライアント、つまりブラウザ(IE)
です。

angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-03 15:35
引用:
加納正和さんの書き込み (2007-02-03 15:17) より:
結論から言えば中間証明書はIEに設定します。SSLサーバの証明書を
確認するのは、あくまでSSLクライアント側です。
つーことで、Linuxとは関係なかったりします。


そいつはダウトです。
中間証明書は、SSLサーバ側で持っておくものです。
例えば、ベリサイングローバルIDは、中間証明書が必要ですが、このように説明されています。
Q&A 中間認証局の証明書はなぜ必要なのでしょうかより
引用:
中間認証局の証明書がサーバ側に設定されていないと正しい検証ができずに、無効な証明書と認識されます。


Apache2以降であれば、mod_sslのSSLCertificateChainFileディレクティブで設定を行いますが、squidの資料では、同等の設定項目が見当たりません。
なので、squid では設定のしようがないのか…と思っていますが、私は squid には詳しくないため明言はできません。

最悪 Apache にするか、中間認証局証明書の要らない証明書を使うか…も考えては如何でしょう。

[ メッセージ編集済み 編集者: angel 編集日時 2007-02-03 15:39 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-03 16:23
補足です。
まず、選択肢として、Apache 以外に Pound もありましたね…、というのもありますが、
squid での中間証明書について、このような情報がありました。
squid-users-MLのChain SSL Cert filesより、
引用:
The SSL update patch for Squid-2.5 adds certificate chain support. With
this patch just add the CA cert to your domain cert file after the domain
cert.


ということで、squid2.5 用にはパッチがあるそうです。
この情報は2005年5月のものなので、今はメインストリームにも取り入れられているのか…と思いきや、バージョン3のマニュアルでも、それらしき項目が見つからないですね…。英語なので読みきれていないのかもしれませんが。
以上、ご参考まで。

※追記:Squid SSL "accelerator" supportのページによれば、既にSSLパッチで証明書チェインの機能はサポートし、squid 3 では標準になっているように見えますね…。でも、肝心の設定方法が読み取れない…。
…ん。“just add the CA cert to your domain cert file after the domain cert”というのは、サイト用証明書と中間証明書を連結したファイルを作って cert= で指定しろ、ということでしょうかね?

[ メッセージ編集済み 編集者: angel 編集日時 2007-02-03 16:58 ]
blunder
ベテラン
会議室デビュー日: 2003/09/11
投稿数: 65
投稿日時: 2007-02-03 19:27
引用:

angelさんの書き込み (2007-02-03 15:35) より:
中間証明書は、SSLサーバ側で持っておくものです。



こちらに一票。

TLSの仕様(RFC4346)でこう定義されています。
引用:

7.4.2. Server Certificate
... certificate_list
This is a sequence (chain) of X.509v3 certificates. The sender's
certificate must come first in the list. Each following
certificate must directly certify the one preceding it. Because
certificate validation requires that root keys be distributed
independently, the self-signed certificate that specifies the root
certificate authority may optionally be omitted from the chain,
under the assumption that the remote end must already possess it
in order to validate it in any case.



引用:

…ん。“just add the CA cert to your domain cert file after the domain cert”というのは、サイト用証明書と中間証明書を連結したファイルを作って cert= で指定しろ、ということでしょうかね?



そうだと思います。squidについてはわかりませんが、OpenSSLでは証明書はPEMフォー
マット(テキストファイル)なので、普通は個々の証明書を単純にアペンドしていくだけ
で証明書チェーンファイルが出来上がるはずです。Linuxだと普通catコマンドとアペン
ド用のリダイレクト(>>)を使うことが多いです。上のRFCの記述通り、サブジェクトの
証明書、中間証明書、ルート証明書(省略可)の順で並べておけばOKのはずです。

ただOpenSSLのAPIで、たしかファイルから最初の1個の証明書を読むやつと、証明書
チェーン全体を読むやつがあるので、squidがどっちをコールしているかで結果が異なり
そうな気がします。たぶんチェーン全体を読むほうをコールしてくれていると思いま
すが、squidの実装がどっちかによるでしょうね(できそうな気はします)。squidにつ
いて調べる余裕はないので、これで失礼します。
ズー
会議室デビュー日: 2004/12/24
投稿数: 4
投稿日時: 2007-02-03 19:45
加納さん、angelさん返答ありがとうございます。

頂いた情報をもとに、検証してみたいと思います。
結果はまたこの会議室で報告させて頂きます。

ありがとうございました。
ズー
会議室デビュー日: 2004/12/24
投稿数: 4
投稿日時: 2007-02-03 19:48
blunderさん返答ありがとうございます。

小生が返答した後にblunderさんの書き込みに気づきました。



ズー
会議室デビュー日: 2004/12/24
投稿数: 4
投稿日時: 2007-02-05 13:01
squidは2.6使用です。
ダメもとで、catコマンドでサーバー証明書−中間CA証明書の順で結合し、
cert= で指定しましたが上手くいきませんでした。
2.6へは証明書チェインの機能はサポートされていないみたいです。

squid3.0へバージョンアップするか、Apache2へ乗り換えるか検討したいと思います。

squid3.0でのSSLリバースプロキシをされている方いましたら、
設定方法またはヒントだけでもご指示いただけると幸いです。
よろしくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)