IISExpressによるSSL接続/接続リセット
IISExpressで新しいVisual Studio 2013を初めて使用します(VS2010で以前使用されていたASP.net開発サーバー)。プロジェクトをデバッグしようとすると問題が発生します。
これは私がChromeで見るものです:
サーバーへの安全な接続を確立できません。これはサーバーの問題であるか、所有していないクライアント認証証明書を必要としている可能性があります。エラーコード:ERR_SSL_PROTOCOL_ERROR
Project Urlがhttps URLを使用するように、Properies-> Webファイルを更新しました。ただし、それを実行した後、起動時に新しいエラーが表示されます。
Localhostへの接続が中断されました。エラーコード:ERR_CONNECTION_RESET
ありがとう
URLRewriteを使用してweb.configでSSL接続を強制している場合、おそらくlocalhostアドレスを書き換えてhttpsを強制しています。 SSLを有効にしてデバッグすることが重要ではなく、URLRewriteを使用している場合は、web.configファイルの書き換えセクションに<add input="{HTTP_Host}" pattern="localhost" negate="true" />
を追加することを検討してください。 localhostアドレスの書き換えは停止しますが、本番環境ではそのまま残します。 URLRewriteを使用していない場合、またはSSLを使用してデバッグする必要がある場合は、 http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx が役立つ場合があります。 VS2010向けですが、VS2013でも十分です。
Visual Studio 2013/IIS Expressで構成されたアプリポート番号が:44300-:44398の範囲になかったため、ERR_CONNECTION_RESETを取得していました。 (その範囲のoutを取得するために警告を消さなかったことを思い出しません。)この範囲のポート番号を変更するだけでした。それが機能するようにするために。
netsh http show sslcert > sslcert.txt
の出力と、ポート番号について最近読んだものでクリックしたものを確認した後、私はこれに気付きました。
以前の「localhost」証明書は、IIS Expressによって生成された証明書と競合する可能性があるため、必ず削除してください。この同じエラー(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を修復できます。
この問題の解決に役立った手順を要約しています。
- SSLポート範囲(IIS expressで使用)が44300-44398の間にあることを確認してください
インストール中、IIS ExpressはHttp.sysを使用して、SSL用にポート44300〜44399を予約します。これにより、IISExpressの標準ユーザー(昇格した特権なし)がSSLを構成および使用できます。この詳細については、 here を参照してください
- コマンドプロンプトで管理者として以下のコマンドを実行します。これにより、コンピューターのSSL証明書バインディングが出力されます。このリストから、対応するポートに対してIIS expressによって使用される証明書を見つけます。
netsh http show sslcert> sslcert.txt
- Sslcert.txtで以下の項目を探します(私の場合、IIS expressはポート44300で実行されていました)
IP:port:0.0.0.0:44300
証明書ハッシュ:eb380ba6bd10fb4f597cXXXXXXXXXX
アプリケーションID:{214124cd-d05b-4309-XXX-XXXXXXX}
- また、IISエクスプレス管理コンソール(RUN(Ctrl + R)-> inetmgr.exe)を調べ、対応する証明書がサーバー証明書に存在するかどうかを確認します
(ServerRoot->セクションIIS()->サーバー証明書を開くをクリックします)
- Localhostがデフォルトでステップ3にリストされているものとは異なる証明書を使用する場合、以下のステップに進みます
netsh http delete sslcert ipport = 0.0.0.0:44300
netsh http add sslcert ipport = 0.0.0.0:44300 certhash =New_Certificate_Hash_without_spaceappid ={214124cd-d05b-4309-XXX-XXXXXXX}
New_Certificate_Hashは、ローカルホスト(ステップ4で見つかったもの)または新しい証明書として追加するものと結び付けられたデフォルトの証明書になります。
追伸ご回答ありがとうございます osɐſ (この問題の解決に役立った)
私が経験していた問題は、ある時点で、localhostのHSTSを有効にして、これがIISの http:// localhost:someport を壊すことに気づかないことと関係していました。エクスプレス。
HSTSは、ブラウザ(私の場合はChrome)に常にHTTPSを使用してURLを要求するように指示します。そのため、MVC 5アプリでSSLを有効にしていなくても、ブラウザはHTTPではなくURLでHTTPSを使用してサイトにアクセスしようとします。
修正?
- Chrome:// net-internals /#hstsへのサーフィン
- 削除セクションに「localhost」と入力し、Chromeからレコードを削除します。
上記のオプションはどれも役に立たなかった。私は次のことをしなければなりませんでした:
- アンインストールIIS Express 8.0
- IIS Expressのドキュメントディレクトリ内のすべての構成を削除しました
- 再インストールIIS Express 8.0
- ローカルマシン上のプロジェクトを削除し、TFSのクリーンバージョンをダウンロードしました
- プロジェクトを実行しました-その後、SSL上で実行され、デバッグできます
このスレッド からステップを取得しました
お役に立てれば。
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>
そして、Dr.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>
私の場合、自己署名証明書を作成し、動作させましたが、証明書が信頼できないためにブラウザーでエラーが発生していました。そのため、証明書を証明書スナップインの[信頼されたルート証明機関]> [証明書]フォルダーに移動しました。うまくいったので、その日はVisual Studioを閉じました。
翌日、プロジェクトを開始し、元の質問に記載されているエラーを受け取りました。問題は、IISExpressを構成した証明書が[個人]> [証明書]フォルダーに存在する必要があるか、HTTPSが機能しなくなることです。 IIS Expressが正常に起動したら、証明書を信頼できる場所にドラッグして戻すことができます。 IIS Expressを再起動するまで機能し続けます。
証明書を毎回前後にドラッグするのに煩わされたくないので、証明書のコピーを両方の場所に置くだけで、すべてが正常に機能するようになりました。
この問題が発生していたので、FilterConfig.csでグローバルに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-sql-database / SSLパート4を有効にします。これにより、エラーが発生していました。
私に二度起こった別の問題:
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>
localhost
の外部からWebServiceにアクセスできるように、2番目のバインディングと同様のバインディングを追加した可能性があります。このバインディングは任意のアドレスでリッスンするため、異なるポートが使用されていてもSSLバインディングをオーバーライドするようです。
evil bindingを削除するか、下に移動します。
これは同僚から聞いたことがあるという逸話ですが、伝えられるところでは、これはchromeがhttpsを強制する問題です。私は通常、Firefoxで起動するため、この問題は以前に見たことがありませんでした。 firefoxを使用するか、同僚のために働きました。
このような状況では、「 Digicert証明書インストールチェッカー 」が役立つことがよくあります。
シリアル番号を比較することで、試行されたSSL証明書が期待していたものであることを確認できました。
私にとっては、@ Jason Klebanの答えが実際の問題でしたが、これは、どの証明書がロードされているかについての基本的な主張を確認するのに非常に便利なユーティリティです。
私の場合は、完全なIISで(私の場合) https:// localhost:443 にバインドが設定されていることを忘れていました。あなたは両方を持つことはできません!
needを使用して44300〜44399の範囲外のポートを使用する場合、次の回避策があります。
- IIS(Expressではない)に新しいサイトを作成します
- 必要なポートにHTTPSをバインドします
- SSL証明書の場合、IIS Express Development Certificateを選択します
- サイトが作成されたら、実際に実行する必要がないため、停止します。
これにより、そのポートにIIS Express Development証明書が登録され、44300-44399の範囲要件を回避するために見つけた最も簡単な方法です。
私の問題はフィドラーが原因でした。 Fiddlerがクラッシュすると、プロキシ設定が乱れることがあります。単にFiddlerを起動するだけですべてが修正されたようです(おそらくそれ自体が何らかの形で修復されたのでしょう)。
SSLポートを44300から44399に設定することに関する他の回答を続けるために、Visual StudioでSSL Enabledプロパティを変更することも、特定のSSL URLを設定することもできませんでした。 IIS Expressの修復などの他の回答は役に立ちませんでした。解決策は、slnファイルと並行して.vsフォルダーに移動し、configサブフォルダーを開いて、applicationhost.configファイルを編集することでした。次に、手動でhttps行を追加し、VSを再起動しました。
<binding protocol="http" bindingInformation="*:24941:localhost" />
<binding protocol="https" bindingInformation="*:44301:localhost" />
IISExpressとvsディレクトリを削除し、44-44から44399(含む)のsslポート範囲を使用して この記事 私のために働いた
私の場合、localhost URLは、デバッグ時に https:// localhost にリダイレクトされました。これは、何も変更せずに、ある瞬間から別の瞬間に起こりました。ブラウザにハードリロードを行うことでこれを解決しました。ここで link
コンピューターを再構築しただけです。このスレッドは手がかりを与えてくれました。プロジェクト設定> Webで、プロジェクトがHTTPとHTTPポートを使用するように設定されていることに気付きました。 HTTPSと正しいHTTPSポートに更新することで、すべてが再び機能し始めました。