質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
BASIC

BASICとは、手続き型言語の一つ。英語に準した簡易な記述になっており、基本的には初心者向けのプログラミング言語です。1970年代以降のコンピュータでよく使用された言語で、様々な拡張を加え現在も利用されています。

Squid

Squidは、TCP/IPネットワークでのユーザーとサーバの通信を中継するオープンソースのプロキシサーバソフト。リバースプロキシやキャッシュサーバとして使用することも可能です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

1987閲覧

認証画面を介さずにBasic認証つきプロキシサーバーを利用する方法について

meito

総合スコア22

BASIC

BASICとは、手続き型言語の一つ。英語に準した簡易な記述になっており、基本的には初心者向けのプログラミング言語です。1970年代以降のコンピュータでよく使用された言語で、様々な拡張を加え現在も利用されています。

Squid

Squidは、TCP/IPネットワークでのユーザーとサーバの通信を中継するオープンソースのプロキシサーバソフト。リバースプロキシやキャッシュサーバとして使用することも可能です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2021/09/03 01:27

編集2021/09/25 01:42

Android環境で認証画面を介さずにBasic認証つきプロキシサーバーを利用する方法についてご教授いただければ幸いです。

使用環境

CentOS Linux release 8.3.2011
Squid Cache: Version 4.11

現在取り組んでいること(教材など含む)

squidを用いてBasic認証つきプロキシサーバーを作成しました。
Basic認証つきプロキシサーバーを介してWindows, Mac OS, Linux, Android, iPhone など主要なOS及びそのアプリケーションを利用するにあたって、不具合なく動作するか検証していました。

やりたいこと・解決したいこと

プロキシの認証とはアプリの利用ごとに別にWebページの認証が必要なようです。写真はmac OS環境でこのことを示している。写真1でプロキシにUSER名とpasswordを入れているにもかかわらず、写真2のように個別のアプリケーション利用時に再びBasic認証が必要となる。
イメージ説明
イメージ説明
しかしながら、スマートフォンのアプリだとWebページの認証入力画面にならずに通信できませんでした。したがって、スマートフォン(検証したのはAndroid)でBasic認証つきプロキシサーバーを介した通信を行う場合、ほとんどのアプリで通信ができなくなってしまいます。今回の質問ではこの問題を解消したいです。

うまくいっていない内容・すでに実行したこと

参考までにBasic認証プロキシを作るためのsquid.confを編集した部分を共有いたします。

# Basic certification auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd auth_param basic children 5 auth_param basic realm Squid Basic Authentication auth_param basic credentialsttl 5 hours acl password proxy_auth REQUIRED # auth_param basic casesensitive off http_access allow password

また、いくつかの接続例のアクセスログを示します。
--mac OSの接続成功例--
xxx.yyy.zzz.ttt - myaccount [04/Sep/2021:08:17:31 +0900] "CONNECT content-autofill.googleapis.com:443 HTTP/1.1" 200 5042 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" TCP_TUNNEL:HIER_DIRECT
--Androidの接続成功例(広告?のURLは何故かちゃんと届く)--
xxx.yyy.zzz.ttt - myaccount [04/Sep/2021:08:17:21 +0900] "CONNECT images.outbrainimg.com:443 HTTP/1.1" 200 33223 "-" "Mozilla/5.0 (Linux; Android 9; SCV43-j) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.62 Mobile Safari/537.36" TCP_TUNNEL:HIER_DIRECT
--Androidの接続失敗例(youtubeはアクセス時にBASIC認証を通らなかったため見れない。)--
xxx.yyy.zzz.ttt - - [04/Sep/2021:08:20:57 +0900] "CONNECT www.youtube.com:443 HTTP/1.1" 407 4133 "-" "com.google.android.youtube/1522916800 (Linux; U; Android 9; ja_JP; SCV43-j; Build/PPR1.180610.011; Cronet/93.0.4572.0)" TCP_DENIED:HIER_NONE
接続が失敗した原因は、アプリがプロキシ用のユーザー/パスワードを送らずに(Proxy-Authorization を付けずに)プロキシに接続していることだと考えています。
なお、xxx.yyy.zzz.ttt はIPアドレスを、myaccount はBasic認証時に設定したIDを表しています。

考えられる原因や仮説

その理由としましては、特定のWebページにアクセスするときにBasic認証画面を通してログインをする必要があるのですが、アプリケーションを使うとBasic認証画面を通さずに無理やり通信を開始しようとするため、Basic認証を突破することができず結果的に通信ができなくなってしまうようです。

アプリ利用時にBasic認証画面が出てこないでプロキシ用のユーザー/パスワードを送らずに(Proxy-Authorization を付けずに)プロキシに接続しているためにこの問題が発生していると考えています。ここで、特定のWebページにアクセスする時にプロキシサーバーのユーザー名とパスワードを勝手に使い回すように設定すれば、このエラーは無くなると思います。

しかしながら、これを実現するための手法が思い浮かびません。全ての通信に対してプロキシ設定時に入れたユーザー名とパスワードに紐付けるべきなのか?(だとすれば、どんな手法があるのか)、あるいは認証方式を変えたり、認証用のサーバーを別途立てるべきなのか判然としない状況です。

特に知りたい観点やポイント

随時補足させてください。

以上、よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2021/09/03 06:59

> 特定のWebページにアクセスするときにBasic認証画面を通して これはプロキシの認証とは別に Webページの認証があって、スマートフォンのアプリだと Webページの認証入力画面にならずに通信できないということですか? プロキシ(Squid)の Basic 認証を無効にすると、スマートフォンのアプリで Webページの認証入力画面になり通信できるのですか? > 特定のWebページにアクセスするのにわざわざもう一度BASIC認証をしなければならないのはなんだかおかしいです。 プロキシの認証と Webページの認証はまったく別なので、おかしくないと思います。
meito

2021/09/03 07:03

> これはプロキシの認証とは別に Webページの認証があって、スマートフォンのアプリだと Webページの認証入力画面にならずに通信できないということですか? おっしゃる通りです。 > プロキシ(Squid)の Basic 認証を無効にすると、スマートフォンのアプリで Webページの認証入力画面になり通信できるのですか? squidのbasic認証を導入する前は、このような不具合はありませんでした。 > プロキシの認証と Webページの認証はまったく別なので、おかしくないと思います。 そうすると、Webページの認証を外す必要がある、ということでしょうか?
TaichiYanagiya

2021/09/03 07:15

プロキシ導入前は、スマートフォンのアプリで Webページの認証入力画面なしで通信できたのですか? だとしたら、アプリ側であらかじめ Basic 認証用の Authorization ヘッダを付けて通信してるのだと思います。 プロキシ(Basic 認証あり/なしに関わらず)を経由しても Authoraization ヘッダはそのまま通ると思うのですが、まずは、Basic 認証なしのプロキシでどうなるか確認してみてはいかがでしょうか?
meito

2021/09/03 07:30

承知しました。 一度、プロキシのBasic認証なしのプロキシに戻して動作を確認してみることにいたします。
meito

2021/09/03 08:22

Basic認証なしのプロキシに戻したところ、スマートフォン(検証したのはAndroid)で無事に接続ができることを確認しました。
meito

2021/09/03 08:24

参考までにBasic認証プロキシを作るためのsquid.confを編集した部分を共有いたします。 -- # Basic certification auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd auth_param basic children 5 auth_param basic realm Squid Basic Authentication auth_param basic credentialsttl 5 hours acl password proxy_auth REQUIRED # auth_param basic casesensitive off http_access allow password
meito

2021/09/03 08:26

squid にBasic認証をつけたことで、「Webページの認証」も行わないといけなくなったため、ほとんどのアプリが使えなくなるという事態が発生したのだと考えています。 この問題の解決方法について、ご教授いただければ、幸いです。
TaichiYanagiya

2021/09/03 09:05

設定は問題ないと思います。 PC のブラウザからは認証ありの Squid 経由で任意の Webサイトを見ることができるのですよね? > squid にBasic認証をつけたことで、「Webページの認証」も行わないといけなくなったため プロキシの認証ヘッダ(Proxy-Authorization)と Webサイトの認証ヘッダ(Authoraization)が異なるので(さらに https なら squid からは Authoraization は触れないので)、そんなことにはならないと思うのですが、別の原因ではないでしょうか?
meito

2021/09/03 09:19

> PC のブラウザからは認証ありの Squid 経由で任意の Webサイトを見ることができるのですよね? はい。Webページの認証画面が出てきて、そこで再度ログインするとSquid 経由で任意の Webサイトを見ることができます。
meito

2021/09/03 09:22

> プロキシの認証ヘッダ(Proxy-Authorization)と Webサイトの認証ヘッダ(Authoraization)が異なるので(さらに https なら squid からは Authoraization は触れないので)、そんなことにはならないと思うのですが、別の原因ではないでしょうか? とりあえず、認証方式(Basic認証)がこの問題ではないようであることは理解いたしました。 Webサイトの認証ヘッダが出てこないようにする方法について、ご存知の方、ご教授いただければ幸いです。
TaichiYanagiya

2021/09/03 09:28

PC から OK で Android から NG なら、Android かアプリが悪いのでは? もし、アプリの接続先が https ではなく http なら、squid のログで "%{Authorization}>h" を記録するようにすれば、認証ヘッダが届いているかどうかわかると思います。
meito

2021/09/03 09:36

アプリといってもほとんど任意のアプリ(LINEやyoutube, googleの検索機能など)が使えない状況です。(何故かchromeのアプリは大丈夫なようです。) > http なら、squid のログで "%{Authorization}>h" を記録するようにすれば、認証ヘッダが届いているかどうかわかると思います。 httpを使うシーンがあまりないのですが、もしありましたらこれを確認してみるようにいたします。
meito

2021/09/03 09:59

Webサイトの認証ヘッダが出てこないようにする方法について、ご存知の方、ご教授いただければ幸いです。
TaichiYanagiya

2021/09/03 15:44

ちなみに、プロキシ認証ありで NG のときの squid のログはどうなっていますか? https だと応答コードくらいしかわかりませんが、そもそも、Webサーバーにアクセスが行っているのかどうか知りたいです。
meito

2021/09/03 23:31 編集

Basic認証されていない状態でWebページにアクセスしようとするため、ユーザー名が空になっておりそのため接続ができない状況となっているようです。(squidの設定でBasic認証を通さないとアクセスできないようにしているので。) --macの接続成功例-- xxx.yyy.zzz.ttt - myaccount [04/Sep/2021:08:17:31 +0900] "CONNECT content-autofill.googleapis.com:443 HTTP/1.1" 200 5042 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" TCP_TUNNEL:HIER_DIRECT --Androidの接続成功例(広告?のURLは何故かちゃんと届く)-- xxx.yyy.zzz.ttt - myaccount [04/Sep/2021:08:17:21 +0900] "CONNECT images.outbrainimg.com:443 HTTP/1.1" 200 33223 "-" "Mozilla/5.0 (Linux; Android 9; SCV43-j) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.62 Mobile Safari/537.36" TCP_TUNNEL:HIER_DIRECT --Androidの接続失敗例(youtubeはアクセス時にBASIC認証を通らなかったため見れない。)-- xxx.yyy.zzz.ttt - - [04/Sep/2021:08:20:57 +0900] "CONNECT www.youtube.com:443 HTTP/1.1" 407 4133 "-" "com.google.android.youtube/1522916800 (Linux; U; Android 9; ja_JP; SCV43-j; Build/PPR1.180610.011; Cronet/93.0.4572.0)" TCP_DENIED:HIER_NONE なお、xxx.yyy.zzz.ttt はIPアドレスを、myaccount はBasic認証時に設定したIDを表しています。
TaichiYanagiya

2021/09/04 02:35

ありがとうございます。 確かに、プロキシ認証が通っていないですね。 Android かアプリ側に原因があると思うのですが、わかりません。
meito

2021/09/04 05:37

コメントをくださり、ありがとうございます。 Basic認証つきプロキシサーバーについてのご経験がある方、Webサイトの認証ヘッダが出てこないようにする方法についてご教授いただければ幸いです。 (squid にBasic認証をつけたことで、「Webページの認証」も行わないといけなくなったため、ほとんどのアプリが使えなくなるという事態が発生したのだと考えています。) 以上、よろしくお願い申し上げます。
TaichiYanagiya

2021/09/04 13:27

NG の場合、ログに認証ユーザー名(3つ目の "myaccount")が記録されておらず、407 (Proxy Authentication Required)を返していることから、アプリがプロキシ用のユーザー/パスワードを送らずに(Proxy-Authorization を付けずに)プロキシに接続しているのだと思います。 「Webページの認証」以前の問題。
meito

2021/09/10 10:49

「アプリがプロキシ用のユーザー/パスワードを送らずに(Proxy-Authorization を付けずに)プロキシに接続している」という問題はAndroid のみならず、iPhoneにおいても起こっているようです。 この問題の解決手法について、ご存知の方ご教授いただければ幸いです。 以上、よろしくお願い申し上げます。
meito

2021/09/10 12:34

そもそも、プロキシサーバーに接続するときにユーザー名とパスワードを入れているにもかかわらず、 個別のアプリケーションを使うときにまたBasic認証が必要になることの理由がよくわかりません。 プロキシサーバーのユーザー名とパスワードを勝手に使い回してくれるだけで、このエラーは無くなると思います。
TaichiYanagiya

2021/09/10 13:11

> そもそも、プロキシサーバーに接続するときにユーザー名とパスワードを入れているにもかかわらず、 > 個別のアプリケーションを使うときにまたBasic認証が必要になることの理由がよくわかりません。 それは別物と説明したつもりですが、 > プロキシサーバーのユーザー名とパスワードを勝手に使い回してくれるだけで、このエラーは無くなると思います。 そのような動作を期待しているのであれば、プロキシ認証の目的、使い方が違います。 プロキシ認証の目的は、ユーザー名/パスワードでプロキシの利用を許可すること、ユーザー名/パスワードを知らない人にはプロキシを使わせないことです。 Webサイトの認証を「代理」するものではありません。
meito

2021/09/15 04:26

Squid Proxy Server 3.1 Beginner's Guide より引用 """ The best way to keep bad guys out of a proxy server is to use proxy authentication. In this case, a client will need to enter a username and password to be able to use our proxy server. If proxy authentication is enabled, the client will send an additional header with authentication credentials, which Squid will evaluate and check whether the client should be allowed to use our proxy server. The interesting part is that Squid can't validate credentials sent by the client on its own. Squid passes the credentials it receives from a client to a helper process, and the validity of credentials is determined by the external process. """
meito

2021/09/15 04:27

つまり、squid自身が認証がcredentialsを自分で検証できないので、個別のアプリを使おうとしたときにそれを外部プロセスが判断しようとするので、またBasic認証が必要になってしまう、ということでしょうか?
meito

2021/09/15 07:25

そういうことではないのですね。 Android や iPhoneにおいて発生する「アプリがプロキシ用のユーザー/パスワードを送らずに(Proxy-Authorization を付けずに)プロキシに接続している」という問題は、結局のところアプリ側が改善されなければ、解決されることはないのでしょうか? それとも、プロキシサーバーsquidの側で何かをすれば、解決される類いのものなのでしょうか?
meito

2021/09/20 02:10

質問内容を編集しました。 また、英語版でstackoverflowにも同じ質問を投げることにいたしました。 https://stackoverflow.com/questions/69248400/how-to-use-a-proxy-server-with-basic-authentication-without-going-through-the-au 今後は、知り合いでプロキシサーバに詳しい知り合いを見つけるなどしてなんとかしたいと考えています。 引き続き、どなたか解決手段を提示いただけたら幸いです。
guest

回答2

0

自己解決

=有料質問サイトで質問した時のAnswerを共有いたします。=

Android端末からのプロキシ利用について、お困りだと認識しました。

末尾に添付したサイトにあるように、Androidは認証プロキシを突破できないようです。
対処方法としてはリンクにあるものも含め以下の方法があります。

1.専用のアプリを入れる (Androidの場合はDronyというアプリケーションを用いる)
2.Androidをroot化する(オススメしない)
3.Android端末に固定アドレスを割り当て、このAndroid端末だけは認証をしないようにする

https://luminati.site/?p=365#%E6%96%B9%E6%B3%95%E3%81%9D%E3%81%AE%EF%BC%91%EF%BC%9A%E8%AA%8D%E8%A8%BC%E5%AF%BE%E5%BF%9C%E5%8F%AF%E8%83%BD%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B

投稿2021/09/20 23:09

meito

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12155029567

同様の問題について議論しているコンテンツを共有いたします。
結論から申し上げると、squid側の不具合が原因である可能性があります。

投稿2021/09/10 11:17

meito

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問