IISExpress ile SSL Bağlantısı / Bağlantı Sıfırlama


140

IISExpress ile yeni Visual Studio 2013'ü ilk kez kullanıyorum (daha önce VS2010'da kullanılan ASP.net Geliştirme sunucusu). Projemde hata ayıklamaya çalışırken sorunla karşılaşıyorum.

Chrome'da gördüğüm şey bu:

Sunucu ile güvenli bir bağlantı kurulamıyor. Bu, sunucuyla ilgili bir sorun olabilir veya sahip olmadığınız bir istemci kimlik doğrulama sertifikası gerektiriyor olabilir. Hata kodu: ERR_SSL_PROTOCOL_ERROR

Proje URL'mizin şimdi bir https URL'si kullanması için Properies -> web dosyamı güncelledim. Ancak, bunu yaptıktan sonra, şimdi başlatırken yeni bir hata alıyorum:

Localhost ile bağlantı kesildi. Hata kodu: ERR_CONNECTION_RESET

Teşekkürler


Benzer bir soruya cevabımı kontrol et stackoverflow.com/questions/28195505/…
Bogac

1
Buraya gönderiyorum, çünkü aşağıdaki cevaplarda kolayca atlanabilir. Kabul edilen cevap sizin için işe yaramazsa bunun yerine şunu deneyin: stackoverflow.com/questions/20036984/…
IWriteApps

Bağlantı noktası numarasını değiştirmek benim için çalışıyor.
torun

Yanıtlar:


47

Web.config dosyanızdaki SSL bağlantılarını zorlamak için URLRewrite kullanıyorsanız, muhtemelen https'yi zorlamak için localhost adresinizi yeniden yazıyorsunuz. SSL etkinken hata ayıklama sizin için önemli değilse ve URLRewrite kullanıyorsanız, <add input="{HTTP_HOST}" pattern="localhost" negate="true" />web.config dosyanızın yeniden yazma bölümüne eklemeyi düşünün . Herhangi bir yerel ana bilgisayar adresi için yeniden yazmayı durduracak ancak bir üretim ortamında yerinde bırakacaktır. URLRewrite kullanmıyorsanız veya SSL kullanarak hata ayıklamanız gerekiyorsa, http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx yardımcı olabilir. VS2010 içindir, ancak VS2013 için de yeterli olmalıdır.


7
Bu satırı URLrewrite'a ekleyerek ve portu ": 44300-: 44398" aralığında olacak şekilde değiştirerek çalıştım (uosef tarafından aşağıdaki cevaba bakınız)
Rubanov

EVET! Birkaç saat sonra neredeyse aklımı kaybettikten sonra, bu bana yardımcı oldu!
waka

364

ERR_CONNECTION_RESET alıyordum çünkü Visual Studio 2013 / IIS Express yapılandırılmış uygulama bağlantı noktası numarası : 44300-: 44398 aralığında DEĞİL . ( Bu aralıktan çıkmak için herhangi bir uyarıyı reddetmek zorunda olduğumu hatırlamıyorum .) Bağlantı noktası numarasını bu aralıktaki bir şeyle değiştirmek, çalışmasını sağlamak için tek yapmam gereken şeydi.

Bu netsh http show sslcert > sslcert.txtçıktı ve bağlantı noktası numaraları hakkında son zamanlarda okudum şeyler tıklayarak bir şey inceledikten sonra fark ettim .


53
Ben sadece bu yazı için vermek için bir upvote var pişman. SO'dan önce bu tür saçmalıkları nasıl düzelttim?
quillbreaker

6
Kullanmak netsh http add sslcert ...istediğiniz bağlantı noktasını eklemek için de kullanabilirsiniz. Bazı durumlarda kullanışlıdır.
brazilianldsjaguar

3
Crikey bu bir sürü saat yedi asla netshkurtarmaya ... kurtarma, bu bir blog yazı layık ...
Jim


2
Visual Studio 2017 / IIS Express 10
TvdH

87

IIS Express tarafından oluşturulan sertifika ile çakışabileceğinden, önceki 'localhost' sertifikalarını kaldırdığınızdan emin olun. Aynı hatayı aldım (ERR_SSL_PROTOCOL_ERROR), ve birçok "çözüm" denedikten sonra nihayet anlaması uzun saatler sürdü. Benim hatam, kendi 'localhost' sertifikamı oluşturmuş olmam ve iki tane olmasıydı. Her ikisini de silmek zorunda kaldım ve IIS Express'in yeniden oluşturmasını istedim.

'Localhost' sertifikasını nasıl kontrol edip kaldırabileceğiniz aşağıda açıklanmıştır:

  • Başlangıçta -> mmc.exe yazın
  • Dosya -> Ek Bileşen Ekle / Kaldır ...
  • Sertifikalar -> Ekle> -> Bilgisayar hesabı -> Yerel bilgisayar'ı seçin
  • Sertifikalar> Kişisel> Sertifikalar altında kontrol edin
  • Varolan localhost sertifikasının kolay bir adı "IIS Express Geliştirme Sertifikası" olduğundan emin olun. Değilse, silin. Veya birden fazla ise tümünü silin.

Visual Studio'da proje seçin ve özellik sekmesi altında SSL = true değerini etkinleştirin. Kaydedin, oluşturun ve çalıştırın. IIS Express yeni bir 'localhost' sertifikası oluşturur.

Not: Çalışmazsa, şunu deneyin: VS projesinde IIS Express'i devre dışı bıraktığınızdan ve 'localhost' sertifikasını kaldırmadan önce üzerinde çalışan tüm uygulamaları durdurduğunuzdan emin olun. Ayrıca, 'kontrol paneli> programlar'a gidebilir ve IIS Express'i onarabilirsiniz.


2
Benim durumumda, IIS sertifika ayarları kayboldu, ancak sertifikalar diskteydi. SSL sertifikaları ayarlamak ve web sitesinde HTTPS bağlamasını güncellemek yardımcı oldu. Açılan kutuda ssl sertifikası seçilmiş olsa bile https bağını yeniden ayarlamak önemlidir.
opewix

10
IIS Express'in onarılması gerekiyordu. Şimdi mükemmel çalıştı. Teşekkürler
Homam

1
Teşekkür ederim. Benim durumumda, sertifikayı yanlışlıkla bilgisayarımdan sildim. Bu komutu çalıştırmayı denediğimde buldum ve "SSL Sertifikası eklenemedi, Hata: 1312 Belirtilen bir oturum yok. Zaten sonlandırılmış olabilir." 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

Hepsi bu kadar! Yinelenen certs ve onarım iis parçası da yapmak zorunda kaldı.
madamission

36

Bu sorunu çözmemde bana yardımcı olan adımları özetliyorum:

  1. SSL bağlantı noktası aralığının (IIS express tarafından kullanılan) 44300-44398 arasında olduğundan emin olun

Yükleme sırasında IIS Express, SSL kullanımı için 44300 ile 44399 arasındaki bağlantı noktalarını ayırmak için Http.sys kullanır. Bu, IISExpress'in standart kullanıcılarının (yükseltilmiş ayrıcalıkları olmadan) SSL'yi yapılandırmasını ve kullanmasını sağlar. Bununla ilgili daha fazla ayrıntı için buraya bakın

  1. Komut isteminde aşağıdaki komutu yönetici olarak çalıştırın. Bu işlem bilgisayarda SSL Sertifikası bağlarının çıktısını alır. Bu listeden, ilgili bağlantı noktası için IIS express tarafından kullanılan sertifikayı bulun:

netsh http show sslcert> sslcert.txt

  1. Sslcert.txt dosyasında aşağıdaki öğeleri arayın (benim durumumda IIS express 44300 bağlantı noktasında çalışıyordu)

IP: bağlantı noktası : 0.0.0.0:44300

Sertifika Karması: eb380ba6bd10fb4f597cXXXXBox

Uygulama Kimliği : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. Ayrıca IIS ekspres yönetim konsoluna (RUN (Ctrl + R) -> inetmgr.exe) bakın ve Sunucu Sertifikalarında ilgili sertifikanın bulunup bulunmadığını bulun

(IIS () -> Sunucu Sertifikalarını Aç bölümünün altındaki ServerRoot -> öğesini tıklayın)

  1. Yerel ana makineniz varsayılan olarak 3. Adım'da listelenenden farklı bir sertifika kullanıyorsa, aşağıdaki adımlarla devam edin

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_space appid = {214124cd-d05b-4309-XXX-XXXXXXX}

New_Certificate_Hash, yerel ana makinenize (4. adımda bulduğumuz) veya yeni bir sertifika olarak eklemek istediğiniz sertifikaya bağlı varsayılan sertifikanız olacaktır.

PS Cevabınız için teşekkür ederim uosɐſ (bu sorunu çözmemde bana yardımcı oldu)


8
Ha, limanı 53xxx'ten 44300'e değiştirmek benim için hile yaptı.
cdonner

IIS'den IISExpress'e geçtikten sonra bunu yapmak zorunda kaldım
K0D4

2
Limanı değiştirmek de benim için çalıştı. Bağlantı noktalarının neden bu aralıkta olması ve nerede yapılandırıldığını bilen var mı?
Jim

Kazanmak için liman değişikliği! Ve Jim'in limanların neden 44300-44398 aralığında olması gerektiğine dair yorumu için de aynı şey var?
TChadwick

Yükleme sırasında IIS Express, 44300 ile 44399 arasındaki bağlantı noktalarını SSL kullanımı için ayırmak için Http.sys kullanır. Bu, IISExpress'in standart kullanıcılarının (yükseltilmiş ayrıcalıkları olmadan) SSL'yi yapılandırmasını ve kullanmasını sağlar. Bununla ilgili daha fazla ayrıntı için buraya bakın -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…
Karthik

27

Yaşadığım sorun benimle ilgiliydi , bir noktada , localhost için HSTS'yi etkinleştiriyor ve bunun IIS Express'teki http: // localhost: someport'umu kıracağını fark etmiyordu .

HSTS, tarayıcıya (benim durumumda Chrome) DAİMA HTTPS kullanarak bir URL istemesini söyler. Bu nedenle, MVC 5 uygulamam için SSL'yi etkinleştirmeme rağmen, tarayıcı yine de HTTP yerine URL'de HTTPS kullanarak siteme erişmeye çalışacaktı.

Çözüm?

  1. Chrome'da sörf yapın: // net-internals / # hsts
  2. Silme bölümüne "localhost" girin ve kaydı Chrome'dan silin.

1
Evet, hsts bu sorunun bir nedeni olabilir. Bu benim için bir şey yaptı, teşekkürler.
Kosmo

12

Yukarıdaki seçeneklerin hiçbiri benim için çalışmadı. Aşağıdakileri yapmak zorunda kaldım:

  1. Yüklü IIS Express 8.0
  2. IIS Express için Belgeler dizinimdeki tüm yapılandırmaları sildim
  3. Yeniden yüklenmiş IIS Express 8.0
  4. Yerel makinemdeki projeyi sildim ve TFS için temiz bir sürüm indirdim
  5. Projeyi çalıştırdım - daha sonra SSL üzerinden geçti ve hata ayıklayabilirim

Bu konudaki adımları aldım .

Bu yardımcı olur umarım.


2
Ben sadece ekspres i untall ve yeniden yükleyin. şimdi çalışıyor
Xin

5
Benim durumumda, yalnızca IIS kurulumunu (Denetim Masası'nda) onarmak yeterliydi .
romanoza

Ve insanlar bunun için Microsoft parasını mı ödüyor? Yazılımın tek düzeltmenin tam bir kaldırma ve yeniden yükleme olduğu inanılmaz derecede kötü bir şekilde tasarlanması gerekiyor mu ?!
Jez

@Jez - Hayır, ücretsiz.
Eric Kelly

6

Benim durumumda, kendinden imzalı bir sertifika oluşturdum ve çalışmasını sağladım, ancak sertifika güvenilmeyen olduğu için tarayıcıda bir hata alıyordum. Bu nedenle, sertifikayı Sertifikalar ek bileşenindeki Güvenilen Kök Sertifika Yetkilileri> Sertifikalar klasörüne taşıdım. Çalıştı ve sonra gün boyunca Visual Studio'yu kapattım.

Ertesi gün projemi başlattım ve orijinal soruda belirtilen hatayı aldım. Sorun, IISExpress'i yapılandırdığınız sertifikanın Kişisel> Sertifikalar klasöründe bulunması ya da HTTPS'nin çalışmasının durmasıdır. IIS Express başarıyla başlatıldığında, sertifikayı güvenilir konuma geri sürükleyebilirsiniz. IIS Express'i yeniden başlatana kadar çalışmaya devam eder.

Her seferinde sertifikayı ileri geri sürüklemekle uğraşmak istemiyorum, sadece her iki yere de sertifikanın bir kopyasını yerleştiriyorum ve şimdi her şey iyi çalışıyor.


2
Sertifika ek bileşeninin içine normal bir dosyaymış gibi kopyala + Yapıştır yapıştırabilirsiniz. Bunu bulmam YILLAR aldı.
Simon_Weaver

6

Visual Studio 2015'te de aynı sorun yaşıyorum. Çünkü web.config'de SSL bağlaması kullanıyorum

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

Ve sorunu Bay djroedger'ın cevabıyla çözebilirim. Değiştirerek

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

ile

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

benim web.config içine, yani benim kod

<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

Bu sorunu yaşıyordum, sitemi FilterConfig.cs içinde https gerektirecek şekilde yapılandırmıştım.

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

Proje URL'sini https olarak değiştirmeyi unutmuştum: Bu öğreticiden http://azure.microsoft.com/tr-tr/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- sql-database / ENABLE SSL bölüm 4 altında. Bu, aldığınız hatalara neden oldu.


4

Sahip olduğum sorun @Jason Kleban'ın cevabı ile ilgiliydi, ancak IIS Express için Visual Studio Properties'deki ayarlarımda küçük bir sorun yaşadım.

Bağlantı noktasını 44300 ila 44399 aralığında olacak şekilde değiştirdikten sonra, adresin HTTPS

resim açıklamasını buraya girin


3

Bana iki kez olan başka bir sorun:
IIS Express'teapplicationhost.config bağlantıların sırası önemlidir. Bir bağlamanın SSL bağlantınıza göre önceliği olabilir ve bu da çalışmamasına neden olabilir.

Misal:

<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'inize dışarıdan erişebilmek için ikincisine benzer bir ciltleme eklemiş olabilirsiniz localhost . Bu bağlama herhangi bir adresi dinlediğinden, farklı bir bağlantı noktası kullanılmasına rağmen SSL bağlantısını geçersiz kılıyor gibi görünüyor.

Kötü bağlamayı kaldırın veya aşağı hareket ettirin.


Bu benim için düzeltildi. Teşekkürler!
richb

3

IISExpress ve dizinleri vs kaldırma ve bu makaleden 44300 ila 44399 (dahil) ssl bağlantı noktası aralığı benim için çalıştı


bunun için teşekkürler - VS sertifikaya güven istenmedi dışında benim için çalıştı - Bu konuda bir şey yapmak için çok tembel değilim bu yüzden uyarıları görmezden ve devam edecek!
Dave

2

Bu, bir iş arkadaşının kulak misafiri olarak anekdottur, ancak iddia edilen bu, krom zorlayan https ile ilgili bir sorundur. Genellikle firefox'ta başlatılıyorum, bu yüzden bu sorunu daha önce görmemiştim. Firefox kullanmak ya da iş arkadaşım için çalıştı.


1

Benim sorunum Fiddler'den kaynaklandı. Fiddler çöktüğünde, zaman zaman proxy ayarlarınızla uğraşır. Sadece Fiddler'ı başlatmak her şeyi düzeltiyor gibiydi (belki de bir şekilde kendini onarır).


1

' Digicert sertifika kurulum denetleyicisi ' genellikle bu gibi durumlarda yardımcı olur.

Seri numarasını karşılaştırarak beklediğim SSL sertifikasını doğrulayabildim.

resim açıklamasını buraya girin

Benim için @ Jason Kleban cevabı asıl problemdi, ancak bu, hangi sertifikanın yüklendiğiyle ilgili temel iddialarınızı kontrol etmek için çok yararlı bir yardımcı olabilir.


Vay canına, çok teşekkür ederim. Benim için çalışan tek çözüm.
Fernando Silva

1

Eğer varsa gerek 44300-44399 aralığının bir liman dışında kullanmak, burada bir çözüm var:

  • IIS'de yeni bir site oluşturma (Express değil)
  • HTTPS'yi ihtiyacınız olan bağlantı noktasına bağlayın
  • SSL Sertifikası için IIS Express Geliştirme Sertifikası'nı seçin
  • Site oluşturulduktan sonra, gerçekten çalıştırılması gerekmediğinden durdurun

Bu, IIS Express Geliştirme sertifikasını bu bağlantı noktasına kaydeder ve 44300-44399 aralık gereksinimini karşılamanın en kolay yoludur.


0

Bilgisayarımı yeniden inşa ettim. Bu iş parçacığı bana proje ayarları> Web'de gerçekleştirdiğim ipuçlarını verdi, proje HTTP ve HTTP portunu kullanacak şekilde yapılandırıldı. HTTPS ve doğru HTTPS bağlantı noktasına güncelleyerek her şey yeniden çalışmaya başladı.


0

SSL bağlantı noktasını 44300 ile 44399 arasında ayarlama hakkındaki diğer yanıtları takip etmek için Visual Studio'da SSL Etkin özelliğini değiştiremedim veya belirli bir SSL URL'si ayarlayamadım. IIS Express'i onarma gibi diğer yanıtlar yardımcı olmadı. Çözüm, sln dosyasına paralel olarak .vs klasörüne gitmek, config alt klasörünü açmak ve daha sonra applicationhost.config dosyasını düzenlemekti. Sonra, https satırını manuel olarak ekledim ve VS'yi yeniden başlattım.

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


0

Benim durumumda, hata ayıklama sırasında localhost url'si https: // localhost'a yönlendirildi . Bu bir andan diğerine hiçbir şey değiştirmeden oldu. Tarayıcıya zor bir yeniden yükleme yaparak bunu çözdüm. İşte bağlantı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.