はじめに
sslインターセプトするhttpsプロキシを運用していて、不具合があった点が解消できましたので、記録します。
利用する環境は、前回構築した以下のものです。
squidでActiveDirectory連携とSSLインターセプトするProxyをdockerで手軽につくる
なにが起こったのか
slackアプリでメッセージが着信しない。
手動で「新しいメッセージを読み込む」をクリックしないと更新されない状態だった。
原因調査
情報収集
まずは公式の情報を確認する。
Slack の使用には、Slack のメッセージングサーバーとメンバーのアプリやブラウザー間での持続的な接続が必須となります。接続のために Slack はポート443経由の WebSocket を使用しています。
場合によっては、プロキシやファイアウォールがこの接続を妨害することがあります。Slack を使用しているユーザーが特定の場所から接続できない場合、または Slack 接続テスト で WebSocket の問題が見られる場合には、以下の方法でプロキシやファイアウォールの設定を変更して Slack への接続を常時オープンな状態に保つ必要があります。
接続テスト
ということで、接続テスト用のURL https://[WORKSPACE].slack.com/help/test
にアクセスしてみる。([WORKSPACE]はそれぞれのワークスペースに置き換えてください)
テスト結果は以下の通り、websocketがダメのようだ。
公式のワークアラウンドを確認する。
プロキシで SSL 暗号化解読を行っているかどうかを確認してください。暗号化解読を行っている場合は、プロキシで WebSocket をサポートするか、SSL 暗号化解読から *.slack-msgs.com、wss-primary.slack.com、wss-backup.slack.com、wss-mobile.slack.com のドメインを除外する必要があります。
解決方法
とのことなので、websoketを利用するサーバのリストを作成して、SSL_BUMPの除外をしてみることに。
対象のサーバは、slack公式に記載のあったものたち。
^wss-(backup|primary|mobile)\.slack\.com:443$
^([^/][^/]*\.)*slack-msgs\.com:443$
これを、 squid.conf
に喰わせる。
--------8<-----(snip)-----8<----------
# ここでwebsocket対象のリストを作成する
acl wslist url_regex -i "/etc/squid/wslist"
http_port 8081 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/certs/ssl_bump_ca_cert.pem key=/etc/squid/certs/ssl_bump_ca_privkey.pem
sslcrtd_program /usr/lib64/squid/security_file_certgen -s /var/local/squid/ssl_db -M 4MB
sslcrtd_children 5
# もともとは、以下のようにホワイトリストのもの以外をBUMP対象外としていたが、これをコメントアウトする。
#ssl_bump bump !whitelist
# BUMP対象外とするサイトにwebsocketのリストも含める
ssl_bump bump !whitelist !wslist
sslproxy_cert_error deny all
--------8<-----(snip)-----8<----------
これで再度テストしてみる。