IISExpressによるSSL接続/接続リセット


140

IISExpressで新しいVisual Studio 2013を初めて使用しています(以前はVS2010でASP.net開発サーバーを使用していました)。プロジェクトをデバッグしようとして問題が発生しています。

これは私がChromeで見るものです:

サーバーへの安全な接続を確立できません。これはサーバーの問題であるか、所有していないクライアント認証証明書を必要としている可能性があります。エラーコード:ERR_SSL_PROTOCOL_ERROR

プロパティ-> Webファイルを更新して、プロジェクトURLがhttps URLを使用するようにしました。ただし、それを実行した後、起動時に新しいエラーが発生します。

localhostへの接続が中断されました。エラーコード:ERR_CONNECTION_RESET

ありがとう


同様の質問に私の答えをチェック stackoverflow.com/questions/28195505/...
Bogac

1
以下の回答では簡単に見逃される可能性があるため、ここに投稿してください。受け入れ答えが機能しない場合は、代わりにこれを試してみてください。stackoverflow.com/questions/20036984/...
IWriteApps

ポート番号の変更は私にとってはうまくいきます。
2019年

回答:


47

URLRewriteを使用してweb.configでSSL接続を強制している場合は、ローカルホストアドレスを書き換えてhttpsを強制している可能性があります。SSLを有効にしたデバッグが重要でなく、URLRewriteを使用している場合は<add input="{HTTP_HOST}" pattern="localhost" negate="true" />、web.configファイルのrewriteセクションに追加することを検討してください。ローカルホストアドレスの書き換えは停止しますが、運用環境ではそのままにします。URLRewriteを使用していない場合、またはSSLを使用してデバッグする必要がある場合は、http: //www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx が役立つ場合があります。これはVS2010向けですが、VS2013でも十分です。


7
URLrewriteにその行を追加し、ポートを ":44300-:44398"の範囲内に変更することで機能させました(uosefによる以下の回答を参照)
Rubanov

はい!私の心をほとんど失った数時間後、これは私を助けたものです!
ワカ

363

Visual Studio 2013 / IIS Expressで構成されたアプリのポート番号:44300-:44398の範囲になかったため、ERR_CONNECTION_RESETを取得していました。(て行くために警告を無視しなければならなかったことを思い出しませんその範囲。)ポート番号をこの範囲内の何かに変更するだけで、それを機能させることができました。

netsh http show sslcert > sslcert.txt出力を確認し、ポート番号について最近読んだものをクリックして何かを調べたところ、これに気付きました。


53
この投稿に賛成投票が1つだけあることを後悔しているだけです。SOの前にこの種のナンセンスをどのように修正しましたか?
キルブレーカー、2015

6
を使用netsh http add sslcert ...して、使用するポートを追加することもできます。場合によっては便利です。
brazilianldsjaguar 2015

3
これは私が二度と戻ることのない多くの時間を食い尽くしたクリッキーです... netsh救助に、これはブログ投稿に値する...
ジム


2
Visual Studio 2017 / IIS Express 10
TvdHで引き続き機能し

87

IIS Expressによって生成された証明書と競合する可能性があるため、以前の「localhost」証明書は必ず削除してください。これと同じエラー(ERR_SSL_PROTOCOL_ERROR)があり、多くの「解決策」を試した後、最終的にそれを理解するのに何時間もかかりました。私の間違いは、自分で「localhost」証明書を作成していて、そのうちの2つがあったことです。両方を削除して、IIS Expressで再作成する必要がありました。

「localhost」証明書を確認して削除する方法は次のとおりです。

  • スタート時に、-> mmc.exeと入力します
  • ファイル->スナップインの追加/削除...
  • 証明書->追加>->コンピュータアカウント->ローカルコンピュータを選択します。
  • [証明書]> [個人]> [証明書]で確認します
  • 存在するローカルホスト証明書にわかりやすい名前「IIS Express Development Certificate」があることを確認してください。そうでない場合は、削除してください。または、複数の場合はすべて削除します。

Visual Studioでプロジェクトを選択し、プロパティタブでSSL = trueを有効にします。保存、ビルド、実行。IIS Expressは新しい「localhost」証明書を生成します。

注:機能しない場合は、以下を試してください。VSプロジェクトでIIS Expressを無効にし、実行中のすべてのアプリを停止してから、「localhost」証明書を削除してください。また、「コントロールパネル>プログラム」に移動してIIS Expressを修復することもできます。


2
私の場合、IIS証明書の設定は失われましたが、証明書はディスク上にありました。WebサイトでのSSL証明書の設定とHTTPSバインディングの更新が役立ちました。ssl証明書がコンボボックスですでに選択されている場合でも、httpsバインディングを再度設定することが重要です。
opewix 2015年

10
IIS Expressを修復する必要がありました。今完全に働いた。ありがとう
Homam

1
ありがとうございました。私の場合、証明書をコンピューターから誤って削除してしまいました。このコマンドを実行しようとしたところ、「SSL証明書の追加に失敗しました。エラー:1312指定されたログオンセッションは存在しません。すでに終了している可能性があります。」 netsh http delete sslcert ipport=0.0.0.0:443 netsh http add sslcert ipport=0.0.0.0:443 appid="{GUID-APP-ID}" certhash="THUMBPRINTOFMYCERTIFICATEINHEXADECIMAL"
UKM

それでおしまい!証明書が重複していて、iis Expressパーツも修復する必要がありました。
madamission

36

この問題の解決に役立った手順を要約します。

  1. SSLポートの範囲(IIS Expressで使用)が44300〜44398であることを確認します。

IIS Expressは、インストール時にHttp.sysを使用して、ポート44300〜44399をSSL用に予約します。これにより、IISExpressの標準ユーザー(昇格された特権を持たないユーザー)がSSLを構成して使用できるようになります。この詳細については、こちらを参照してください

  1. コマンドプロンプトで管理者として以下のコマンドを実行します。これにより、SSL証明書のバインディングがコンピューターに出力されます。このリストから、IIS Expressが対応するポートに使用する証明書を見つけます。

netsh http show sslcert> sslcert.txt

  1. sslcert.txtで以下の項目を探します(私の場合、IISエクスプレスはポート44300で実行されていました)

IP:ポート :0.0.0.0:44300

証明書のハッシュ :eb380ba6bd10fb4f597cXXXXXXXXXX

アプリケーションID :{214124cd-d05b-4309-XXX-XXXXXXX}

  1. また、IISエクスプレス管理コンソール(RUN(Ctrl + R)-> inetmgr.exe)を見て、対応する証明書がサーバー証明書に存在するかどうかを確認します

(ServerRootをクリック->セクションIIS()->サーバー証明書を開く)

  1. ローカルホストがデフォルトでステップ3にリストされているものとは異なる証明書を使用している場合は、以下のステップに進みます。

netsh http削除sslcert ipport = 0.0.0.0:44300

netsh http add sslcert ipport = 0.0.0.0:44300 certhash = New_Certificate_Hash_without_space appid = {214124cd-d05b-4309-XXX-XXXXXXX}

New_Certificate_Hashは、ローカルホスト(ステップ4で見つけたもの)と関連付けられたデフォルトの証明書、または新しい証明書として追加する証明書です。

PS回答uosɐſ(この問題の解決に役立ちました)をありがとう


8
ハ、ポートを53xxxから44300に変更するのが私にとってはトリックでした。
cdonner 2016

IISからIISExpressに切り替えた後、これを行わなければなりませんでした
K0D4

2
ポートの変更も私にとってはうまくいきました。なぜポートがこの範囲内にある必要があるのか​​、どこで構成されているのか知っていますか?
ジム

勝利のためのポート変更!また、ポートを44300〜44398の範囲にする必要がある理由についてのジムのコメントにも同じことが言えますか。
Tチャドウィック2018

IIS Expressは、インストール中にHttp.sysを使用して、SSLで使用するためにポート44300〜44399を予約します。これにより、IISExpressの標準ユーザー(昇格された特権を持たないユーザー)がSSLを構成して使用できるようになります。これについての詳細はこちらを参照してください- > docs.microsoft.com/en-us/iis/extensions/using-iis-express/...
カルティク

26

私が経験していた問題は、ある時点で、localhostのHSTSを有効にし、これがIIS Expressのhttp:// localhost:someportを壊すことに気付かなかったことに関係していました。

HSTSはブラウザー(私の場合はChrome)に常にHTTPSを使用してURLを要求するように指示します。そのため、MVC 5アプリでSSLを有効にしていなくても、ブラウザーはHTTPではなくURLでHTTPSを使用してサイトにアクセスしようとします。

修正?

  1. chrome:// net-internals /#hstsにサーフィンします
  2. 削除セクションで「localhost」と入力し、Chromeからレコードを削除します。

1
はい、hstsがこの問題の原因である可能性があります。これは私のためにttrinkをしました、ありがとう。
コスモ2018年

12

上記のオプションのどれも私にはうまくいきませんでした。私は次のことをしなければなりませんでした:

  1. IIS Express 8.0をアンインストールしました
  2. IIS Expressのドキュメントディレクトリにあるすべての構成を削除しました
  3. IIS Express 8.0を再インストールしました
  4. ローカルマシン上のプロジェクトを削除し、TFSのクリーンバージョンをダウンロードした
  5. プロジェクトを実行しました-その後、SSL経由で実行され、デバッグできます

このスレッドからステップを取得しました

お役に立てれば。


2
iis expressをアンインストールして再インストールします。今それは動作します
Xin

5
私の場合は、コントロールパネルのIISインストールを修復するだけで十分でした。
ロマノザ2016年

そして人々はこれのためにマイクロソフトにお金を支払うのですか?完全なアンインストールと再インストールが唯一の修正であるとソフトウェアを設計する必要があるなんて信じられないほどひどいですか?
Jez

@Jez-いいえ、無料です。
エリックケリー

6

私の場合、自己署名証明書を作成して機能させましたが、証明書が信頼されていないためにブラウザーでエラーが発生していました。そこで、証明書スナップインの[信頼されたルート証明機関]> [証明書]フォルダーに証明書を移動しました。うまくいったので、その日はVisual Studioを閉じました。

翌日、プロジェクトを開始したところ、元の質問で述べたエラーが発生しました。問題は、IISExpressを構成した証明書が[個人]> [証明書]フォルダーに存在する必要があることです。そうしないと、HTTPSが機能しなくなります。IIS Expressが正常に起動したら、証明書を信頼できる場所にドラッグして戻すことができます。IIS Expressを再起動するまで機能します。

証明書を毎回前後にドラッグすることに煩わされたくないので、証明書のコピーを両方の場所に配置するだけで、すべてが正常に機能します。


2
通常のファイルと同じように、証明書スナップイン内に証明書をコピーして貼り付けることができます。それを見つけるために何年もかかりました。
Simon_Weaver

6

Visual Studio 2015でも同じ問題があります。web.configでSSLバインディングを使用しているため

<rewrite>
   <rules>   
     <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
       <match url="(.*)" />
       <conditions>
          <add input="{HTTPS}" pattern="off" />
       </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
     </rule>
   </rules>
</rewrite>

そして、djroedger氏の答えで問題を解決できます。交換することにより

<add input="{HTTPS}" pattern="off" />

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

私のweb.configに、私のコードは

<rewrite>
  <rules>   
    <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
         <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
    </rule>
 </rules>
</rewrite>

4

私はこの問題を抱えていた、私はFilterConfig.csでグローバルなrequire httpsのために私のサイトを構成しました。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new RequireHttpsAttribute());
    }

プロジェクトのURLをhttpsに変更するのを忘れていました:このチュートリアルからhttp://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- ENABLE SSLパート4の下のsql-database /これにより、発生していたエラーが発生しました。


4

私が抱えていた問題は@Jason Klebanの回答に関連していましたが、IIS ExpressのVisual Studioのプロパティの設定に1つの小さな問題がありました。

ポートを44300から44399の範囲内に変更した後、アドレスが次で始まることを確認してください HTTPS

ここに画像の説明を入力してください


3

私に2度起こった別の問題:
IIS Expressのapplicationhost.configでは、バインディングの順序が重要です。1つのバインディングがSSLバインディングよりも優先され、機能しない場合があります。

例:

<site name="MySite007" id="1">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\myuser\projects\mysolutionfolder\MyProject.Service" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation=":8081:localhost" />
        <binding protocol="http" bindingInformation=":8080:" /><!-- evil binding -->
        <binding protocol="https" bindingInformation="*:44327:localhost" />
    </bindings>
</site>

外部からWebServiceにアクセスできるように、2番目のバインディングと同様のバインディングを追加した可能性がありますlocalhost。このバインディングは任意のアドレスでリッスンするため、別のポートが使用されていてもSSLバインディングをオーバーライドするようです。

邪悪なバインディングを取り除くか、下に移動します。


これで修正されました。ありがとう!
richb 2017年

3

この記事からIISExpressとvsディレクトリを削除し、44300から44399(両端を含む)のsslポート範囲を使用すると、うまくいきました


これをありがとう-VSで証明書を信頼するように求められなかった以外は私のために働きました-私はそれについて何もするのが面倒なので警告を無視して続行します!
Dave、

2

これは同僚から耳にした逸話ですが、申し立てによると、これはChromeのhttpsの強制に関する問題です。私は通常、Firefoxで起動するので、この問題は以前に見たことがありませんでした。ファイアフォックスを使用するか、IEは私の同僚のために働いた。


1

私の問題はフィドラーによって引き起こされました。Fiddlerがクラッシュすると、プロキシ設定が乱れることがあります。Fiddlerを起動するだけですべてが修正されたようです(おそらく、何らかの方法で自動修復されます)。


1

Digicert証明書インストールチェッカー」は、このような状況で役立つことがあります。

試行されたSSL証明書が、シリアル番号を比較することで予期していたものであることを確認できました。

ここに画像の説明を入力してください

私にとっては、@ Jason Klebanの答えが実際の問題でしたが、これは、どの証明書がロードされているかについての基本的なアサーションを確認するのに非常に役立つユーティリティです。


うわー、ありがとうございました。私のために働いた唯一の解決策。
Fernando Silva

1

44300〜44399の範囲外のポートを使用する必要がある場合は、次の回避策があります。

  • IISで新しいサイトを作成します(Expressではありません)
  • HTTPSを必要なポートにバインドする
  • SSL証明書については、IIS Express開発証明書を選択します
  • サイトが作成されたら、実際に実行する必要がないため、停止します。

これにより、IIS Express開発証明書がそのポートに登録されます。これは、44300〜44399の範囲の要件を回避するために見つけた最も簡単な方法です。


0

コンピューターを再構築しただけです。このスレッドは私に手掛かりを与え、プロジェクト設定> Webで、プロジェクトがHTTPとHTTPポートを使用するように構成されていることに気付きました。それをHTTPSおよび正しいHTTPSポートに更新することにより、すべてが再び機能し始めました。


0

44300から44399までのSSLポートの設定に関する他の回答を続けるために、Visual StudioでSSL有効化プロパティを変更することも、特定のSSL URLを設定することもできませんでした。IIS Expressの修復などの他の回答は役に立ちませんでした。解決策は、slnファイルと並行して.vsフォルダーに移動し、configサブフォルダーを開いて、applicationhost.configファイルを編集することでした。次に、手動でhttps行を追加してVSを再起動しました。

<binding protocol="http" bindingInformation="*:24941:localhost" />
                <binding protocol="https" bindingInformation="*:44301:localhost" />


0

私の場合、デバッグ中にlocalhostのURLがhttps:// localhostにリダイレクトされました。これは、何も変更することなく、ある瞬間から別の瞬間に起こりました。これを解決するには、ブラウザーにハードリロードを実行します。ここにリンク

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.