Como chamar um serviço Web utilizando um certificado de cliente para autenticação numa aplicação Web do ASP.NET

Traduções de Artigos Traduções de Artigos
Artigo: 901183 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve como transferir um certificado de cliente para um serviço Web para autenticação de uma aplicação Web do ASP.NET.

Nota Os passos descritos neste artigo aplicam-se também o para quando efectua um pedido HTTP directo utilizando a classe HttpWebRequest se não invocar um serviço Web.

INTRODUÇÃO

Frequentemente, serviços Web tem de autenticar aplicações que chamam os serviços Web. Os serviços da Web tem de efectuar autenticações de chamar aplicações antes dos serviços Web podem efectuar autorizações. Uma técnica de autenticação é requerem aplicações que chamam o serviço Web para apresentar um certificado de cliente.

Quando uma aplicação Web ASP.NET tenta contactar um serviço Web que utiliza a autenticação de certificados, poderá receber uma mensagem de erro "acesso negado". Quando uma aplicação de consola ou uma aplicação do Microsoft Windows Forms chama o mesmo serviço Web, não recebe uma mensagem de erro.

Este comportamento ocorre porque o computador mantém dois arquivos de certificados diferente:
  • o arquivo de computador local : uma aplicação Web ASP.NET procura este arquivo para localizar os certificados de cliente.
  • o arquivo de utilizador local : uma aplicação do utilizador interactivo procura neste arquivo, para localizar os certificados de cliente.
Normalmente, quando uma aplicação do utilizador interactivo é instalado um certificado de cliente, o certificado de cliente é instalado no arquivo de utilizador local. Por conseguinte, o certificado de cliente funciona para aplicações do utilizador interactivo. No entanto, o certificado de cliente não funciona para Web do ASP.NET aplicações.

Mais Informação

Para activar uma aplicação Web do ASP.NET utilizar um certificado de cliente, tem de instalar o certificado de cliente no arquivo de computador local. Quando instala um certificado de cliente no arquivo de computador local, o certificado de cliente só está disponível para contas de utilizador no grupo Administradores e para o utilizador que instalou o certificado de cliente. Por conseguinte, tem de conceder acesso ao certificado de cliente para a conta de utilizador é utilizado para executar a aplicação Web do ASP.NET.

Nota Tem de ter o Microsoft .NET Framework 1.1 Service Pack 1 (SP1) instalado para utilizar certificados de cliente no arquivo de computador local.

Além disso, quando a aplicação Web ASP.NET chama o serviço Web, a aplicação deve exportar o certificado de cliente do arquivo de certificados e adicione o certificado de cliente para a chamada de serviço Web.

Instalar o certificado de cliente e conceder acesso para a conta de utilizador

Para instalar o certificado de cliente e conceder acesso ao certificado de cliente para a conta de utilizador é utilizado para executar a aplicação Web do ASP.NET, siga estes passos.

Passo 1: Instalar o certificado de cliente no arquivo de computador local

Se tiver um certificado de cliente num ficheiro PKCS # 12 (.pfx), pode utilizar a ferramenta de configuração do Microsoft Windows HTTP dos serviços de certificados (WinHttpCertCfg.exe) para instalar o certificado de cliente e para conceder acesso ao certificado de cliente para contas de utilizador adicionais tais como a conta do serviço de rede. Para o fazer, siga estes passos:
  1. Transfira e instale o HTTP do Windows Microsoft ferramenta de configuração dos serviços de certificados. Para obter a ferramenta, visite o seguinte Web site da Microsoft:
    http://www.microsoft.com/downloads/details.aspx?familyid=c42e27ac-3409-40e9-8667-c748e422833f
  2. Execute o seguinte comando numa linha de comandos:
    winhttpcertcfg -i PFXFile - c LOCAL_MACHINE\My - a IWAM_TESTMACHINE -p PFXPassword
    Nota PfxFile é o nome do ficheiro PFX. Password é a palavra-passe para o ficheiro PFX. Se o ficheiro não requer uma palavra-passe, omita o -p parâmetro.

    Normalmente, o ficheiro de WinHttpCertCfg.exe está localizado na seguinte pasta:
    C:\Program Files\Windows recursos Kits\Tools
Se não tem acesso para um ficheiro .pfx e tiver instalado o Microsoft Certificate Services no computador que está a executar o Microsoft Windows Server 2003 ou o Microsoft Windows 2000 Server, pode pedir e instalar o certificado de cliente directamente no arquivo de computador local. Para o fazer, siga estes passos:
  1. Inicie sessão computador cliente utilizando uma conta de utilizador que tenha credenciais de administrador.
  2. No Microsoft Internet Explorer, visite a autoridade de certificação (AC) Web site. Por exemplo, se o servidor da AC é o nome CAServer, visite o seguinte Web site:
    http://CAServer/certsrv
  3. Em Seleccionar uma tarefa , clique em Pedir um certificado e clique em pedido de certificado avançado .
  4. Clique em criar e submeter um pedido a esta AC .
  5. No Pedido de certificado avançado do formulário, introduza um nome e endereço de correio electrónico.
  6. Em Tipo de certificado necessário secção, clique em Certificado de autenticação de cliente .
  7. Na secção Opções de chave , clique para seleccionar a caixa de verificação armazenar o certificado no arquivo de certificados de computador local e, em seguida, clique em Submeter .

    Tenha em atenção o ID do pedido para o certificado de cliente.
  8. Em Potencial violação de processamento de scripts diálogo caixa, clique em Sim .
  9. Depois da AC emitiu o certificado cliente, clique em home page e, em seguida, clique em Ver o estado de um pedido de certificado pendente .
  10. Em Seleccionar o pedido de certificado que pretende ver , clique em pedido de certificado submetidos no passo 7.
  11. Clique em instalar este certificado e, em seguida, clique em Sim na caixa de diálogo Potencial violação de processamento de scripts .

Passo 2: Configurar o acesso ao certificado de cliente

Neste passo, tem de conceder permissão para a conta ASP.NET aceder o certificado de cliente armazenado no arquivo de computador local. A conta de serviço de rede é a conta predefinida para executar aplicações Web no Windows Server 2003. Por este motivo, tem de conceder acesso ao certificado para a conta do serviço de rede. Se tiver configurado uma conta personalizada para executar o ASP.NET, tem de conceder acesso para a conta personalizada.

Nota No Microsoft Internet informações Server (IIS) 5.0, ASP.NET é executado sob o ASPNET conta e não em serviço de rede da conta. Por conseguinte, terá de conceder permissões para a conta ASPNET num computador com o IIS 5.0.

Para conceder acesso a uma conta de utilizador específica, execute o seguinte comando numa linha de comandos:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "AccountName"
Nota AccountName é o nome de uma conta de computador local ou uma conta de domínio. IssuedToName é o nome da empresa ou domínio ao qual o certificado de cliente foi emitido. Este comando contém uma cadeia de procura não sensível a maiúsculas e minúsculas. A cadeia de procura localiza o primeiro certificado enumerado que tenha um nome de requerente que contém a cadeia.

O comando da linha de comandos seguinte é um exemplo de como conceder acesso ao certificado de cliente para a conta serviço de rede no Microsoft (IIS) 6.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "Serviço de rede"
A seguinte linha de comandos se um exemplo sobre como conceder acesso ao certificado de cliente para a conta ASPNET no IIS 5.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "ASPNET"
Nota Quando utiliza a ferramenta de configuração do Windows HTTP dos serviços de certificados, é possível combinar o processo de importar o certificado de cliente e o processo de configurar o acesso ao certificado de cliente de uma só vez. Por exemplo, a seguinte linha de comandos executa ambos os processos:
Winhttpcertcfg.exe -i PFXFile - c LOCAL_MACHINE\My - a ? AccountName ?

Passo 3: Copiar o certificado de cliente do arquivo de utilizador local para o arquivo de computador local

Se o certificado de cliente pode aceder a uma aplicação interactiva, tal como uma aplicação Windows Forms ou uma aplicação da linha de comandos, o certificado de cliente já está armazenado no arquivo de utilizador local. No entanto, se uma aplicação de serviço, tal como uma aplicação Web do ASP.NET não é possível aceder o mesmo certificado de cliente, o certificado de cliente não poderá ser armazenado no arquivo de computador local.

Este passo explica como copiar um certificado de cliente no arquivo de utilizador local para o arquivo de computador local, utilizando o Assistente para exportar certificados.

Nota Se o certificado de cliente já estiver no arquivo de computador local ou se pode instalar o certificado de cliente directamente no arquivo de computador local como no passo 1, avance para o passo 4. No entanto, se utilizar o passo 3, tem, em seguida, devolver para o passo 2 para conceder acesso ao certificado de cliente.

Para copiar o certificado de cliente para o arquivo de computador local, siga estes passos:
  1. Clique em Iniciar , clique em Executar , escreva mmc e, em seguida, clique em OK .
  2. No menu ficheiro , clique em Adicionar/remover Snap-in e, em seguida, clique em Adicionar .
  3. Na caixa de diálogo Adicionar Standalone Snap-ins , clique em certificados , clique em Adicionar , clique em conta de computador , clique em seguinte e, em seguida, clique em Concluir .
  4. Na caixa de diálogo Adicionar Standalone Snap-ins , clique em certificados , clique em Adicionar , clique na minha conta de utilizador e, em seguida, clique em Concluir .
  5. Clique em Fechar e, em seguida, clique em OK .
  6. Para exportar o certificado de cliente do arquivo de utilizador local, siga estes passos:
    1. Expanda Certificados - utilizador actual , expanda pessoal e, em seguida, clique em certificados .
    2. Clique com o botão direito do rato no certificado de cliente, clique em Todas as tarefas , clique em Exportar e, em seguida, clique em seguinte .
    3. Se a opção Sim, exportar a chave privada não está disponível, a aplicação Web ASP.NET não pode utilizar o certificado de cliente. Tem de obter outro certificado de cliente. Para o fazer, siga as instruções no passo 1 e no passo 2. Caso contrário, clique em Sim, exportar a chave privada e, em seguida, clique em seguinte duas vezes.
    4. Na caixa palavra-passe e na caixa Confirmar palavra-passe , escreva uma palavra-passe e, em seguida, clique em seguinte .
    5. Na caixa nome do ficheiro , escreva um nome de ficheiro. Clique em seguinte e, em seguida, clique em Concluir .
    6. No Assistente para exportar certificados diálogo caixa, clique em OK .
  7. Para importar o certificado de cliente para o arquivo de computador local, siga estes passos:
    1. Expanda certificados (computador local) e, em seguida, expanda pessoal .
    2. Clique com o botão direito do rato em certificados , clique em Todas as tarefas , clique em Importar e, em seguida, clique em seguinte .
    3. Na caixa nome do ficheiro , escreva o nome de ficheiro que especificou no passo 6e e, em seguida, clique em seguinte .
    4. Na caixa palavra-passe , escreva a palavra-passe que especificou no passo 6 d e, em seguida, clique em seguinte duas vezes.
    5. Clique em Concluir e, em seguida, clique em OK .

Passo 4: Instalar o certificado de raiz da AC

Se o certificado de cliente já está assinado por uma AC externa como, por exemplo, VeriSign, ou se já tiver instalado o certificado de raiz para a AC, pode omitir o passo 4.

Por predefinição, o Windows tem os certificados de raiz de várias AC externa já pré-instalado o arquivo de certificados raiz fidedignos.
Verifique se o certificado de raiz está instalado
Para verificar se o certificado de raiz para a AC está instalado, siga estes passos:
  1. Clique em Iniciar , clique em Executar , escreva mmc e, em seguida, clique em OK .
  2. No menu ficheiro , clique em Adicionar/remover Snap-in e, em seguida, clique em Adicionar .
  3. Na caixa de diálogo Adicionar Standalone Snap-ins , clique em certificados , clique em Adicionar , clique em conta de computador , clique em seguinte 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 de raiz fidedigna e, em seguida, clique em certificados .
  6. No painel da direita, confirme se o certificado de raiz da AC que pretende utilizar é apresentado.
Instalar o certificado de raiz
Se o certificado de raiz da AC que pretende utilizar não constar da lista, tem de instalar o certificado de raiz. Se tiver sido emitido o certificado de raiz da AC que pretende utilizar para o utilizador num ficheiro de certificado como um ficheiro .cer, um ficheiro .der ou um ficheiro .pfx, siga estes passos:
  1. Expanda certificados (computador local) , clique como o botão direito do rato em Autoridades de certificação de raiz fidedigna , clique em Todas as tarefas e, em seguida, clique em Importar .
  2. Assistente de caixa de diálogo, clique em seguinte e, em seguida, na caixa nome do ficheiro , escreva o nome do ficheiro de certificado e, em seguida, clique em seguinte duas vezes.
  3. Clique em Concluir e, em seguida, clique em OK .
Pedir o certificado de raiz
Se a AC que pretende utilizar estiver incluída na base de dados de instalação do Microsoft Certificate Services, pode pedir o certificado de raiz. Para o fazer, siga estes passos:
  1. No Internet Explorer, visite o site Web da AC. Por exemplo, se o servidor da AC é o nome CAServer, visite o seguinte Web site:
    http://CAServer/certsrv
  2. Clique em Transferir uma AC certificado, cadeia de certificados ou CRL e, em seguida, clique em AC Transferir certificado .
  3. Na caixa de diálogo Transferência de ficheiros , clique em Guardar .
  4. Na caixa de diálogo Guardar como , introduza a localização onde pretende guardar o ficheiro de certificado e, em seguida, clique em Guardar .
  5. Depois de ter guardado o ficheiro de certificado de raiz, utilize os passos na secção "Instalar o certificado de raiz" para instalar o ficheiro de certificado no arquivo de autoridades de certificação de raiz fidedigna.

Chamar o serviço Web

Depois de instalar o certificado de cliente no arquivo computador local ou o arquivo de utilizador local, pode aceder o certificado de cliente da aplicação Web do ASP.NET para chamar o serviço Web. Os passos para o certificado de cliente de acesso são os mesmos para uma aplicação Windows Forms ou para uma Web do ASP.NET aplicação.

Se estiver a utilizar o .NET Framework 1.1, tem de exportar primeiro a chave para um ficheiro codificado em DER. Tem de exportar a chave porque a classe System.Security.Cryptography.X509Certificates.X509Certificate não contém métodos para aceder directamente os detalhes de um certificado a partir de um arquivo de certificados. Por conseguinte, a aplicação tem leia os detalhes de um certificado de um ficheiro codificado em DER.

Nota Web Services Enhancements 2.0 para o Microsoft .NET (WSE) fornece uma forma de uma aplicação obter os detalhes de um certificado directamente a partir de um arquivo de certificados.

O código de exemplo do C# seguinte mostra como chamar um serviço Web transferindo 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 o Microsoft .NET

Web Services Enhancements 2.0 para o Microsoft .NET (WSE) é um Microsoft .NET classe biblioteca para criar serviços Web, utilizando os protocolos de serviços Web mais recentes. Estes protocolos incluem o seguinte:
  • Segurança
  • WS-SecureConversation
  • WS-Trust
  • WS-Policy
  • WS SecurityPolicy
  • WS-Addressing
  • WS-Attachments
Nota WSE não está incluído como parte do .NET Framework. Para obter WSE, visite o seguinte Web site da Microsoft:
http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841
Não é necessário utilizar qualquer um destes protocolos para aceder a uma Web do serviço que requer autenticação de certificados de cliente. No entanto, poderá utilizar a classe Microsoft.Web.Services2.Security.X509 . A classe Microsoft.Web.Services2.Security.X509 contém métodos para aceder directamente a um certificado de cliente no arquivo de certificados. Se utilizar estes métodos, não é necessário exportar o certificado para um ficheiro.

O código de exemplo do C# seguinte mostra como localizar o primeiro certificado denominado SecureMathClient no arquivo de computador local. Em seguida, este código de exemplo utiliza o certificado para chamar o método Add da matemática serviço Web. Matemática serviço Web 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 Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate(vs.71).aspx
Para obter mais informações sobre como contactar um Web site com segurança avançada utilizando uma aplicação Web do ASP.NET, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
817854CORRECÇÃO: Uma aplicação Web do ASP.NET não consegue entregar um certificado de cliente a um Web site com segurança melhorada

Propriedades

Artigo: 901183 - Última revisão: 13 de dezembro de 2007 - Revisão: 3.2
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.1 nas seguintes plataformas
    • Microsoft Internet Information Services 6.0
    • Serviços de informação Internet 5.0 da Microsoft
Palavras-chave: 
kbmt kbcode kbwebservices kbcertservices kbhowto kbinfo KB901183 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 901183

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