Terminazione SSL e ASP.NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 910444 - Visualizza i prodotti a cui si riferisce l?articolo.
Articolo di ASP.NET Support Voice

Terminazione SSL e ASP.NET

Per personalizzare questo articolo in base alle proprie esigenze, gli utenti sono invitati a inviare le proprie idee sugli argomenti a cui sono interessati e sui problemi di cui desiderano trovare la soluzione nei prossimi articoli della Knowledge Base e negli articoli di Support Voice. ╚ possibile inviare idee, commenti e suggerimenti tramite il modulo Ask For It. Un collegamento al modulo Ŕ disponibile anche alla fine di questo articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Benvenuti all'articolo di ASP.NET Support Voice. Mi chiamo Jerry Orman. Ho lavorato con Microsoft per pi¨ di cinque anni dedicandomi in particolare alle tecnologie Web, come i prodotti e le tecnologie Microsoft FrontPage e Microsoft SharePoint. Durante l'ultimo anno ho lavorato a Microsoft ASP.NET come tecnico del supporto. Questo mese, parler˛ della terminazione SSL e di ASP.NET. Voglio in particolare concentrarmi sui problemi derivanti da una configurazione del server. Prender˛ ora in esame la terminazione SSL e alcuni effetti collaterali di questa configurazione sull'applicazione in uso.

La terminazione SSL Ŕ una configurazione in cui il server Web che esegue il codice invia e riceve il traffico su HTTP e tra il server Web e i client Ŕ presente un dispositivo che crittografa e decrittografa i dati. In questa configurazione, i client inviano e ricevono il traffico HTTPS. La configurazione della terminazione SSL Ŕ simile a quella riportata di seguito:
Client <? HTTPS ?>dispositivo SSL <? HTTP ?> server Web
Illustrer˛ ora due problematiche che si verificano in Microsoft ASP.NET 2.0 con questa configurazione e alcuni modi per risolvere il problema.

Problema 1

Quando si posiziona il puntatore del mouse su una voce di menu nel controllo Menu di ASP.NET 2.0, viene visualizzato il seguente messaggio di errore:
La pagina contiene oggetti protetti e non protetti. Visualizzare gli oggetti non protetti?
Si presuppone che l'applicazione sia protetta, che sia in uso il protocollo SSL e che non siano stati aggiunti controlli che eseguono il rendering di un percorso assoluto di un indirizzo HTTP. PerchÚ allora viene visualizzato questo messaggio?

Il problema Ŕ dovuto al fatto che il controllo Menu crea uno script Java che utilizza un oggetto iFrame per compilare il menu a comparsa. ╚ necessario assegnare al frame un URL iniziale. Per evitare un round trip non necessario al server per gli scenari non SSL, lo script utilizza about:blank per l'URL. Tuttavia, il browser lo considera un indirizzo non sicuro e pertanto viene visualizzato l'errore precedente. Per ulteriori informazioni su questo problema in relazione a Microsoft Windows SharePoint Services, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
837850 Visualizzazione del messaggio "La pagina contiene oggetti protetti e non protetti" quando si fa clic su Visualizzazione Esplora risorse in una raccolta documenti in Windows SharePoint Services o in SharePoint Team Services da Microsoft
Ho fatto volutamente riferimento agli scenari non SSL perchÚ, se il traffico HTTPS fosse ricevuto dal server Web invece che dal dispositivo SSL, lo script Java creato dal controllo Menu aggiungerebbe una riga di codice per impostare l'origine dell'oggetto iFrame su un indirizzo HTTPS di una pagina sul server. In questo modo viene iniziata un'altra richiesta, ma si evita il messaggio di errore. Se si esegue la distribuzione in questo tipo di ambiente, Ŕ possibile imporre l'aggiunta dello script Java per evitare il messaggio di errore aggiungendo questo codice alla pagina contenente il controllo 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>
 
L'ideale sarebbe avere il menu in una classe MasterPage o in una classe UserControl per poter aggiungere questo codice una sola volta.

Problema 2

╚ possibile che, quando l'attributo requireSSL dell'elemento <forms> Ŕ impostato su true, il server risponda con reindirizzamenti ripetuti alla pagina di accesso FormsAuthentication. Questo problema Ŕ causato da una modifica nel modo in cui il metodo FormsAuthenticationModule gestisce l'attributo requireSSL. Se si imposta l'attributo requireSSL su true, il metodo FormsAuthenticationModule crea un cookie con l'attributo secure impostato. In .NET Framework 1.1 si verifica lo stesso comportamento. Quando si utilizza l'attributo secure, il client passerÓ il cookie solo al server se il client utilizza SSL. ╚ perfetto, dal momento che il client sta effettivamente utilizzando SSL. Si supponga di avere una pagina SecurePage.aspx a cui gli utenti anonimi non possono accedere. Con il protocollo SSL e l'attributo requireSSL, in una richiesta iniziale a SecurePage.aspx si verrÓ a creare il traffico seguente:
?>Il client esegue una richiesta GET per SecurePage.aspx.

<?Il server risponde con HTTP 302 (reindirizzamento) alla pagina di accesso.

?>Il client esegue una richiesta GET per Login.aspx.

<?Il server risponde con 200 OK. Viene eseguito il rendering della pagina di accesso al client.

?>Il client esegue una richiesta POST a Login.aspx.

<?Il server risponde con 302 (reindirizzamento) a SecurePage.aspx. L'intestazione Set Cookie viene inviata al client con l'attributo secure.

?>Il client esegue una richiesta GET a SecurePage.aspx. Il cookie viene passato dal momento che il client sta utilizzando SSL.

<?Il server risponde con 302 (reindirizzamento) alla pagina di accesso.

Nell'ultima richiesta il reindirizzamento viene eseguito a causa di una modifica nella classe FormsAuthenticationModule. In ASP.NET 2.0 Ŕ stata aggiunta un'ulteriore verifica per determinare se l'utente sta passando un cookie sicuro su una richiesta non SSL. ASP.NET 2.0 restituisce la classe FormsAuthenticationTicket se la proprietÓ FormsAuthentication.RequireSSL Ŕ impostata su false o se l'attributo Request.IsSecure Ŕ impostato su true.
  • La proprietÓ FormsAuthentication.RequireSSL Ŕ impostata su false se l'attributo requireSSL Ŕ impostato su false nel file di configurazione.
  • L'attributo Request.IsSecure Ŕ impostato su true se il server Web riceve il traffico SSL.
PoichÚ, in questo scenario, il server Web non riceve il traffico SSL e l'attributo requireSSL Ŕ impostato su true, entrambe le verifiche restituiscono false. Di conseguenza, la classe FormsAuthenticationTicket non viene restituita e il cookie viene rimosso dall'insieme Request.Cookies.

La richiesta che l'utente sta eseguendo risulta a questo punto anonima poichÚ il server non ha ancora convalidato le credenziali dell'utente. Quando la richiesta passa attraverso la pipeline di ASP.NET, la classe UrlAuthorizationModule controlla se l'utente ha accesso alla pagina. PoichÚ un utente anonimo non ha accesso a una pagina SecurePage.aspx, la classe UrlAuthorizationModule restituisce un messaggio di errore 401 ("Accesso negato"), che causa il reindirizzamento alla pagina di accesso.

Per evitare questo problema, Ŕ innanzitutto necessario rimuovere l'attributo requireSSL dal tag <forms> nel file di configurazione. Quindi sarÓ necessario impostare a livello di codice l'attributo secure nel cookie FormsAuthentication. Questa operazione viene eseguita automaticamente dal codice seguente, sia per il cookie FormsAuthentication che per il cookie 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;
               }
          }
     }
}

Riferimenti

Per ulteriori informazioni sul controllo Menu, visitare il seguente sito Web MSDN:
http://msdn2.microsoft.com/it-it/library/2xt3t8a7(vs.80).aspx
Per ulteriori informazioni sull'attributo requireSSL della proprietÓ FormsAuthentication.RequireSSL, visitare il seguente sito Web MSDN:
http://msdn2.microsoft.com/it-it/library/system.web.security.formsauthentication.requiressl.aspx
Per ulteriori informazioni sull'attributo IsSecure della proprietÓ HttpRequest.IsSecureConnection, visitare il seguente sito Web MSDN (informazioni in lingua inglese):
http://msdn2.microsoft.com/en-us/library/system.web.httprequest.issecureconnection(vs.71).aspx
Per ulteriori informazioni sulla classe FormsAuthenticationModule, visitare il seguente sito Web MSDN:
http://msdn2.microsoft.com/it-it/library/system.web.security.formsauthenticationmodule.aspx
Per ulteriori informazioni sulla classe UrlAuthorizationModule, visitare il seguente sito Web MSDN:
http://msdn2.microsoft.com/it-it/library/system.web.security.urlauthorizationmodule.aspx


Spero che abbiate trovato utili queste informazioni per l'utilizzo della terminazione SSL e Microsoft ASP.NET. Ricordate che gli articoli di Support Voice sono pensati per voi. Come sempre, inviate liberamente le vostre idee sugli argomenti che vorreste fossero trattati nei prossimi articoli o nella Knowledge Base utilizzando il modulo Ask For It.

ProprietÓ

Identificativo articolo: 910444 - Ultima modifica: martedý 26 febbraio 2008 - Revisione: 1.3
Le informazioni in questo articolo si applicano a:
  • Microsoft ASP.NET 2.0
Chiavi:á
kbhowto kbasp KB910444
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com