Término de SSL e o ASP.NET

Traduções deste artigo Traduções deste artigo
ID do artigo: 910444 - Exibir os produtos aos quais esse artigo se aplica.
Coluna de voz de suporte do ASP.NET

Término de SSL e o ASP.NET

para personalizar esta coluna às suas necessidades, queremos convidá-lo para enviar suas idéias sobre tópicos que interessam a você e problemas que você deseja ver abordados artigos do Knowledge Base no futuro e colunas de voz de suporte. Você pode enviar suas idéias e comentários usando o formulário Ask For It. Há também um link para o formulário na parte inferior desta coluna.
Expandir tudo | Recolher tudo

Neste artigo

Bem-vindo à coluna ASP.NET suporte voz! Meu nome é Jerry Andrade. Eu foram com a Microsoft há mais de cinco anos e passaram a maior parte do meu tempo enfoca relacionada à Web tecnologias como o Microsoft FrontPage e Microsoft SharePoint Products e tecnologias. Passei o último ano trabalhando com Microsoft ASP.NET como um engenheiro de suporte. Este mês, vou falar sobre terminação do SSL e o ASP.NET. Em particular, desejo se concentrar em problemas resultantes de uma configuração do servidor. Vamos dar uma olhada no término de SSL e alguns efeitos colaterais dessa configuração em seu aplicativo.

Término de SSL é uma configuração em que o servidor Web executar o código envia e recebe tráfego sobre HTTP, e há um dispositivo entre o servidor Web e seus clientes que criptografa e descriptografa os dados. Nessa configuração, os clientes estão enviando e recebendo tráfego HTTPS. A configuração de terminação do SSL é semelhante à seguinte:
Cliente < ? HTTPS ? > SSL dispositivo < ? HTTP ? > servidor Web
Agora vamos mais dois problemas que surgem em Microsoft ASP.NET 2.0 com esta configuração e algumas maneiras de solucionar o comportamento.

Problema 1

Quando você passa sobre um item de menu no controle menu do ASP.NET 2.0, você receber a seguinte mensagem de erro:
Esta página contém itens seguros e. Você deseja exibi-los?
O aplicativo deve para ser seguro, você estiver usando o protocolo SSL e você não adicionou os controles que são processamento um caminho absoluto para um HTTP endereço. O que há com esta mensagem?

Bem, o problema é que o controle menu emitem um pouco de JavaScript que usa um objeto iFrame para criar o menu fly-out. Você precisará fornecer o quadro de uma URL inicial. Para evitar fazendo um round trip desnecessário ao servidor para cenários de não-SSL, o script usa sobre: em branco para a URL. No entanto, o navegador considera esse endereço não-seguro, assim, obter o erro acima. Para obter mais informações sobre esse problema em termos de Microsoft Windows SharePoint Services, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
837850Você recebe uma mensagem "Esta página contém itens seguros e" quando você clicar em Exibir Explorer em uma biblioteca de documentos no Windows SharePoint Services ou no SharePoint Team Services da Microsoft
Explicitamente menciono cenários não SSL porque, se o servidor Web foi receber o tráfego HTTPS em vez do dispositivo SSL, o JavaScript que emite o controle menu adicionaria uma linha do código para definir a origem do objeto iFrame para um endereço HTTPS de uma página no servidor. Isso iniciará outra solicitação, mas impede que a mensagem de erro. Se você estiver implantando nesse tipo de ambiente, você pode forçar a adição de JavaScript para impedir que a mensagem de erro, adicionando este código para a página que tem o controle 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>
 
Idealmente, você teria no menu de uma classe MasterPage ou uma classe UserControl e poderá adicionar esse código apenas uma vez.

Problema 2

Você pode notar que, quando você tem o atributo requireSSL do <forms> elemento definido como true , o servidor responde com redirecionamentos repetidos para a página de login FormsAuthentication . Isso é causado por uma alteração na maneira como o método FormsAuthenticationModule manipula o atributo requireSSL . Se você definir o atributo requireSSL como true , o método FormsAuthenticationModule cria um cookie que tem o atributo seguro definido. (Esse comportamento é o mesmo do .NET Framework 1.1.) Quando você usa o atributo de segurança , o cliente só passará o cookie para o servidor se o cliente estiver usando SSL. Essa parte é ótima, porque o cliente está realmente usando SSL. Vamos supor que você tenha uma página SecurePage.aspx que os usuários anônimos não podem acessar. Com o protocolo SSL e o atributo requireSSL , você acaba com o seguinte tráfego em uma solicitação inicial para SecurePage.aspx:
? > Cliente faz uma solicitação GET para SecurePage.aspx.

<? Servidor responde com um HTTP 302 (redirecionar) para a página de logon.

? > Cliente faz uma solicitação GET para login.aspx.

<? Servidor responde com um 200 OK. A página de logon é processada para cliente.

? > Cliente faz uma solicitação POST para login.aspx.

<? Servidor responde com um 302 (redirecionar) para SecurePage.aspx. Conjunto de cabeçalho de cookie é enviado com oatributo de segurança para o cliente.

? > Cliente faz uma solicitação GET para SecurePage.aspx. Cookie é passado como o cliente está usando SSL.

<? Servidor responde com um 302 (redirecionar) novamente para a página de login.

Você pode obter o redirecionamento na última solicitação devido a uma alteração na classe FormsAuthenticationModule . Uma verificação adicional foi adicionada no ASP.NET 2.0 para determinar se o usuário está passando um cookie seguro através de uma solicitação não SSL. O ASP.NET 2.0 retorna a classe FormsAuthenticationTicket se a propriedade FormsAuthentication.RequireSSL é definida como false ou se o atributo Request.IsSecure é definido como true .
  • A propriedade FormsAuthentication.RequireSSL é definida como false se o atributo requireSSL é definido para false no arquivo de configuração.
  • O atributo Request.IsSecure é definido como true se o servidor Web recebe tráfego SSL.
Pois, nesse cenário, o servidor Web não está recebendo tráfego SSL e o atributo requireSSL é definido como true , ambas as verificações retornará false . Como resultado, a classe FormsAuthenticationTicket não será retornada e o cookie é removido da coleção Request.cookies .

A solicitação que o usuário está fazendo é anônima neste momento porque o servidor ainda não foi validado as credenciais do usuário. Como a solicitação passa pelo pipeline do ASP.NET, a classe UrlAuthorizationModule verifica se o usuário tem acesso para a página. Como um usuário anônimo não tem acesso a uma página SecurePage.aspx, a classe UrlAuthorizationModule retorna uma mensagem de 401 erro ("acesso negado"), que resulta em um redirecionamento para a página de logon.

Para evitar esse comportamento, você primeiramente ter que remover o atributo requireSSL o <forms> marca no arquivo de configuração. Em seguida, você precisará programaticamente definir o atributo seguro em FormsAuthentication cookie. O código a seguir faz isso para você, para o cookie FormsAuthentication e o cookie de sessão .
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;
               }
          }
     }
}

Referências

Para obter mais informações sobre o controle menu do , visite o seguinte site da Web Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/2xt3t8a7(vs.80).aspx
Para obter mais informações sobre o atributo requireSSL da propriedade FormsAuthentication.RequireSSL , visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication.requiressl.aspx
Para obter mais informações sobre o atributo IsSecure da propriedade HttpRequest.IsSecureConnection , visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.httprequest.issecureconnection(vs.71).aspx
Para obter mais informações sobre a classe FormsAuthenticationModule , visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationmodule.aspx
Para obter mais informações sobre a classe UrlAuthorizationModule , visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.security.urlauthorizationmodule.aspx


Espero que você encontre essa informação útil quando você estiver usando o término de SSL e Microsoft ASP.NET. Lembre-se, as colunas de voz de suporte são para você! Como sempre, vontade enviar idéias sobre tópicos que você deseja no futuro abordada colunas ou na Base de dados de Conhecimento usando o formulário Ask For It.

Propriedades

ID do artigo: 910444 - Última revisão: quinta-feira, 22 de novembro de 2007 - Revisão: 1.3
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 2.0
Palavras-chave: 
kbmt kbhowto kbasp KB910444 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 910444
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

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