Koneksi SSL / Koneksi Ulang dengan IISExpress

140

Saya menggunakan Visual Studio 2013 baru dengan IISExpress untuk pertama kalinya (server Pengembangan ASP.net sebelumnya pada VS2010). Saya mengalami masalah mencoba men-debug proyek saya.

Ini yang saya lihat di Chrome:

Tidak dapat membuat koneksi yang aman ke server. Ini mungkin masalah dengan server, atau mungkin memerlukan sertifikat otentikasi klien yang tidak Anda miliki. Kode kesalahan: ERR_SSL_PROTOCOL_ERROR

Saya memperbarui Properies saya -> file web sehingga Url Proyek menggunakan URL https sekarang. Namun, setelah melakukan itu, saya sekarang mendapatkan kesalahan baru saat meluncurkan:

Koneksi ke localhost terputus. Kode kesalahan: ERR_CONNECTION_RESET

Terima kasih

Kevin
sumber
Periksa jawaban saya untuk pertanyaan serupa stackoverflow.com/questions/28195505/…
Bogac
1
Posting di sini karena dapat dengan mudah terjawab dalam jawaban di bawah ini. Jika jawaban yang diterima tidak berfungsi untuk Anda, cobalah ini: stackoverflow.com/questions/20036984/...
IWriteApps
Mengubah nomor port, bekerja untuk saya.
torun

Jawaban:

47

Jika Anda menggunakan URLRewrite untuk memaksa koneksi SSL di web.config Anda, itu mungkin menulis ulang alamat localhost Anda untuk memaksa https. Jika debugging dengan SSL diaktifkan tidak penting bagi Anda dan Anda menggunakan URLRewrite, pertimbangkan untuk menambahkan <add input="{HTTP_HOST}" pattern="localhost" negate="true" />ke bagian penulisan ulang file web.config. Ini akan menghentikan penulisan ulang untuk setiap alamat host lokal tetapi membiarkannya tetap di lingkungan produksi. Jika Anda tidak menggunakan URLRewrite atau perlu melakukan debug menggunakan SSL, http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx mungkin membantu. Ini untuk VS2010, tetapi harus cukup untuk VS2013 juga.

djroedger
sumber
7
Saya membuatnya bekerja dengan menambahkan baris itu ke URLrewrite DAN mengubah port menjadi dalam kisaran ": 44300-: 44398" (lihat jawaban di bawah oleh uosef)
Rubanov
IYA! Setelah beberapa jam hampir kehilangan akal, inilah yang membantu saya!
waka
363

Saya mendapatkan ERR_CONNECTION_RESET karena nomor port aplikasi yang dikonfigurasi Visual Studio 2013 / IIS Express saya TIDAK dalam kisaran : 44300-: 44398 . (Saya tidak ingat harus mengabaikan peringatan untuk keluar dari jangkauan itu.) Mengubah nomor port menjadi sesuatu dalam kisaran ini adalah semua yang harus saya lakukan untuk membuatnya berfungsi.

Saya perhatikan ini setelah meninjau netsh http show sslcert > sslcert.txtoutput dan sesuatu mengklik dengan hal-hal yang saya baca baru-baru ini tentang nomor port.

Jason Kleban
sumber
53
Saya hanya menyesal bahwa saya punya satu upvote untuk memberi untuk posting ini. Bagaimana saya memperbaiki omong kosong semacam ini sebelum SO?
quillbreaker
6
Anda juga dapat menggunakan netsh http add sslcert ...untuk menambahkan port yang ingin Anda gunakan. Berguna dalam beberapa kasus.
brazilianldsjaguar
3
Crikey ini memakan banyak jam, aku tidak akan pernah kembali ... netshuntuk menyelamatkan, ini layak posting blog ...
Jim
3
Saya menemukan bahwa kisaran nomor port ini didokumentasikan di bagian Menggunakan Port SSL Kustom dari Kegagalan Mengikat URL Penanganan dalam dokumentasi IIS Express .
Schmalls
2
Masih bekerja dengan Visual Studio 2017 / IIS Express 10
TvdH
87

Pastikan untuk menghapus sertifikat 'localhost' sebelumnya karena yang dapat bertentangan dengan yang dihasilkan oleh IIS Express. Saya memiliki kesalahan yang sama (ERR_SSL_PROTOCOL_ERROR), dan saya butuh waktu berjam-jam untuk akhirnya mengetahuinya setelah mencoba banyak "solusi". Kesalahan saya adalah bahwa saya telah membuat sertifikat 'localhost' saya sendiri dan ada dua dari mereka. Saya harus menghapus keduanya dan membuat IIS Express membuatnya kembali.

Inilah cara Anda dapat memeriksa dan menghapus sertifikat 'localhost':

  • Pada Mulai, ketik -> mmc.exe
  • File -> Tambah / Hapus Snap-in ...
  • Pilih Sertifikat -> Tambah> -> Akun komputer -> Komputer lokal
  • Periksa di bawah Sertifikat> Pribadi> Sertifikat
  • Pastikan sertifikat localhost yang ada memiliki nama yang ramah "IIS Express Development Certificate". Jika tidak, hapus saja. Atau jika banyak, hapus semua.

Pada Visual Studio, pilih proyek dan di bawah tab properti, aktifkan SSL = true. Simpan, Bangun, dan Jalankan. IIS Express akan menghasilkan sertifikat 'localhost' baru.

Catatan: Jika tidak berhasil, coba ini: pastikan untuk menonaktifkan IIS Express pada proyek VS dan menghentikan semua aplikasi yang berjalan sebelum menghapus sertifikat 'localhost'. Anda juga dapat membuka 'panel kontrol> program' dan Perbaikan IIS Express.

ShaTin
sumber
2
Dalam kasus saya, pengaturan sertifikat IIS hilang, namun sertifikat ada di disk. Pengaturan sertifikat SSL dan memperbarui HTTPS mengikat di situs web membantu. Sangat penting untuk mengatur https binding lagi walaupun sertifikat ssl sudah dipilih di combobox.
opewix
10
Perlu untuk memperbaiki IIS Express. Sekarang bekerja dengan sempurna. Terima kasih
Homam
1
Terima kasih. Dalam kasus saya, saya telah menghapus sertifikat secara tidak sengaja dari komputer saya. Ditemukan ketika saya mencoba menjalankan perintah ini dan melemparkan mengatakan: "Tambah Sertifikat SSL gagal, Kesalahan: 1312 Sesi masuk yang ditentukan tidak ada. Mungkin sudah dihentikan." 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
Itu dia! Sertifikat rangkap dan harus melakukan perbaikan juga mengungkapkan bagian.
madamission
36

Saya merangkum langkah-langkah yang membantu saya dalam menyelesaikan masalah ini:

  1. Pastikan rentang port SSL (digunakan oleh IIS express) antara 44300-44398

Selama instalasi, IIS Express menggunakan Http.sys untuk memesan port 44300 hingga 44399 untuk penggunaan SSL. Ini memungkinkan pengguna standar (tanpa hak yang lebih tinggi) dari IISExpress untuk mengonfigurasi dan menggunakan SSL. Untuk lebih jelasnya lihat di sini

  1. Jalankan perintah di bawah ini sebagai administrator di Command prompt. Ini akan menampilkan binding Sertifikat SSL di komputer. Dari daftar ini, cari tahu sertifikat yang digunakan oleh IIS express untuk port yang sesuai:

http netsh sslcert> sslcert.txt

  1. Cari item di bawah ini di sslcert.txt (dalam kasus saya express IIS berjalan di port 44300)

IP: port : 0.0.0.0:44300

Sertifikat Hash : eb380ba6bd10fb4f597cXXXXXXXXXX

ID Aplikasi : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. Lihat juga di IIS express management console (RUN (Ctrl + R) -> inetmgr.exe) dan cari apakah sertifikat yang sesuai ada di Server Certificates

(Klik pada ServerRoot -> di bawah bagian IIS () -> Buka Sertifikat Server)

  1. Jika hosting lokal Anda secara default menggunakan sertifikat berbeda dari yang terdaftar di Langkah 3, lanjutkan dengan langkah-langkah di bawah ini

netsh http hapus sslcert ipport = 0.0.0.0: 44300

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

New_Certificate_Hash akan menjadi sertifikat default Anda yang diikat dengan localhost Anda (yang kami temukan di langkah 4) atau yang ingin Anda tambahkan sebagai sertifikat baru.

PS Terima kasih atas jawaban Anda uosɐſ (yang membantu saya menyelesaikan masalah ini)

Karthik
sumber
8
Ha, mengubah port dari 53xxx ke 44300 melakukan trik untuk saya.
cdonner
Harus melakukan ini setelah beralih dari IIS ke IISExpress
K0D4
2
Mengubah port juga bekerja untuk saya. Adakah yang tahu mengapa port harus berada dalam kisaran ini dan di mana dikonfigurasi?
Jim
Perubahan port untuk kemenangan! Dan juga untuk komentar Jim mengapa port perlu berada di kisaran 44300-44398?
TChadwick
Selama instalasi IIS Express menggunakan Http.sys untuk memesan port 44300 hingga 44399 untuk penggunaan SSL. Ini memungkinkan pengguna standar (tanpa hak yang lebih tinggi) dari IISExpress untuk mengonfigurasi dan menggunakan SSL. Untuk detail lebih lanjut tentang rujukan ini di sini -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…
Karthik
26

Masalah yang saya alami berkaitan dengan saya, pada suatu saat, mengaktifkan HSTS untuk localhost dan tidak menyadari bahwa ini akan merusak http saya : // localhost: someport di IIS Express.

HSTS memberi tahu browser (Chrome dalam kasus saya) untuk SELALU meminta URL menggunakan HTTPS. Jadi untuk itu meskipun saya bahkan belum mengaktifkan SSL untuk aplikasi MVC 5 saya, browser masih akan mencoba mengakses situs saya menggunakan HTTPS di URL alih-alih HTTP.

Memperbaiki?

  1. Berselancar ke chrome: // net-internal / # hsts
  2. Di bagian hapus, masukkan "localhost" dan hapus catatan dari Chrome.
Kucing dalam sepatu
sumber
1
Ya, hsts mungkin menjadi penyebab masalah ini. Ini membuat saya kesulitan, terima kasih.
Kosmo
12

Tidak ada opsi di atas yang berfungsi untuk saya. Saya harus melakukan hal berikut:

  1. IIS Express 8.0 yang tidak diinstal
  2. Menghapus semua konfigurasi di direktori Documents saya untuk IIS Express
  3. Menginstal ulang IIS Express 8.0
  4. Menghapus proyek di mesin lokal saya dan mengunduh versi bersih untuk TFS
  5. Jalankan proyek - kemudian berlari melalui SSL dan saya dapat men-debug

Saya mendapat langkah-langkah dari utas ini.

Semoga ini membantu.

lopezbertoni
sumber
2
Saya baru saja menginstal iis express, dan menginstalnya kembali. sekarang berfungsi
Xin
5
Dalam kasus saya itu sudah cukup dengan hanya memperbaiki instalasi IIS (di Control Panel).
romanoza
Dan orang-orang membayar uang Microsoft untuk ini? Betapa luar biasa buruknya perangkat lunak harus dirancang bahwa satu-satunya perbaikan adalah uninstall penuh dan instal ulang ?!
Jez
@ Jo - Tidak, gratis.
Eric Kelly
6

Dalam kasus saya, saya membuat sertifikat yang ditandatangani sendiri dan membuatnya berfungsi, kecuali saya mendapat kesalahan di browser karena sertifikat itu tidak dipercaya. Jadi, saya memindahkan sertifikat tersebut ke folder Otoritas Sertifikasi Root Tepercaya> Sertifikat di snapin Sertifikat. Itu berhasil, dan kemudian saya menutup Visual Studio untuk hari itu.

Hari berikutnya, saya memulai proyek saya dan saya menerima kesalahan yang disebutkan dalam pertanyaan awal. Masalahnya adalah bahwa sertifikat yang Anda konfigurasi dengan IISExpress harus ada di folder Personal> Certificates atau HTTPS akan berhenti berfungsi. Setelah IIS Express berhasil dimulai, Anda dapat menyeret sertifikat kembali ke lokasi tepercaya. Ini akan terus berfungsi sampai Anda me-restart IIS Express.

Tidak ingin repot dengan menyeret sertifikat bolak-balik setiap kali, saya hanya menempatkan salinan sertifikat di kedua tempat dan sekarang semuanya berfungsi dengan baik.

moribvndvs
sumber
2
Anda dapat menyalin + menempelkan sertifikat di dalam snap-in sertifikat seolah-olah itu adalah file biasa. Butuh waktu bertahun-tahun untuk mengetahuinya.
Simon_Weaver
6

Saya memiliki masalah yang sama di Visual Studio 2015. Karena saya menggunakan SSL binding di web.config

<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>

Dan saya bisa memperbaiki masalah dengan jawaban Mr.djroedger. Dengan mengganti

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

dengan

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

ke web.config saya, jadi kode saya adalah

<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>
POM pom
sumber
4

Saya mengalami masalah ini, saya telah mengkonfigurasi situs saya untuk global, memerlukan https di FilterConfig.cs.

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

Saya lupa mengubah url proyek menjadi https: dari tutorial ini http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- sql-database / dalam ENABLE SSL part 4. Ini menyebabkan kesalahan yang Anda dapatkan.

gsmith
sumber
4

Masalah yang saya miliki terkait dengan jawaban @Jason Kleban, tapi saya punya satu masalah kecil dengan pengaturan saya di Visual Studio Properties untuk IIS Express.

Pastikan bahwa setelah Anda mengubah port menjadi dalam kisaran: 44300 hingga 44399, alamat juga dimulai dengan HTTPS

masukkan deskripsi gambar di sini

Pengembang Newteq
sumber
3

Masalah lain yang terjadi dua kali pada saya:
Di IIS Express, applicationhost.configurutan binding tidak masalah. Satu pengikatan dapat diutamakan daripada pengikatan SSL Anda, membuatnya tidak berfungsi.

Contoh:

<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>

Anda mungkin telah menambahkan penjilidan yang serupa dengan yang kedua untuk dapat mengakses Layanan Web Anda dari luar localhost. Karena pengikatan ini mendengarkan pada alamat apa pun, tampaknya mengesampingkan pengikatan SSL meskipun port yang berbeda digunakan.

Hapus ikatan jahat atau pindahkan ke bawah.

Thibault D.
sumber
Ini memperbaikinya untuk saya. Terima kasih!
richb
3

Menghapus IISExpress dan direktori vs. dan menggunakan kisaran port ssl dari 44300 hingga 44399 (inklusif) dari artikel ini bekerja untuk saya

Luba Karpenko
sumber
terima kasih untuk ini - bekerja untuk saya kecuali saya tidak diminta untuk mempercayai sertifikat di VS - Saya terlalu malas untuk melakukan sesuatu tentang itu sehingga akan mengabaikan peringatan dan melanjutkan!
Dave
2

Ini bersifat anekdotal karena tidak terdengar dari rekan kerja, tetapi diduga ini adalah masalah dengan chrome yang memaksa https. Saya biasanya memulai di firefox jadi saya belum melihat masalah ini sebelumnya. Menggunakan firefox atau mis. Bekerja untuk rekan kerja saya.

Ken Johnson
sumber
1

Masalah saya disebabkan oleh Fiddler. Ketika Fiddler crash, terkadang pengaturan messy Anda terganggu. Meluncurkan Fiddler sepertinya memperbaiki segalanya (mungkin entah bagaimana memperbaiki sendiri).

Jason
sumber
1

' Pemeriksa instalasi sertifikat Digicert ' seringkali membantu dalam situasi seperti ini.

Saya dapat memverifikasi sertifikat SSL yang sedang dicoba adalah yang saya harapkan dengan membandingkan nomor seri.

masukkan deskripsi gambar di sini

Bagi saya @Jason Kleban jawaban adalah masalah yang sebenarnya, tetapi ini bisa menjadi utilitas yang sangat berguna untuk memeriksa pernyataan dasar Anda tentang sertifikat apa yang sedang dimuat.

Simon_Weaver
sumber
Wow, terima kasih banyak. Satu-satunya solusi yang berhasil untuk saya.
Fernando Silva
1

Jika Anda perlu menggunakan port di luar rentang 44300-44399, berikut ini solusinya:

  • Buat situs baru di IIS (bukan Express)
  • Ikat HTTPS ke port yang Anda butuhkan
  • Untuk Sertifikat SSL, pilih IIS Express Development Certificate
  • Setelah situs dibuat, hentikan, karena sebenarnya tidak perlu dijalankan

Ini mendaftarkan sertifikat IIS Express Development dengan port itu dan merupakan cara termudah yang saya temukan untuk memenuhi persyaratan kisaran 44300-44399.

trnelson
sumber
0

Saya baru saja membangun kembali komputer saya. Utas ini memberi saya petunjuk, di mana saya menyadari dalam pengaturan proyek> Web, proyek dikonfigurasi untuk menggunakan HTTP dan port HTTP. Dengan memperbarui ke HTTPS dan port HTTPS yang benar, semuanya mulai berfungsi lagi.

Sam
sumber
0

Untuk mengikuti jawaban lain tentang pengaturan port SSL antara 44300 dan 44399, saya tidak dapat mengubah properti SSL Diaktifkan di Visual Studio, atau menetapkan URL SSL tertentu. Jawaban lain, seperti memperbaiki IIS Express tidak membantu. Solusinya adalah masuk ke folder .vs yang paralel dengan file sln, buka subfolder config, dan kemudian edit file applicationhost.config. Kemudian, saya menambahkan garis https secara manual dan memulai kembali VS.

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

Dalam kasus saya, saya hanya lupa bahwa saya memiliki pengaturan yang mengikat untuk (dalam kasus saya) https: // localhost: 44300 dalam IIS penuh. Anda tidak dapat memiliki keduanya!

James Ellis-Jones
sumber
Anda dapat memiliki keduanya, selama keduanya tidak berjalan secara bersamaan.
trnelson
0

Dalam kasus saya, url localhost dialihkan ke https: // localhost ketika saya sedang debug. Ini terjadi dari satu momen ke momen lainnya, tanpa mengubah apa pun. Saya memecahkan masalah ini dengan membuat ulang yang sulit ke browser. Sini tautannya

jaimenino
sumber