Connexion SSL / Réinitialisation de la connexion avec IISExpress

140

J'utilise le nouveau Visual Studio 2013 avec IISExpress pour la première fois (serveur de développement ASP.net précédemment utilisé sur VS2010). Je rencontre des problèmes en essayant de déboguer mon projet.

Voici ce que je vois dans Chrome:

Impossible d'établir une connexion sécurisée avec le serveur. Cela peut être un problème avec le serveur ou cela peut nécessiter un certificat d'authentification client que vous n'avez pas. Code d'erreur: ERR_SSL_PROTOCOL_ERROR

J'ai mis à jour mon fichier Properies -> Web afin que l'URL du projet utilise maintenant une URL https. Cependant, après cela, j'obtiens maintenant une nouvelle erreur lors du lancement:

La connexion à localhost a été interrompue. Code d'erreur: ERR_CONNECTION_RESET

Merci

Kevin
la source
Vérifiez ma réponse à une question similaire stackoverflow.com/questions/28195505/…
Bogac
1
Publier ici car il peut facilement être manqué dans les réponses ci-dessous. Si la réponse acceptée ne fonctionne pas pour vous, essayez plutôt ceci: stackoverflow.com/questions/20036984/…
IWriteApps
Changer le numéro de port, ça marche pour moi.
torun

Réponses:

47

Si vous utilisez URLRewrite pour forcer les connexions SSL dans votre web.config, il réécrit probablement votre adresse d'hôte local pour forcer https. Si le débogage avec SSL activé n'est pas important pour vous et que vous utilisez URLRewrite, envisagez l'ajout <add input="{HTTP_HOST}" pattern="localhost" negate="true" />dans la section de réécriture de votre fichier web.config. Cela arrêtera la réécriture pour toutes les adresses d'hôte local mais la laissera en place dans un environnement de production. Si vous n'utilisez pas URLRewrite ou avez besoin de déboguer à l'aide de SSL, http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx peut vous aider. C'est pour VS2010, mais cela devrait également suffire pour VS2013.

Djroedger
la source
7
Je l'ai fait fonctionner en ajoutant cette ligne à URLrewrite ET en modifiant le port pour qu'il soit dans la plage ": 44300-: 44398" (voir la réponse ci-dessous par uosef)
Rubanov
OUI! Après quelques heures à avoir failli perdre la tête, c'est ce qui m'a aidé!
waka
363

J'obtenais ERR_CONNECTION_RESET car mon numéro de port d' application configuré dans Visual Studio 2013 / IIS Express n'était PAS dans la plage : 44300-: 44398 . (Je ne me souviens pas avoir dû ignorer les avertissements pour sortir de cette plage.) Changer le numéro de port en quelque chose dans cette plage est tout ce que j'avais à faire pour le faire fonctionner.

J'ai remarqué cela après avoir examiné la netsh http show sslcert > sslcert.txtsortie et quelque chose en cliquant avec des trucs que j'ai lus récemment sur les numéros de port.

Jason Kleban
la source
53
Je regrette seulement de n'avoir qu'une seule voix positive à donner pour ce poste. Comment ai-je résolu ce genre de non-sens avant SO?
quillbreaker
6
Vous pouvez également utiliser netsh http add sslcert ...pour ajouter le port que vous souhaitez utiliser. Utile dans certains cas.
brazilianldsjaguar
3
Crikey cela a mangé beaucoup d'heures, je ne reviendrai jamais ... netshà la rescousse, c'est digne d'un article de blog ...
Jim
3
J'ai trouvé que cette plage de numéros de port est documentée dans la section Utilisation d'un port SSL personnalisé de la gestion des échecs de liaison d'URL dans la documentation IIS Express .
Schmalls
2
Toujours travaillé avec Visual Studio 2017 / IIS Express 10
TvdH
87

Assurez-vous de supprimer tous les certificats «localhost» précédents, car ils pourraient entrer en conflit avec celui généré par IIS Express. J'ai eu cette même erreur (ERR_SSL_PROTOCOL_ERROR), et il m'a fallu plusieurs heures pour enfin la comprendre après avoir essayé de nombreuses "solutions". Mon erreur était que j'avais créé mon propre certificat «localhost» et qu'il y en avait deux. J'ai dû supprimer les deux et faire recréer IIS Express.

Voici comment vous pouvez vérifier et supprimer le certificat 'localhost':

  • Au début, tapez -> mmc.exe
  • Fichier -> Ajouter / supprimer un composant logiciel enfichable ...
  • Sélectionnez Certificats -> Ajouter> -> Compte d'ordinateur -> Ordinateur local
  • Vérifiez sous Certificats> Personnel> Certificats
  • Assurez-vous que le certificat localhost existant a un nom convivial «Certificat de développement IIS Express». Sinon, supprimez-le. Ou si plusieurs, supprimez tout.

Sur Visual Studio, sélectionnez projet et sous l'onglet des propriétés, activez SSL = true. Enregistrez, construisez et exécutez. IIS Express générera un nouveau certificat «localhost».

Remarque: si cela ne fonctionne pas, essayez ceci: assurez-vous de désactiver IIS Express sur le projet VS et d'arrêter toutes les applications en cours d'exécution avant de supprimer le certificat 'localhost'. En outre, vous pouvez aller dans 'Panneau de configuration> Programmes' et Réparer IIS Express.

ShaTin
la source
2
Dans mon cas, les paramètres de certificat IIS ont été perdus, mais les certificats étaient sur le disque. La configuration des certificats SSL et la mise à jour de la liaison HTTPS sur le site Web ont aidé. Il est important de redéfinir la liaison https même si le certificat ssl est déjà sélectionné dans la zone de liste déroulante.
opewix
10
Il fallait réparer IIS Express. Maintenant fonctionnait parfaitement. Merci
Homam
1
Je vous remercie. Dans mon cas, j'avais supprimé accidentellement le certificat de mon ordinateur. Je l'ai trouvé quand j'ai essayé d'exécuter cette commande et il a lancé en disant: "L'ajout de certificat SSL a échoué, Erreur: 1312 Une session de connexion spécifiée n'existe pas. Il se peut qu'elle ait déjà été terminée." 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
C'était ça! Dupliquer les certificats et a dû faire la réparation est une partie expresse aussi.
madamission le
36

Je résume les étapes qui m'ont aidé à résoudre ce problème:

  1. Assurez-vous que la plage de ports SSL (utilisée par IIS express) est comprise entre 44300 et 44398

Pendant l'installation, IIS Express utilise Http.sys pour réserver les ports 44300 à 44399 pour l'utilisation de SSL. Cela permet aux utilisateurs standard (sans privilèges élevés) d'IISExpress de configurer et d'utiliser SSL. Pour plus de détails à ce sujet, reportez-vous ici

  1. Exécutez la commande ci-dessous en tant qu'administrateur dans l'invite de commande. Cela produira les liaisons de certificat SSL dans l'ordinateur. Dans cette liste, découvrez le certificat utilisé par IIS express pour le port correspondant:

netsh http afficher sslcert> sslcert.txt

  1. Recherchez les éléments ci-dessous dans le sslcert.txt (dans mon cas, IIS express fonctionnait sur le port 44300)

IP: port : 0.0.0.0:44300

Hash de certificat : eb380ba6bd10fb4f597cXXXXXXXXXX

ID de l'application : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. Regardez également dans la console de gestion IIS Express (RUN (Ctrl + R) -> inetmgr.exe) et trouvez si le certificat correspondant existe dans les certificats de serveur

(Cliquez sur ServerRoot -> sous la section IIS () -> Open the Server Certificates)

  1. Si votre hôte local utilise par défaut un autre certificat que celui répertorié à l'étape 3, continuez avec les étapes ci-dessous

netsh http supprimer sslcert ipport = 0.0.0.0: 44300

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

Le New_Certificate_Hash sera votre certificat par défaut lié à votre hôte local (que nous avons trouvé à l'étape 4) ou celui que vous souhaitez ajouter en tant que nouveau certificat.

PS Merci pour votre réponse uosɐſ (qui m'a aidé à résoudre ce problème)

Karthik
la source
8
Ha, changer le port de 53xxx à 44300 a fait l'affaire pour moi.
cdonner
J'ai dû le faire après le passage d'IIS à IISExpress
K0D4
2
Changer le port a également fonctionné pour moi. Est-ce que quelqu'un sait pourquoi les ports doivent être dans cette plage et où ils sont configurés?
Jim
Changement de port pour la victoire! Et idem pour le commentaire de Jim sur la raison pour laquelle les ports doivent être dans la gamme 44300-44398?
TChadwick
Pendant l'installation, IIS Express utilise Http.sys pour réserver les ports 44300 à 44399 pour l'utilisation de SSL. Cela permet aux utilisateurs standard (sans privilèges élevés) d'IISExpress de configurer et d'utiliser SSL. Pour plus de détails à ce sujet, reportez-vous ici -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…
Karthik
26

Le problème que je rencontrais avait à voir avec moi, à un moment donné, en activant HSTS pour localhost et en ne réalisant pas que cela briserait mon http: // localhost: someport dans IIS Express.

HSTS dit au navigateur (Chrome dans mon cas) de TOUJOURS demander une URL en utilisant HTTPS. Donc, même si je n'avais même pas activé SSL pour mon application MVC 5, le navigateur essaierait toujours d'accéder à mon site en utilisant HTTPS dans l'URL au lieu de HTTP.

Le correctif?

  1. Surfez sur chrome: // net-internals / # hsts
  2. Dans la section de suppression, saisissez "localhost" et supprimez l'enregistrement de Chrome.
Chat Botté
la source
1
Oui, les hst peuvent être une cause de ce problème. Cela a fait le ttrink pour moi, merci.
Kosmo
12

Aucune des options ci-dessus n'a fonctionné pour moi. J'ai dû faire ce qui suit:

  1. IIS Express 8.0 désinstallé
  2. Suppression de toutes les configurations dans mon répertoire Documents pour IIS Express
  3. Réinstallé IIS Express 8.0
  4. J'ai supprimé le projet sur ma machine locale et téléchargé une version propre pour TFS
  5. J'ai couru le projet - il a ensuite fonctionné sur SSL et je suis capable de déboguer

J'ai les étapes de ce fil.

J'espère que cela t'aides.

lopezbertoni
la source
2
Je viens de désinstaller iis express et de le réinstaller. maintenant ça marche
Xin
5
Dans mon cas, il suffisait de réparer l'installation IIS (dans le Panneau de configuration).
romanoza
Et les gens paient de l'argent à Microsoft pour cela? À quel point le logiciel doit-il être conçu de manière incroyable pour que le seul correctif soit une désinstallation et une réinstallation complètes?!
Jez
@Jez - Non, c'est gratuit.
Eric Kelly
6

Dans mon cas, j'ai créé un certificat auto-signé et je l'ai fait fonctionner, sauf que j'obtenais une erreur dans le navigateur car le certificat n'était pas fiable. J'ai donc déplacé le certificat dans le dossier Autorités de certification racines de confiance> Certificats dans le composant logiciel enfichable Certificats. Cela a fonctionné, puis j'ai fermé Visual Studio pour la journée.

Le lendemain, j'ai commencé mon projet et j'ai reçu l'erreur mentionnée dans la question initiale. Le problème est que le certificat avec lequel vous avez configuré IISExpress doit exister dans le dossier Personnel> Certificats ou HTTPS cessera de fonctionner. Une fois IIS Express démarré avec succès, vous pouvez faire glisser le certificat vers l'emplacement approuvé. Il continuera à fonctionner jusqu'à ce que vous redémarriez IIS Express.

Ne voulant pas me soucier de faire glisser le certificat d'avant en arrière à chaque fois, je place simplement une copie du certificat aux deux endroits et maintenant tout fonctionne bien.

moribvndvs
la source
2
Vous pouvez copier + coller un certificat dans le composant logiciel enfichable de certificat comme s'il s'agissait d'un fichier normal. Il m'a fallu des années pour le découvrir.
Simon_Weaver
6

J'ai le même problème dans Visual Studio 2015. Parce que j'utilise la liaison SSL dans 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>

Et je peux résoudre le problème avec la réponse de Monsieur Djroedger. En remplaçant

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

avec

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

dans mon web.config, donc mon code est

<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
la source
4

J'avais ce problème, j'avais configuré mon site pour global require https dans FilterConfig.cs.

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

J'avais oublié de changer l'url du projet en https: à partir de ce tutoriel http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- sql-database / sous ENABLE SSL partie 4. Cela a causé les erreurs que vous obteniez.

gsmith
la source
4

Le problème que j'ai eu était lié à la réponse de @Jason Kleban, mais j'ai eu un petit problème avec mes paramètres dans les propriétés de Visual Studio pour IIS Express.

Assurez-vous qu'après avoir modifié le port pour qu'il soit compris entre 44300 et 44399, l'adresse commence également par HTTPS

entrez la description de l'image ici

Développeur Newteq
la source
3

Un autre problème qui m'est arrivé deux fois:
dans IIS Expressapplicationhost.config l'ordre des liaisons importe. Une liaison peut avoir priorité sur votre liaison SSL, ce qui la rend inopérante.

Exemple:

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

Vous avez peut-être ajouté une liaison similaire à la seconde pour pouvoir accéder à votre WebService de l'extérieur localhost. Comme cette liaison écoute sur n'importe quelle adresse, elle semble remplacer la liaison SSL bien qu'un port différent ait été utilisé.

Retirez la liaison diabolique ou déplacez-la vers le bas.

Thibault D.
la source
Cela a résolu le problème pour moi. Merci!
richb
3

La suppression des répertoires IISExpress et vs et l'utilisation de la plage de ports SSL de 44300 à 44399 (inclus) de cet article a fonctionné pour moi

Luba Karpenko
la source
merci pour cela - a fonctionné pour moi sauf que je n'ai pas été invité à faire confiance au cert dans VS - je suis trop paresseux pour faire quoi que ce soit à ce sujet, je vais donc ignorer les avertissements et continuer!
Dave
2

Ceci est anecdotique comme entendu par un collègue, mais il s'agit prétendument d'un problème avec le chrome forçant https. Je lance généralement dans Firefox, donc je n'avais jamais vu ce problème auparavant. Utiliser Firefox ou ie a fonctionné pour mon collègue.

Ken Johnson
la source
1

Mon problème a été causé par Fiddler. Lorsque Fiddler plante, cela perturbe parfois vos paramètres de proxy. Le simple lancement de Fiddler semblait tout réparer (peut-être qu'il se répare en quelque sorte).

Jason
la source
1

Le « vérificateur d'installation du certificat Digicert » est souvent utile dans de telles situations.

J'ai pu vérifier que le certificat SSL tenté était celui que j'attendais en comparant le numéro de série.

entrez la description de l'image ici

Pour moi, la réponse @Jason Kleban était le problème réel, mais cela peut être un utilitaire très utile pour vérifier vos affirmations de base sur le certificat en cours de chargement.

Simon_Weaver
la source
Wow, merci beaucoup. La seule solution qui a fonctionné pour moi.
Fernando Silva
1

Si vous devez utiliser un port en dehors de la plage 44300-44399, voici une solution de contournement:

  • Créer un nouveau site dans IIS (pas Express)
  • Liez HTTPS au port dont vous avez besoin
  • Pour le certificat SSL, choisissez le certificat de développement IIS Express
  • Une fois le site créé, arrêtez-le, car il n'a pas besoin d'être en cours d'exécution

Cela enregistre le certificat de développement IIS Express avec ce port et c'est le moyen le plus simple que j'ai trouvé pour contourner l'exigence de la plage 44300-44399.

trnelson
la source
0

Je viens de reconstruire mon ordinateur. Ce fil de discussion m'a donné les indices, où j'ai réalisé dans les paramètres du projet> Web, le projet était configuré pour utiliser HTTP et le port HTTP. En le mettant à jour vers HTTPS et le bon port HTTPS, tout a recommencé à fonctionner.

Sam
la source
0

Pour suivre d'autres réponses sur la définition du port SSL entre 44300 et 44399, je n'ai pas pu modifier la propriété SSL Enabled dans Visual Studio, ni définir une URL SSL spécifique. D'autres réponses, comme la réparation d'IIS Express, n'ont pas aidé. La solution consistait à aller dans le dossier .vs parallèlement au fichier sln, à ouvrir le sous-dossier config, puis à modifier le fichier applicationhost.config. Ensuite, j'ai ajouté la ligne https manuellement et redémarré VS.

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

Dans mon cas, j'avais simplement oublié que j'avais mis en place une liaison pour (dans mon cas) https: // localhost: 44300 en intégralité IIS. Vous ne pouvez pas avoir les deux!

James Ellis-Jones
la source
Vous pouvez avoir les deux, tant qu'ils ne fonctionnent pas tous les deux en même temps.
trnelson le
0

Dans mon cas, l'url localhost a été redirigée vers https: // localhost lors du débogage. Cela s'est passé d'un moment à l'autre, sans rien changer. J'ai résolu ce problème en effectuant un rechargement dur du navigateur. Ici le lien

jaimenino
la source