Você está offline; aguardando reconexão

Como chamar um serviço da Web usando um certificado de cliente para autenticação em um aplicativo ASP.NET

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: 901183
Sumário
Este artigo descreve como passar um certificado de cliente para um Web service para autenticação de um aplicativo ASP.NET.

Observação As etapas neste artigo também se aplicam ao quando você faz uma solicitação HTTP direta usando a classe HttpWebRequest se você não chamar um serviço da Web.
INTRODUÇÃO
Com freqüência, serviços da Web devem autenticar aplicativos que chamam os serviços da Web. Os serviços da Web devem executar autenticações de chamar os aplicativos antes que os serviços da Web podem executar autorizações. Uma técnica de autenticação é exigir que aplicativos que chamam o serviço da Web para apresentar um certificado de cliente.

Quando um aplicativo ASP.NET tenta chamar um serviço da Web que usa autenticação de certificado, você receberá uma mensagem de erro "acesso negado". Quando um aplicativo de console ou um aplicativo do Microsoft Windows Forms chama o mesmo serviço da Web, você não recebe uma mensagem de erro.

Esse comportamento ocorre porque o computador mantém dois armazenamentos de certificados diferentes:
  • o armazenamento do computador local : um aplicativo ASP.NET examina esse armazenamento para localizar certificados de cliente.
  • o armazenamento de usuário local : um aplicativo de usuário interativo examina esse armazenamento para localizar certificados de cliente.
Geralmente, quando um aplicativo de usuário interativo instala um certificado de cliente, o certificado de cliente é instalado no armazenamento do usuário local. Portanto, o certificado de cliente funciona para aplicativos de usuário interativo. No entanto, o certificado de cliente não funciona para ASP.NET aplicativos.
Mais Informações
Para habilitar um aplicativo ASP.NET para usar um certificado de cliente, você deve instalar o certificado cliente no armazenamento de máquina local. Quando você instala um certificado de cliente no armazenamento de máquina local, o certificado de cliente está disponível apenas para contas de usuário no grupo Administradores e para o usuário que instalou o certificado de cliente. Portanto, você deve conceder acesso para o certificado de cliente para a conta de usuário que é usada para executar o aplicativo ASP.NET.

Observação Você deve ter o Microsoft .NET Framework 1.1 Service Pack 1 (SP1) instalado para usar certificados de cliente no armazenamento de máquina local.

Além disso, quando o aplicativo ASP.NET chama o serviço da Web, o aplicativo deve exportar o certificado cliente de armazenamento de certificados e adicione o certificado de cliente para a chamada de serviço da Web.

Instalar o certificado de cliente e conceder acesso para a conta de usuário

Para instalar o certificado de cliente e para conceder acesso para o certificado de cliente para a conta de usuário que é usada para executar o aplicativo ASP.NET, execute estas etapas.

Etapa 1: Instalar o certificado de cliente no armazenamento de máquina local

Se você tiver um certificado de cliente em um arquivo PKCS # 12 (.pfx), você pode usar a ferramenta de configuração do Microsoft Windows HTTP Services certificados (WinHttpCertCfg.exe) para instalar o certificado de cliente e para conceder acesso para o certificado de cliente para contas de usuário adicionais, como a conta do serviço de rede. Para fazer isso, execute as seguintes etapas:
  1. Baixe e instale o Microsoft Windows HTTP Services certificado Configuration Tool. Para obter a ferramenta, visite o seguinte site:
  2. Execute o seguinte comando em um prompt de comando:
    winhttpcertcfg -i PFXFile - c LOCAL_MACHINE\My - um IWAM_TESTMACHINE -p PFXPassword
    Observação PfxFile é o nome do arquivo pfx. Password é a senha para o arquivo .pfx. Se o arquivo não requer uma senha, omita o -p parâmetro.

    Normalmente, o arquivo WinHttpCertCfg.exe está localizado na seguinte pasta:
    C:\Program Files\Windows Resource Kits\Ferramentas
Se você não tem acesso para um arquivo .pfx e você tiver instalado serviços de certificados Microsoft em um computador que esteja executando o Microsoft Windows Server 2003 ou Microsoft Windows 2000 Server, pode solicitar e instalar o certificado de cliente diretamente no armazenamento de máquina local. Para fazer isso, execute as seguintes etapas:
  1. Fazer logon para o computador cliente com uma conta de usuário que tenha credenciais de administrador.
  2. No Microsoft Internet Explorer, visite a autoridade de certificação (CA) site. Por exemplo, se o servidor da CA é denominado CAServer, visite o seguinte site:
    http://CAServer/certsrv
  3. Em Selecione uma tarefa , clique em Solicitar um certificado e clique em solicitação avançada de certificado .
  4. Clique em criar e enviar uma solicitação para essa CA .
  5. Na Solicitação avançada de certificado do formulário, insira um nome e endereço de email.
  6. Em Type of Certificate Needed seção, clique em Certificado de autenticação de cliente .
  7. Na seção Opções de chaves , clique para selecionar a caixa de seleção Armazenar certificado no armazenamento certificados de computador local e, em seguida, clique em Enviar .

    Observe a identificação de solicitação para o certificado de cliente.
  8. Em Possível violação de script diálogo caixa, clique em Sim .
  9. Depois que a autoridade de certificação tiver emitido o certificado de cliente, clique em Home e, em seguida, clique em Exibir o status de uma solicitação de certificado pendente .
  10. Em Selecione a solicitação de certificado que você deseja exibir , clique em solicitação de certificado que você enviou na etapa 7.
  11. Clique em instalar este certificado e clique em Sim na caixa de diálogo Possível violação de script .

Etapa 2: Configurar acesso para o certificado de cliente

Nesta etapa, você deve conceder permissão para a conta ASP.NET acessar o certificado de cliente que é armazenado no armazenamento local do computador. A conta do serviço de rede é a conta padrão para executar aplicativos da Web no Windows Server 2003. Portanto, você deve conceder acesso para o certificado para a conta do serviço de rede. Se você tiver configurado uma conta personalizada para executar o ASP.NET, você deve conceder acesso para a conta personalizada.

Observação No Microsoft Internet Information Server (IIS) 5.0, ASP.NET executa sob o ASPNET conta e não sob o serviço de rede da conta. Portanto, você deve para conceder permissões para a conta ASPNET em um computador que está executando o IIS 5.0.

Para conceder acesso para uma conta de usuário específico, execute o seguinte comando em um prompt de comando:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "AccountName"
Observação AccountName é o nome de uma conta de computador local ou uma conta de domínio. IssuedToName é o nome da empresa ou domínio para a qual o certificado de cliente foi emitido. Este comando contém uma seqüência de pesquisa não diferencia maiúsculas de minúsculas. A seqüência de caracteres de pesquisa localiza o primeiro certificado enumerado que tenha um nome de assunto que contém a seqüência de caracteres.

A seguinte linha de comando é um exemplo de como conceder acesso para o certificado de cliente para a conta serviço de rede no Microsoft Internet Information Services (IIS) 6.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "NetworkService"
A seguinte linha de comando é um exemplo sobre como conceder acesso para o certificado de cliente para a conta ASPNET no IIS 5.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "ASPNET"
Observação Quando você usa a ferramenta de configuração do Windows HTTP Services certificado, você pode combinar o processo de importar o certificado de cliente e o processo de configuração de acesso para o certificado de cliente em uma única etapa. Por exemplo, a seguinte linha de comando executa ambos os processos:
Winhttpcertcfg.exe -i PFXFile - c LOCAL_MACHINE\My - a “ AccountName

Etapa 3: Copiar o certificado de cliente de armazenamento do usuário local para o armazenamento de máquina local

Se um aplicativo interativo, como um aplicativo Windows Forms ou um aplicativo de linha de comando pode acessar o certificado de cliente, o certificado de cliente já está armazenado no armazenamento do usuário local. No entanto, se um aplicativo de serviço, como um aplicativo ASP.NET não é possível acessar o mesmo certificado de cliente, o certificado de cliente não pode ser armazenado no armazenamento de máquina local.

Esta etapa explica como copiar um certificado de cliente no armazenamento do usuário local para o armazenamento do computador local usando o Assistente para exportação de certificados.

Observação Se o certificado de cliente já estiver no armazenamento de máquina local, ou se você conseguir instalar o certificado de cliente diretamente no armazenamento de máquina local como na etapa 1, vá para a etapa 4. No entanto, se você usar a etapa 3, você deverá, em seguida, retornar para a etapa 2 para conceder acesso para o certificado do cliente.

Para copiar o certificado de cliente para o armazenamento do computador local, execute estas etapas:
  1. Clique em Iniciar , clique em Executar , digite mmc e, em seguida, clique em OK .
  2. No menu arquivo , clique em Adicionar/remover Snap-in e, em seguida, clique em Adicionar .
  3. Na caixa de diálogo Adicionar Snap-ins autônomos , clique em certificados , clique em Adicionar , clique em conta de computador , clique em Avançar e em seguida, clique em Concluir .
  4. Na caixa de diálogo Adicionar Snap-ins autônomos , clique em certificados , clique em Adicionar , clique em minha conta de usuário e em seguida, clique em Concluir .
  5. Clique em Fechar e, em seguida, clique em OK .
  6. Para exportar o certificado de cliente de armazenamento do usuário local, execute as seguintes etapas:
    1. Expanda Certificates - Current User , expanda pessoal e em seguida, clique em certificados .
    2. Clique o certificado de cliente com o botão direito do mouse, clique em Todas as tarefas , clique em Exportar e, em seguida, clique em Avançar .
    3. Se a opção Sim, exportar a chave particular não estiver disponível, o aplicativo ASP.NET não é possível usar o certificado de cliente. Você deve obter outro certificado de cliente. Para fazer isso, siga as instruções na etapa 1 e etapa 2. Caso contrário, clique em Sim, exportar a chave particular e, em seguida, clique em Avançar duas vezes.
    4. Na caixa senha e na caixa Confirmar senha , digite uma senha e, em seguida, clique em Avançar .
    5. Na caixa nome do arquivo , digite um nome de arquivo. Clique em Avançar e, em seguida, clique em Concluir .
    6. No Assistente para exportação de certificados de diálogo caixa, clique em OK .
  7. Para importar o certificado de cliente para o armazenamento do computador local, execute essas etapas:
    1. Expanda certificados (computador local) e expanda particulares .
    2. Clique com o botão direito do mouse em certificados , clique em Todas as tarefas , clique em Importar e, em seguida, clique em Avançar .
    3. Na caixa nome do arquivo , digite o nome de arquivo que você especificou na etapa 6e e, em seguida, clique em Avançar .
    4. Na caixa senha , digite a senha que você especificou na etapa 6 d e, em seguida, clique em Avançar duas vezes.
    5. Clique em Concluir e, em seguida, clique em OK .

Etapa 4: Instalar o certificado raiz da autoridade de certificação

Se o certificado de cliente já foi assinado por uma CA externa como VeriSign ou se você já tiver instalado o certificado raiz para a autoridade de certificação, você pode omitir a etapa 4.

Por padrão, o Windows tem os certificados de raiz de muitos ACs externas já pré-instalado no armazenamento de certificados de raiz confiáveis.
Verifique se o certificado raiz está instalado
Para verificar se o certificado raiz para a autoridade de certificação está instalado, execute essas etapas:
  1. Clique em Iniciar , clique em Executar , digite mmc e, em seguida, clique em OK .
  2. No menu arquivo , clique em Adicionar/remover Snap-in e, em seguida, clique em Adicionar .
  3. Na caixa de diálogo Adicionar Snap-ins autônomos , clique em certificados , clique em Adicionar , clique em conta de computador , clique em Avançar e em seguida, clique em Concluir .
  4. Clique em Fechar e, em seguida, clique em OK .
  5. Expanda certificados (computador local) , expanda Autoridades de certificação raiz confiáveis e, em seguida, clique em certificados .
  6. No painel à direita, confirme se o certificado raiz da CA que você deseja usar está listado.
Instalar o certificado raiz
Se o certificado raiz da CA que você deseja usar não estiver listado, você deve instalar o certificado raiz. Se o certificado raiz da autoridade de certificação que você deseja usar tiver sido emitido para você em um arquivo de certificado como um arquivo .cer, um arquivo .der ou um arquivo .pfx, siga estas etapas:
  1. Expanda certificados (computador local) , clique com o botão direito em Autoridades de certificação raiz confiáveis , clique em Todas as tarefas e, em seguida, clique em Importar .
  2. No Assistente para importação de certificados de caixa de diálogo, clique em Avançar e, em seguida, na caixa nome do arquivo , digite o nome do arquivo de certificado e, em seguida, clique em Avançar duas vezes.
  3. Clique em Concluir e, em seguida, clique em OK .
Solicitar o certificado raiz
Se a autoridade de certificação que você deseja usar estiver incluída no banco de dados serviços de certificados Microsoft instalação, você pode solicitar o certificado raiz. Para fazer isso, execute as seguintes etapas:
  1. No Internet Explorer, visite o site da autoridade de certificação. Por exemplo, se o servidor da CA é denominado CAServer, visite o seguinte site:
    http://CAServer/certsrv
  2. Clique em baixar um certificado de autoridade de certificação, cadeia de certificado ou CRL e, em seguida, clique em Baixar CA certificado .
  3. Na caixa de diálogo Download de arquivo , clique em Salvar .
  4. Na caixa de diálogo Salvar como , digite o local onde você deseja salvar o arquivo de certificado e, em seguida, clique em Salvar .
  5. Depois de salvar o arquivo de certificado raiz, use as etapas na seção "Instalar o certificado raiz" para instalar o arquivo de certificado no armazenamento do autoridades de certificação raiz confiáveis.

Chamar o Web service

Depois de instalar o certificado de cliente no armazenamento local do computador ou o armazenamento de usuário local, você pode acessar o certificado de cliente do aplicativo ASP.NET para chamar o serviço da Web. As etapas para acessar o certificado de cliente são o mesmo para um aplicativo Windows Forms ou para um ASP.NET aplicativo.

Se você estiver usando o .NET Framework 1.1, você deve primeiro exporte a chave para um arquivo codificado em DER. Você deve exportar a chave porque a classe System.Security.Cryptography.X509Certificates.X509Certificate não contém métodos para acessar diretamente os detalhes de um certificado de um armazenamento de certificados. Portanto, o aplicativo deve ler os detalhes de um certificado de um arquivo codificado em DER.

Observação Web Services Enhancements 2.0 para Microsoft .NET (WSE) fornece uma maneira para um aplicativo recuperar os detalhes de um certificado diretamente de um armazenamento de certificados.

O código de exemplo translation from VPE for Csharp a seguir mostra como chamar um serviço da Web, passando um certificado de cliente para autenticação.
using System.Security.Cryptography.X509Certificates;...  public void CallWebService()  {    // TODO: Replace <C:\WSClientCert.cer> with the path of your certificate file.    string certPath = @"<C:\WSClientCert.cer>";    // Create an instance of the Web service proxy.    WebSvc.math mathservice = new WebSvc.math();    // TODO: Replace <https://wsserver/securemath/math.asmx> with a valid URL.    mathservice.Url = @"<https://wsserver/securemath/math.asmx>";    // Create an X509Certificate object from the information     // in the certificate export file, and then add the certificate to the     // ClientCertificates collection of the Web service proxy.    mathservice.ClientCertificates.Add(        X509Certificate.CreateFromCertFile(certPath));    long lngResult = 0;    try    {      lngResult = mathservice.Add(Int32.Parse(operand1.Text),           Int32.Parse(operand2.Text));      string result = lngResult.ToString();    }    catch(Exception ex)    {      if(ex is WebException)      {        WebException we = ex as WebException;        WebResponse webResponse = we.Response;        throw new Exception("Exception calling method. " + ex.Message);      }    }  }

Web Services Enhancements 2.0 para Microsoft .NET

Web Services Enhancements 2.0 para Microsoft .NET (WSE) é um Microsoft .NET classe biblioteca para criar serviços da Web usando os protocolos de serviços da Web mais recentes. Esses protocolos incluem o seguinte:
  • WS-Security
  • WS-SecureConversation
  • WS-Trust
  • WS-Policy
  • O WS-SecurityPolicy
  • WS-Addressing
  • WS-anexos
Observação WSE não está incluído como parte do .NET Framework. Para obter o WSE, visite o seguinte site: Não é necessário usar qualquer um desses protocolos para acessar uma Web serviço que requer autenticação de certificado de cliente. No entanto, convém usar a classe Microsoft.Web.Services2.Security.X509 . A classe Microsoft.Web.Services2.Security.X509 contém métodos para acessar diretamente um certificado de cliente no armazenamento de certificados. Se você usar esses métodos, não é necessário exportar o certificado para um arquivo.

O código de exemplo translation from VPE for Csharp a seguir mostra como encontrar o primeiro certificado chamado SecureMathClient no armazenamento de máquina local. Em seguida, este código de exemplo usa o certificado para chamar o método Add de matemática serviço da Web. O serviço da Web de cálculo requer certificados de cliente.
...  // TODO: Replace <SecureMathClient> with the name of the client certificate.  string certName = "<SecureMathClient>";  // WSE 2.0 method  X509CertificateStore store =    X509CertificateStore.LocalMachineStore(X509CertificateStore.MyStore);  store.OpenRead();  // Look for the first certificate that is named SecureMathClient.  // Look in the local machine store.  X509CertificateCollection col=     (X509CertificateCollection)store.FindCertificateBySubjectString(certName);  X509Certificate cert =null;  try  { // This sample obtains the first matching certificate from the collection.    cert = col[0];  }   catch(Exception ex)  {    throw new Exception("Certificate not Found!");  }  // Create an instance of the Web service proxy.  math mathservice = new math();  // TODO: Replace <https://wsserver/securemath/math.asmx> with a valid URL.  mathservice.Url = @"<https://wsserver/securemath/math.asmx>";  mathservice.ClientCertificates.Add(cert);  long lngResult = 0;  try  {    lngResult = mathservice.Add(Int32.Parse(operand1.Text),         Int32.Parse(operand2.Text));    result.Text = lngResult.ToString();  }  catch(Exception ex)  {    if(ex is WebException)    {      WebException we = ex as WebException;      WebResponse webResponse = we.Response;      throw new Exception("Exception calling method. " + ex.Message);    }  }
Referências
Para obter mais informações sobre a classe System.Security.Cryptography.X509Certificates.X509Certificate , visite o seguinte site da Web Microsoft Developer Network (MSDN): Para obter mais informações sobre como chamar um site com segurança avançada usando um aplicativo ASP.NET, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
817854CORRECÇÃO: O aplicativo ASP.NET não pode enviar um certificado de cliente para um site com segurança avançada

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 901183 - Última Revisão: 12/13/2007 17:57:49 - Revisão: 3.2

Microsoft .NET Framework 1.1

  • kbmt kbcode kbwebservices kbcertservices kbhowto kbinfo KB901183 KbMtpt
Comentários
amp;t=">