proxyサーバへの接続にちょっと強い認証を行いたくていろいろ調べてる。
squidでも、cacert,capath,verifyなどあるみたいだが、うまくいかない。
古いバージョンだと、何かそのdirectiveもあったようだが。。。
claudeあたりに聞いてみると、squidそのものを推奨せず、
stunnel + squid,nginx とか、haproxy,nginx,apache のproxy機能をすすめてきたりしているが、、、。
とりあえず、 軽そうな socat で受けて、後ろの squidに流せばいいかと思って、テスト。
#flags="-d0 OPENSSL-LISTEN:8888,reuseaddr,fork,cafile=(client認証のためのオレオレ証明書のCAのpem),cert=(サーバーとして振る舞うため、その証明書のcert),key=(サーバー証明書の秘密鍵) TCP4:127 .0.0.1:3128"として、localhost で待っている squid(port 3128) にリレーする設定とした。
proxyのセッションは複数張られるので、forkしてどんどん受けつけるようにした。
ところが、この、ブラウザからproxyとして接続してくるときに、クライアント証明書(PCにはインストール済み)で認証しているのだが、windows11 では接続時に自動的には渡してくれず、Edge,Chromeだと新たなセッションを張る度に認証ダイアログが出る始末。Firefoxはどうも自動的に渡しているようで、こちらは出なかった。
TLSのネゴシエーションのreusumption問題?らしく、過去のTLS接続時のデータをキャッシュして使うのが王道らしいが、socat はそこまでのことはやってくれないらしい。fork するだけならその通りだな。。。
TSLネゴシエーションのデータを、親プロセスで管理して、子供のセッションの認証時に共有してくれるタイプじゃないとつらそう。
結論としてはsocatをweb browser のプロキシーのフロントに置くのはおすすめしない、ですかね。
次は軽そうな stunnelにトライしてみる。
コメントする