Exclusion de responsabilité du contenu obsolète de la base de connaissances

Cet article a été rédigé sur les produits pour lesquels Microsoft n’offre plus aucune prise en charge. Par conséquent, cet article est proposé « en l’état » et ne sera plus mis à jour.

Colonne vocale d’assistance d’ASP.NET

Terminaison SSL et ASP.NET

Pour personnaliser cette chronique selon vos besoins, nous souhaitons vous inviter à soumettre vos idées sur des sujets qui vous intéressent et des problèmes que vous voulez voir traités dans de futurs articles de la Base de connaissances et des chroniques Support Voice. Vous pouvez nous envoyer vos commentaires à l’aide de l’écran Ask For It . Il existe également un lien vers le formulaire au bas de cette colonne.
Bienvenue dans la colonne vocale d’assistance ASP.NET ! Mon nom est Jerry Orman. J’ont été avec Microsoft depuis plus de cinq ans et ont passé la plupart de mon temps consacré aux technologies liées à Web tel que Microsoft FrontPage et Microsoft SharePoint Products and Technologies. J’ai passé l’année dernière utilisation avec ASP.NET Microsoft sous la forme d’un technicien du support technique. Ce mois-ci, je vais vous parler de terminaison SSL et ASP.NET. En particulier, je souhaite se concentrer sur les problèmes résultant d’une configuration du serveur. Nous allons regarder un arrêt de SSL et des effets secondaires de la configuration de votre application.

Arrêt de SSL est une configuration dans laquelle le serveur Web exécutant votre code envoie et reçoit le trafic via HTTP, et il existe un périphérique entre vos clients et votre serveur Web qui crypte et décrypte les données. Dans cette configuration, les clients sont envoyer et recevoir le trafic HTTPS. La configuration de l’arrêt de SSL est semblable à la suivante :
Client < — HTTPS — > DISPOSITIF SSL < — HTTP — > serveur Web
Retournons maintenant sur deux problèmes dans Microsoft ASP.NET 2.0 avec cette configuration et certaines méthodes pour contourner le problème.

Problème 1

Lorsque vous survolez un élément de menu dans le contrôle d’ASP.NET 2.0, Menu , vous obtenez le message d’erreur suivant :
Cette page contient des éléments à la fois sécurisés et non sécurisés. Vous souhaitez afficher les éléments non sécurisés ?
L’application est supposée être sécurisé, vous utilisez le protocole SSL, et vous n’avez pas ajouté de tous les contrôles qui restituent un chemin absolu vers une adresse HTTP. Que se passe-t-il avec ce message ?

Ainsi, le problème est que le
Contrôle de menu émet du JavaScript qui utilise un objet iFrame pour générer le menu contextuel. Vous devez donner le cadre d’une URL de démarrage. Pour éviter un aller-retour inutile vers le serveur pour les scénarios non-SSL, le script utilise
sur : vide pour l’URL. Toutefois, le navigateur considère que cette adresse non sécurisée, afin que vous obtenez l’erreur ci-dessus. Pour plus d’informations sur ce problème en termes de Microsoft Windows SharePoint Services, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

837850 vous recevez un message « cette page contient des éléments à la fois sécurisés et non sécurisés » lorsque vous cliquez sur mode Explorateur d’une bibliothèque de documents dans Windows SharePoint Services ou SharePoint Team Services de Microsoft

Je mentionne explicitement les scénarios non-SSL, car, si le serveur Web a été reçoit le trafic HTTPS au lieu du périphérique SSL, le code JavaScript qui le contrôle Menu émet ajoutez une ligne de code pour définir la source de l’objet iFrame à une adresse HTTPS d’une page sur le serveur. Cela lance une autre demande, mais il empêche le message d’erreur. Si vous déployez dans ce type d’environnement, vous pouvez forcer l’ajout de JavaScript pour empêcher le message d’erreur en ajoutant ce code à la page contenant le contrôle de Menu .
 <script runat="server">   protected override void Render(HtmlTextWriter writer) 
{
Page.ClientScript.RegisterStartupScript(typeof(Page), "MenuHttpsWorkaround",
Menu1.ClientID + "_Data.iframeUrl='https://myserver/someblankpage.htm';", true);
base.Render(writer);
}
</script>

Dans l’idéal, vous avez le menu dans une classe de page maître ou une classe UserControl et pourriez ajouter ce code qu’une seule fois.

Problème 2

Vous observerez peut-être que, une fois que l’attribut requireSSL de le
élément < forms > a la valeur true, le serveur répond avec redirection répétée à la
Page de connexion de FormsAuthentication . Cela est dû à un changement dans la façon dont les
Méthode de FormsAuthenticationModule gère l’attribut requireSSL . Si vous définissez l’attribut requireSSL sur true, la méthode FormsAuthenticationModule crée un cookie dont l’attribut secure est défini. (Ce comportement est identique à celle de la version 1.1 de.NET Framework.) Lorsque vous utilisez l’attribut secure , le client passe uniquement le cookie au serveur si le client n’utilise pas SSL. Cette partie est formidable, car le client est en effet l’utilisation de SSL. Supposons que vous ayez une page SecurePage.aspx les utilisateurs anonymes ne peuvent pas accéder. Avec le protocole SSL et l’attribut requireSSL , vous vous retrouvez avec le trafic suivant dans une demande initiale à SecurePage.aspx :
— > client effectue une demande GET pour SecurePage.aspx.

< — serveur répond avec un HTTP 302 (redirection) à la page de connexion.

— > client effectue une demande GET pour Login.aspx.

< — le serveur répond avec un 200 OK. La page de connexion est restituée au client.

— > client effectue une demande POST vers Login.aspx.

< — serveur répond avec un 302 (redirection) à SecurePage.aspx. Définir les cookies d’en-tête est envoyé avec l’attribut secure sur le client.

— > client effectue une demande GET pour SecurePage.aspx. Cookie est passé dans la mesure où le client à l’aide de SSL.

< — le serveur répond avec un 302 (redirection) vers la page de connexion.

Vous obtenez la redirection dans la dernière demande en raison d’une modification dans la classe FormsAuthenticationModule . Une vérification supplémentaire a été ajoutée dans 2.0 ASP.NET pour déterminer si l’utilisateur passe un cookie sécurisé via une demande non-SSL. ASP.NET 2.0 renvoie la classe FormsAuthenticationTicket si la propriété FormsAuthentication.RequireSSL est définie sur false , ou si l’attribut Request.IsSecure a la valeur true.
  • La propriété FormsAuthentication.RequireSSL a la valeur false si l’attribut requireSSL a la valeur false dans le fichier de configuration.
  • L’attribut Request.IsSecure a la valeur true si le serveur Web reçoit le trafic SSL.
Étant donné que, dans ce scénario, le serveur Web ne reçoit pas le trafic SSL et l’attribut requireSSL est définie sur true, les deux contrôles retournent false. Par conséquent, la classe FormsAuthenticationTicket n’est pas retournée et le cookie est supprimé de la collection Request.Cookies .

La demande de l’utilisateur est anonyme à ce stade, car le serveur n’a pas encore validé les informations d’identification de l’utilisateur. La demande passe par le pipeline ASP.NET, la classe UrlAuthorizationModule vérifie si l’utilisateur a accès à la page. Dans la mesure où un utilisateur anonyme n’a pas accès à une page SecurePage.aspx, le
Classe UrlAuthorizationModule renvoie un message de 401 erreur (« accès refusé »), qui entraîne une redirection vers la page de connexion.

Pour éviter ce problème, vous devez d’abord supprimer l’attribut requireSSL de la balise < forms > dans le fichier de configuration. Vous devez ensuite définir par programme l’attribut secure du cookie FormsAuthentication . Le code suivant effectue cette opération pour vous, à la fois pour le
FormsAuthentication cookie et le cookie de Session .
void Application_EndRequest(object sender, EventArgs e){
if (Response.Cookies.Count > 0)
{
foreach (string s in Response.Cookies.AllKeys)
{
if (s == FormsAuthentication.FormsCookieName || s.ToLower() == "asp.net_sessionid")
{
Response.Cookies[s].Secure = true;
}
}
}
}

Références

Pour plus d’informations sur le contrôle de Menu , visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :Pour plus d’informations sur l’attribut requireSSL de la propriété FormsAuthentication.RequireSSL , visitez le site Web MSDN suivant :Pour plus d’informations sur l’attribut IsSecure de la propriété HttpRequest.IsSecureConnection , visitez le site Web MSDN suivant :Pour plus d’informations sur la classe FormsAuthenticationModule , visitez le site Web MSDN suivant :Pour plus d’informations sur la classe UrlAuthorizationModule , visitez le site Web MSDN suivant :

J’espère que ces informations utiles lorsque vous utilisez l’arrêt de SSL et Microsoft ASP.NET. N’oubliez pas que les colonnes de Support Voice sont pour vous ! Comme toujours, n’hésitez à soumettre des idées sur des sujets que vous souhaitez traités dans de futurs des colonnes ou dans la Base de connaissances à l’aide de la
Formulaire Ask For It .
Propriétés

ID d'article : 910444 - Dernière mise à jour : 27 janv. 2017 - Révision : 1

Commentaires