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

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

ただいまの
回答率

90.34%

.NET3.5 HttpWebRequest.GetResponse()の例外について

解決済

回答 1

投稿

  • 評価
  • クリップ 3
  • VIEW 5,722

zonozono

score 12

Windows10Pro x64 + VS2017 + .NET Framework3.5で、以下のコードで例外出ない方、いらっしゃいますでしょうか。
あるいは、解決方法どなたかご存知でしょうか。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://www.tanabe-ind.co.jp/");
req.Timeout = 900000;
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())    //ここで例外
{
}
System.Net.WebException: '基礎になる接続が閉じられました: 送信時に、予期しないエラーが発生しました。'
内部例外:
IOException: トランスポート ストリームから予期しない EOF または 0 バイトを受信しました。

ちなみに同じコードで.NET Framework4.0なら通ります。
また、上記以外の大抵のサイト(例えば https://www.google.co.jp/)も通ります。
上記サイトはie等ブラウザで普通に見れるところです。

Fiddlerで確認したリクエストヘッダは以下の通り。

ieのリクエストヘッダ

CONNECT www.tanabe-ind.co.jp:443 HTTP/1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Length: 0
Host: www.tanabe-ind.co.jp
Connection: Keep-Alive
Pragma: no-cache

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Version: 3.3 (TLS/1.2)
~以下略~

上記コードでのヘッダ(.net3.5・4.0同じ)

CONNECT www.tanabe-ind.co.jp:443 HTTP/1.1
Host: www.tanabe-ind.co.jp
Connection: Keep-Alive

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Version: 3.1 (TLS/1.0)
~以下略~

色々調べて、事前に下記コードを入れたりもしましたが駄目でした。
TLS/1.2でも1.0でも、.net4.0なら通り、3.5なら例外です。

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

あと、足りないヘッダを補おうと下記コードを入れても、送り先がhttpsだとヘッダに変化無いのはそういうものでしょうか。(.net3.5・4.0両方とも)

req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko";
req.ContentLength = 0;
req.KeepAlive = true;
req.Headers["TEST"] = "TEST";

.NET4系に移行してしまえば済む話なのですが、とりあえず解決はしておきたく、ここに書きました。どなたか情報ご存知でしたらお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

おそらくこれです。
https://stackoverflow.com/questions/16348393/an-unexpected-error-occurred-on-a-send-eof-or-0-bytes-from-the-transport-stream

SecurityProtocolType 列挙体の値としてSSL 3.0、TLS 1.0、TLS 1.1、TLS1.2、そしてデフォルトが選べますが、
https://msdn.microsoft.com/ja-jp/library/system.net.securityprotocoltype(v=vs.110).aspx

3.5のときにはSSL 3.0、TLS 1.0のみが選択できました。
https://msdn.microsoft.com/ja-jp/library/system.net.securityprotocoltype(v=vs.90).aspx

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/31 15:18

    ご返信ありがとうございます。

    ただ、下記の通り現在は3.5でもTLS1.1、1.2を使えるようでして、既にそれを元に4つのSecurityProtocolType値を個別に指定して試し、結果全滅しておりました。

    .NET Framework で TLS1.1 および 1.2 を有効化する方法
    https://blogs.technet.microsoft.com/jpieblog/2015/04/07/net-framework-tls1-1-1-2/

    ですが、4つの値の症状にはちょっと違いがありまして、Ssl3なら即時例外、その他のTls・(SecurityProtocolType)0x00000C00・(SecurityProtocolType)0x00000300なら1分以上経ってから例外でした。

    何かパッチでも当ててないからエラーが出てるのかと思ったのですが、https://www.google.co.jp/に接続してみると、Ssl3なら即時例外、その他なら普通にページ受信成功していました。

    結局、SSLは置いとくとしても、.NET3.5でのTLS通信は極一部(数%位?)のサーバと失敗する相性問題のようなものがあると予想しております。

    キャンセル

  • 2017/07/31 15:32

    そこにWin8用のパッチは出ているようですが、10用のはないですね。使えるといっていないものは使えないのではないでしょうか?

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る