2016-04-13 1 views
0

Un Service Cloud Microsoft Azure a un rôle Web qui est défini comme celui-ci dans la définition du service:SSL validation du certificat réussit parfois et échoue parfois lorsque les clients se connectent à un Azure Cloud Service

<ServiceDefinition name="Magic" schemaVersion="" xmlns="[WHATEVER]"> 
    <WebRole name="MagicRole"> 
     <Sites> 
     <Site name="Web" > 
      <Bindings> 
      <Binding name="HttpIn" endpointName="HttpIn" /> 
      <Binding name="HttpsIn" endpointName="HttpsIn" /> 
      </Bindings> 
     </Site> 
     </Sites> 
     <Endpoints> 
     <InputEndpoint name="HttpIn" protocol="http" port="80" /> 
     <InputEndpoint name="HttpsIn" protocol="https" 
      port="443" certificate="ServiceCert"/> 
     </Endpoints> 
     <Certificates> 
     <Certificate name="ServiceCert" 
      storeLocation="LocalMachine" storeName="My" /> 
     </Certificates> 
    </WebRole> 
</ServiceDefinition> 

Le service travaille juste bien pendant des mois. Récemment, les utilisateurs ont commencé à signaler des problèmes obscurs lors de l'établissement de la connexion SSL au service.

Safari sur iOS est rapporté dire qu'il est incapable de vérifier l'identité du serveur, cURL est rapporté à-dire qu'il est incapable d'obtenir un certificat d'émetteur locale et tiers outils de validation SSL tels que this et this sont signalés à dire certificat est incorrectement installé.

Le problème n'est pas reproduit constamment. Parfois, les demandes réussissent et parfois elles échouent. Des outils tiers signalent parfois que le service est correctement configuré et signalent parfois qu'il est mal configuré.

Rien n'a été changé au service de deux semaines avant que les utilisateurs ont commencé à rapporter ces problèmes.

Ce qui pourrait causer ce problème?

Répondre

1

Votre définition de service est rompue. Azure documentation a été récemment mis à jour pour afficher la configuration appropriée. L'élément Certificats doit répertorier tous les certificats intermédiaires de la chaîne de confiance du certificat de service. Les certificats intermédiaires ne seront liés à aucun point de terminaison, ils doivent juste être listés. Voici comment:

<Certificates> 
    <Certificate name="IntermediateCAForServiceCert" 
     storeLocation="LocalMachine" storeName="CA" /> 
    <!-- List all intermediate certificates from the chain 
    when the chain contains more than one intermediate--> 
    <Certificate name="ServiceCert" 
     storeLocation="LocalMachine" storeName="My" /> 
</Certificates> 

Avec une telle configuration, le certificat intermédiaire est installé dans le magasin local et IIS peut y trouver et servir aux clients (ainsi que le certificat de service) afin que les clients peuvent valider la chaîne de certificats de service.

Avec votre configuration, vous verrez probablement « ça marche » de toute façon en raison du comportement non documenté quelque part profondément dans Windows/IIS. Ce answer montre des preuves. En résumé, lorsque le certificat de service est installé dans l'instance de rôle, quelque chose dans le middleware tente de récupérer les certificats intermédiaires manquants de l'infrastructure de l'autorité de certification et de les stocker localement (pas dans le magasin de certificats). Si la récupération réussit, IIS a le certificat et peut le servir aux clients. Si la récupération échoue (problèmes de réseau, infrastructure de l'autorité de certification temporairement indisponible, etc.), IIS ne sert que le certificat de service.

Rappelez-vous il y a un équilibreur de charge devant votre rôle Web. Des demandes différentes peuvent arriver à différentes instances. Si votre service évolue et que de nouvelles instances sont lancées, elles peuvent ne pas être en mesure d'extraire les intermédiaires et les requêtes qui leur parviennent génèrent des réponses sans intermédiaires, ce qui rend les utilisateurs mécontents. Certaines instances peuvent être déplacées ou ré-images et ne parviennent pas à extraire les intermédiaires qui entraîneront le même problème.

La ligne de fond de votre définition de service entraîne un comportement de service peu fiable. Liste les intermédiaires sous Certificats élément pour résoudre ce problème.

+0

Pouvez-vous inclure le lien vers la documentation Azure mise à jour dans votre réponse, s'il vous plaît? –

+0

@GauravMantri Terminé. – sharptooth