Je voudrais héberger un site Web qui devrait écouter des sous-domaines (par exemple, sub.domain.com) ainsi que plusieurs sites Web qui vivent juste sous un domaine de deuxième niveau (par exemple, domain2.com, domain3.com) avec IIS et SSL.
Pour le site Web avec les sous-domaines, j'ai un certificat générique (* .domain.com) et j'ai également des certificats spécifiquement pour les autres sites (domain2.com et domain3.com).
Une telle configuration peut-elle être hébergée sur le même IIS (si cela est important, dans un rôle Web Azure Cloud Service)?
Le problème est exactement ce que titobf a expliqué ici : pour cela, nous aurions besoin de liaisons en utilisant SNI, avec l'hôte spécifié pour domain2 / 3.com, puis un site Web fourre-tout avec * host pour * .domain.com. Mais dans la pratique, peu importe la façon dont les liaisons sont configurées si le site Web fourre-tout est activé, il recevra également toutes les demandes adressées à domain2 / 3.com (bien qu'il ne soit supposé correspondre qu'en dernier recours).
Toute aide serait appréciée.
Pas encore résolu
Malheureusement, je n'ai pas été en mesure de résoudre ce problème: il semble être résolu uniquement de manière extrêmement compliquée, comme la création d'un logiciel qui se situe entre IIS et Internet (donc essentiellement un pare-feu) et modifie les demandes entrantes (avant la prise de contact SSL! ) pour autoriser le scénario. Je suis assez confiant que ce n'est pas possible avec IIS, quoi qu'il arrive, même pas à partir d'un module natif.
Je dois clarifier: nous utilisons Azure Cloud Services, nous avons donc une contrainte supplémentaire de ne pas pouvoir utiliser plusieurs adresses IP (voir: http://feedback.azure.com/forums/169386-cloud-services-web-and -worker-role / suggestions / 1259311-multiple-ssl-and-domains-to-one-app ). Si vous pouvez pointer plusieurs adresses IP vers votre serveur, vous n'avez pas ce problème car vous pouvez également créer des liaisons pour les adresses IP, et celles-ci fonctionneront ensemble avec des liaisons génériques. Plus précisément, vous avez besoin d'une IP pour le site générique (mais comme vous avez maintenant une IP distincte, vous n'aurez plus à configurer une liaison de nom d'hôte générique) et une autre IP pour tous les autres non génériques.
En fait, notre solution de contournement consistait à utiliser un port SSL non standard, 8443. La liaison SNI est donc réellement liée à ce port, elle fonctionne donc avec les autres liaisons. Pas sympa, mais une solution de contournement acceptable pour nous jusqu'à ce que vous puissiez utiliser plusieurs IP pour les rôles Web.
Les fixations non fonctionnelles maintenant
La première liaison https est SNI avec un certificat simple, la seconde n'est pas SNI, avec un certificat générique.
Le site http fonctionne, ainsi que le site SNI https, mais celui avec la liaison générique donne une «erreur HTTP 503. Le service n'est pas disponible». (sans aucune autre information, pas de suivi de la demande d'échec ou d'entrée du journal des événements).
Enfin le faire fonctionner fondamentalement
L'activation du journal de suivi ETW comme Tobias décrit a montré que l'erreur racine était la suivante:
Demande (ID de demande 0xF500000080000008) rejetée pour la raison: UrlGroupLookupFailed.
Pour autant que je sache, cela signifie que http.sys n'est pas en mesure d'acheminer la demande vers un point de terminaison disponible.
La vérification des points d'extrémité enregistrés avec a netsh http show urlacl
montré qu'il y avait effectivement quelque chose d'enregistré pour le port 443:
Reserved URL : https://IP:443/
User: NT AUTHORITY\NETWORK SERVICE
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;NS)
La suppression de ceci a netsh http delete urlacl url=https://IP:443/
finalement activé ma liaison SSL.
logman start httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl -ets
2) faire la demande 503 3) arrêter le journal de suivi. exécuter:logman stop httptrace -ets
4) écrire le journal de suivi dans le fichier. run:tracerpt.exe httptrace.etl -of XML -o httptrace.xml
5) vérifiez la raison de 503 dans le fichier xml et postez-le ici.Réponses:
Baris a raison! Le certificat SSL configuré sur une liaison IP: PORT (exemple: 100.74.156.187:443) a toujours la priorité dans http.sys! La solution est donc la suivante:
Ne configurez pas une liaison IP: 443 pour votre certificat de remplacement générique, mais configurez une liaison *: 443 (* signifie "Tous non attribués") pour cela .
Si vous avez configuré votre certificat générique sur le point de terminaison SSL Azure Cloud Service (comme je l'ai fait), vous devez modifier la liaison SSL créée par Azure Cloud Service Runtime (IISconfigurator.exe) de IP: PORT à *: PORT. J'appelle la méthode suivante dans OnStart de mon rôle Web:
La capture d'écran suivante montre une configuration de travail de notre service cloud. Veuillez ne pas être confus au sujet des ports non standard. La capture d'écran provient du service cloud émulé.
Une autre chose à mentionner: ne changez pas toutes les liaisons en * car la liaison HTTP (port 80) ne fonctionne qu'avec la liaison IP: PORT dans le service cloud déployé. Quelque chose d'autre est lié à IP: 80, donc *: 80 ne fonctionne pas car * signifie "tout non attribué" et l'adresse IP est déjà attribuée ailleurs dans http.sys.
la source
Assurez-vous que votre liaison fourre-tout n'est pas de type IP: Port. Lorsqu'une liaison IP: Port existe pour une liaison HTTPS alors que SNI n'est pas requis, cette liaison aura toujours la priorité. Pour votre cas fourre-tout, utilisez une liaison *: Port (* étant le tout non attribué).
la source
IIS prend en charge SNI, même dans les rôles Web de service cloud azur bien que vous ne puissiez pas accéder à la configuration via le portail et si vous le faites sur la boîte après le déploiement, il sera effacé avec votre prochain déploiement. La solution est d'automatiser la configuration. Jetez un œil ici pour plus de détails:
http://www.vic.ms/microsoft/windows-azure/multiples-ssl-certificates-on-windows-azure-cloud-services/
la source