guest-nico / nicoNewStreamRecorderKakkoKari

GNU General Public License v3.0
146 stars 5 forks source link

ServicePointManager.SecurityProtocol #9

Closed nnn-revo2012 closed 4 years ago

nnn-revo2012 commented 4 years ago

getPageSource()の中で「ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;」としてますが、これだと古いOSでTls12で通信できなかった場合エラーになると思います。Ssl3やTlsは要らないかもしれませんが。

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls |SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;  

NET4.0以前の場合

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | (SecurityProtocolType)0x00000C00 | (SecurityProtocolType)0x00000300;

が良いのではないでしょうか?

nnn-revo2012 commented 4 years ago

もう読んでるかもしれませんが、configのbrowserNumはログインかブラウザーのCookie選択だとわかったので文書を削除しました。

で、気になったのはCookieGetter.csのcopyUserSessionの中で

    cc.Add(TargetUrl, new Cookie(c.Name, c.Value));     etc...

とやってますが、これだとホスト(TargetUri)毎の登録になってしまうのでは?スマートじゃないけど以下のように直接パスとドメインを指定してクッキー登録すればいいんじゃないかと思うのですが。

    cc.Add(new Cookie(c.Name, c.Value, "/", ".nicovideo.jp"));
guest-nico commented 4 years ago

ご指摘をいただきありがとうございます。 ServicePointManager.SecurityProtocolにつきましては、そちらが問題になる可能性は十分にあるかと思います。 Cookieの登録の件とともにhttps://github.com/guest-nico/nicoNewStreamRecorderKakkoKari/commit/1e0b47bb3be073170fec48de4052b27681189c85 (ver0.88.03)にて修正してみました。

nnn-revo2012 commented 4 years ago

https://github.com/guest-nico/nicoNewStreamRecorderKakkoKari/commit/1e0b47bb3be073170fec48de4052b27681189c85 (ver0.88.03) 拝見いたしました。自分の環境(Windows10)では0.87.88以降全然問題なかったのですが、今回の一斉アップデートのためサポートが終わったOS(Vista、Windows7)あたりのユーザーに影響がでたんだと思います。 Cookieの件と合わせてエラーになってたユーザーさんの報告待ちですね。

guest-nico commented 4 years ago

ご確認いただきありがとうございます。 ブラウザにより問題が発生してしまう件につきましても、やはりツール側のCookieの扱いが原因ではないかと思います。 うまく改善できていれば幸いです。ご指摘をいただき感謝いたします。

nnn-revo2012 commented 4 years ago

ServicePointManager.SecurityProtocol はアプリ内で指定後全てのHttpWebRequest/WebClient/HttpClientに対して有効になるので、アプリの最初(ネットにアクセスする前)に一度か、明示するなら全てのHttpWebRequest/WebClient/HttpClientの前に設定すると良いと思います。

Cookie関係もテストしてみたのですが、以下のようになるようなので特にWebからCookie取得するときは注意すべきだなと思いました。

     //targetUrlにNameがあれば、/ .nicovideo.jp は返さない
     cc.Add(new Cookie("user_session", "abcdefgh", "/", ".nicovideo.jp"));
     cc.Add(targetUrl, new Cookie("user_session", "dummy"));
     var c1 = cc.GetCookies(targetUrl)["user_session"];
     // c1  user_session=dummy

     //同じNameの場合は上書き
     cc.Add(new Cookie("user_session", "abcdefgh", "/", ".nicovideo.jp"));
     cc.Add(new Cookie("user_session", "dummy2", "/", ".nicovideo.jp"));
     var  c2 = cc.GetCookies(targetUrl)["user_session"];
     // c2  user_session=dummy2

問題なさそうなので数日でcloseいたします。

guest-nico commented 4 years ago

ご指摘いただきありがとうございます。 ServicePointManager.SecurityProtocolの設定につきましてはProgram.cs内に移動いたしました。(https://github.com/guest-nico/nicoNewStreamRecorderKakkoKari/commit/444a091529476f6a0ce31688866a0f9697f22925) Cookieの扱いにつきましても、今後、Cookieに関する修正を行う際は注意していきたいと思います。

問題を孕んでいた部分のご指摘をいただき感謝申し上げます。