web-dev-qa-db-fra.com

IIS Express - Faire fonctionner SSL

Je ne parviens pas à obtenir IIS Express pour accepter des connexions sécurisées pour un projet VS2010 MVC3 que je développe. Je peux le faire accepter des connexions non sécurisées sur le port 80, mais pas sécurisé sur le port 443.

J'ai pris les mesures suivantes, basées sur Google:

1) Localisation de l'empreinte numérique SHA1 pour mon IIS certificat auto-signé Express Server via l'exécution de ce qui suit sur une ligne de commande VS2010:

certmgr.exe /c /s /r localMachine MY

Le résultat était 9B088F80 A4FC3141 28F62890 70BA1FC4 49FDD009. J'ai appris plus tard que je dois supprimer les espaces lors de l'utilisation de l'empreinte numérique.

2) Supprimé le certificat lié au port 443 en exécutant ce qui suit sur une invite de ligne de commande élevée:

netsh http delete sslcert ipport=0.0.0.0:443

3) Généré un nouveau GUID en exécutant Créer GUID hors du menu Outils VS2010. Dans mon cas, j'ai obtenu B0421A5B-FF61-47CE-892D-11AA3A9C7D2A.

4) Installation du certificat auto-signé sur le port 443 en exécutant ce qui suit sur une invite de ligne de commande élevée:

netsh http add sslcert ipport=0.0.0.0:443 certhash=9B088F80A4FC314128F6289070BA1FC449FDD009 appid={B0421A5B-FF61-47CE-892D-11AA3A9C7D2A}

5) Modification de l'ACL en exécutant ce qui suit à partir d'une invite de ligne de commande élevée:

netsh http add urlacl url=https://localhost:443/ user=everyone

6) Modification du fichier application.config pour IIS Express en ajoutant une liaison pour le port 443 et le protocole https. La section sites du fichier a fini par ressembler à ceci:

        <sites>
        <site name="Development Web Site" id="1" serverAutoStart="true">
            <application path="/">
                <virtualDirectory path="/" physicalPath="%IIS_BIN%\AppServer\empty_wwwroot" />
            </application>
            <bindings>
                <binding protocol="https" bindingInformation="*:443:localhost" />
                <binding protocol="http" bindingInformation="*:80:localhost" />
            </bindings>
        </site>
        <siteDefaults>
            <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
            <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
        </siteDefaults>
        <applicationDefaults applicationPool="IISExpressAppPool" />
        <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>

7) Redémarrez le service http en exécutant ce qui suit à une invite de ligne de commande élevée:

net stop http
net start http

8) Modification de l'URL du projet dans l'onglet Web de la page de propriétés de mon projet MVC comme suit:

http://localhost/

L'enregistrement de la page de propriétés du projet a déclenché une reconfiguration du serveur après avoir effectué cette modification.

Lorsque je lance l'application MVC à partir de VS2010, elle est correctement liée à http: // localhost (sur le port 80, la valeur par défaut; je n'ai pas inclus toutes les étapes pour obtenir IIS Express pour fonctionner avec des connexions non sécurisées/normales sur le port 80, mais ce sont essentiellement des étapes 5 à 7, mais en se concentrant sur http et le port 80, pas https et le port 443).

Cependant, en essayant de passer à une action qui nécessite https, je reçois une erreur de "connexion refusée au serveur".

Qu'est-ce que je fais mal?

59
user553671

Après avoir défini un projet pour utiliser IISExpress, appuyez sur F4 lorsque le projet est sélectionné dans l'explorateur de solutions pour afficher les propriétés et dans l'ensemble de propriétés SSL Enable set true et sous SSL URL définissez l'URL avec le port (443 dans votre cas) que vous souhaitez pour le SSL.

Cela fonctionne pour moi sans passer sous le capot et le certificat auto-signé était automatique.

Pour exécuter le projet sur cette URL par défaut, vous pouvez cliquer avec le bouton droit sur le projet, sélectionner les propriétés, puis Web et remplacer l'URL du projet par https: // localhost: 44

75
jbtule

Je suis tombé sur la réponse.

À l'étape 6, je modifiais le mauvais fichier IIS Express application.config. Il s'avère qu'il existe un fichier de configuration "maître" dans le répertoire de base de l'application (par exemple, C:\Program Files (x86)\IIS Express\AppServer, sur mon système), qui est celui que j'ai modifié.

Le deuxième et fichier correct à modifier est celui de la zone Données utilisateur (par exemple, C:\Users\Mark.ARCABAMA\Documents\IISExpress\config, sur mon système).

6
user553671

Si vous avez suivi les étapes de jbtule et que SSL ne fonctionne toujours pas, assurez-vous que votre port est au format :443XX.

Visual Studio l'a fait automatiquement pour le premier projet sur lequel j'ai activé SSL, mais tous les projets suivants semblent avoir des ports SSL aléatoires. La modification de la structure 443 ci-dessus sous le Project > Web UI l'a obtenu et travaille pour moi.

6
shloosh

Je voudrais juste ajouter la solution qui m'a aidé avec le même problème.

VS a montré une URL SSL qui était https://[an IP, not localhost]:44367

L'URL était réservée, que j'ai trouvée avec netsh http show urlacl

J'ai ensuite couru netsh http delete urlacl https://[an IP, not localhost]:44367, a redémarré VS, a désactivé SSL en définissant SSL sur false, puis à nouveau. Cela a corrigé l'URL SSL.

0
Vegard Stenvik

J'ai récemment eu un problème très similaire avec VS 2019 et IIS Epress. J'ai essayé de changer le http en https pour pouvoir utiliser ADFS. (Msg: ce site est inaccessible localhost ne permet pas la connexion) ).

Après un peu plus de recherches, j'ai essayé de basculer la propriété "Exiger SSL" de true à false et de revenir à true. Cela a déclenché une mise à jour du fichier applicationhost.config (.... Vs\ProjectName\config\applicationhost.config) qui a créé une nouvelle liaison SSL avec un nouveau numéro de port pour le protocole https. J'ai donc modifié tous les liens avec le nouveau port proposé (dans la propriété web du projet, le fichier de configuration et la configuration ADFS) et ça marche. Conclusion, il n'est pas nécessaire que le port http soit le même que https même pour le même site.

0
Med SOMAI