Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo llamar a un servicio Web utilizando un certificado de cliente para la autenticación en una aplicación Web ASP.NET

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 901183
Resumen
se explica cómo pasar un certificado de cliente a un servicio Web para la autenticación desde una aplicación Web ASP.NET.

Nota Los pasos en este artículo también se aplican a cuando realiza una solicitud HTTP directa mediante la clase HttpWebRequest si no invoca un servicio Web.
INTRODUCCIÓN
Con frecuencia, servicios Web deben autenticar las aplicaciones que llaman los servicios Web. Los servicios Web deben realizar las autenticaciones de llamar a las aplicaciones antes de los servicios Web pueden realizar autorizaciones. Una técnica de autenticación es requieren las aplicaciones que llaman el servicio Web para presentar un certificado de cliente.

Cuando una aplicación Web ASP.NET intenta llamar a un servicio Web que utiliza autenticación de certificados, puede recibir un mensaje de error "acceso denegado". Cuando una aplicación de consola o una aplicación de Microsoft Windows Forms llama a en el mismo servicio Web, no recibe un mensaje de error.

Este comportamiento se produce porque el equipo mantiene dos almacenes de certificados diferentes:
  • el almacén del equipo local : aplicación Web ASP.NET un busca en este almacén para buscar certificados de cliente.
  • el almacén de usuario local : usuario interactivo aplicación busca en este almacén para buscar certificados de cliente.
Normalmente, cuando una aplicación de usuario interactivo, instala un certificado de cliente, el certificado de cliente se instala en el almacén de usuario local. Por lo tanto, el certificado de cliente funciona para las aplicaciones de usuario interactivo. Sin embargo, el certificado de cliente no funciona para Web de ASP.NET aplicaciones.
Más información
Para habilitar una aplicación Web ASP.NET usar un certificado de cliente, debe instalar el certificado de cliente en el almacén del equipo local. Al instalar un certificado de cliente en el almacén del equipo local, el certificado de cliente sólo está disponible para cuentas de usuario en el grupo de administradores y para el usuario que instaló el certificado de cliente. Por lo tanto, debe conceder acceso al certificado de cliente para la cuenta de usuario que se utiliza para ejecutar la aplicación Web ASP.NET.

Nota Debe tener el Microsoft .NET Framework 1.1 Service Pack 1 (SP1) instalado para utilizar certificados de cliente en el almacén equipo local.

Además, cuando la aplicación Web ASP.NET llama al servicio Web, la aplicación debe exportar el certificado de cliente desde el almacén de certificados y, a continuación, agregar el certificado de cliente a la llamada al servicio de Web.

Instalar el certificado de cliente y conceda acceso de la cuenta de usuario

Para instalar el certificado de cliente y para conceder acceso al certificado de cliente para la cuenta de usuario que se utiliza para ejecutar la aplicación Web ASP.NET, siga estos pasos.

Paso 1: Instalar el certificado de cliente en el almacén del equipo local

Si tiene un certificado de cliente en un archivo PKCS # 12 (.pfx), puede utilizar la herramienta de configuración de certificados de Microsoft Windows HTTP Services (WinHttpCertCfg.exe) para instalar el certificado de cliente y para conceder acceso al certificado de cliente para cuentas de usuario adicionales como la cuenta de servicio de red. Para ello, siga estos pasos:
  1. Descargue e instale Microsoft Windows HTTP herramienta de configuración de certificados de servicios. Para obtener la herramienta, visite el siguiente sitio Web de Microsoft:
  2. Ejecute el siguiente comando en el símbolo del sistema:
    winhttpcertcfg -i PFXFile - c LOCAL_MACHINE\My - un IWAM_TESTMACHINE -p PFXPassword
    Nota PfxFile es el nombre del archivo .pfx. Password es la contraseña para el archivo .pfx. Si el archivo no requiere una contraseña, omita el -p parámetro.

    Normalmente, el archivo WinHttpCertCfg.exe se encuentra en la carpeta siguiente:
    C:\Archivos de programa\Windows Resource Kits\Tools
Si no tiene acceso a un archivo .pfx y ha instalado Servicios de certificado en un equipo que ejecuta Microsoft Windows Server 2003 o Microsoft Windows 2000 Server, puede solicitar e instalar el certificado de cliente directamente en el almacén equipo local. Para ello, siga estos pasos:
  1. Inicie sesión en el equipo cliente utilizando una cuenta de usuario que tenga credenciales de administrador.
  2. En Microsoft Internet Explorer, visite la entidad emisora de certificados (CA) sitio de Web. Por ejemplo, si el servidor de CA se denomina CAServidor, visite el siguiente sitio Web:
    http://CAServer/certsrv
  3. En Elija una tarea , haga clic en Solicitar un certificado y, a continuación, haga clic en solicitud de certificado avanzada .
  4. Haga clic en crear y enviar una solicitud a esta CA .
  5. En la Solicitud de certificado avanzada del formulario, escriba un nombre y una dirección de correo electrónico.
  6. En el Tipo de certificado necesario , haga clic en Certificado de autenticación de cliente .
  7. En la sección Opciones de clave , haga clic para Active la casilla de verificación almacenar certificado en el almacén de certificados equipo local y, a continuación, haga clic en Enviar .

    Nota el identificador de solicitud para el certificado de cliente.
  8. El Peligro potencial para scripting de diálogo, haga clic en .
  9. Después de la CA haya emitido el certificado de cliente, haga clic en Inicio y, a continuación, haga clic en Ver el estado de una solicitud de certificado pendiente .
  10. En Seleccione la solicitud de certificado que desea ver , haga clic en la solicitud de certificado que ha enviado en el paso 7.
  11. Haga clic en instalar este certificado y, a continuación, haga clic en en el cuadro de diálogo Peligro potencial de scripting .

Paso 2: Configurar el acceso al certificado de cliente

En este paso, debe conceder permiso para la cuenta ASP.NET tener acceso el certificado de cliente almacenada en el almacén del equipo local. La cuenta servicio de red es la cuenta predeterminada para ejecutar aplicaciones Web en Windows Server 2003. Por lo tanto, debe conceder acceso al certificado para la cuenta de servicio de red. Si ha configurado una cuenta personalizada para ejecutar ASP.NET, debe conceder acceso para la cuenta personalizada.

Nota En Microsoft Internet Information Server (IIS) 5.0, ASP.NET se ejecuta bajo el ASPNET cuenta y no en la red cuenta. Por lo tanto, debe para conceder permisos para la cuenta ASPNET en un equipo que ejecuta IIS 5.0.

Para conceder acceso para una cuenta de usuario específico, ejecute el comando siguiente en el símbolo del sistema:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "AccountName"
Nota AccountName es el nombre de una cuenta de equipo local o una cuenta de dominio. IssuedToName es el nombre de la empresa o dominio al que se emitió el certificado de cliente. Este comando contiene una cadena de búsqueda sin distinción entre mayúsculas y minúsculas. La cadena de búsqueda busca el primer certificado enumerado que tiene un nombre de asunto que contiene la cadena.

El comando de línea de comandos siguiente es un ejemplo de cómo conceder acceso al certificado de cliente para la cuenta de servicio de red en Microsoft Internet Information Services (IIS) 6.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "NetworkService"
La siguiente línea de comandos es un ejemplo sobre cómo conceder acceso al certificado de cliente para la cuenta ASPNET en IIS 5.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "ASPNET"
Nota Cuando se utiliza la herramienta de configuración de certificados de Windows HTTP Services, puede combinar el proceso de importar el certificado de cliente y el proceso de configuración de acceso al certificado de cliente en el uno paso. Por ejemplo, la siguiente línea de comandos realiza ambos procesos:
Winhttpcertcfg.exe -i PFXFile - c LOCAL_MACHINE\My - un “ AccountName

Paso 3: Copiar el certificado de cliente desde el almacén de usuario local en el almacén equipo local

Si una aplicación interactiva como una aplicación de Windows Forms o una aplicación de línea de comandos pueden tener acceso el certificado de cliente, el certificado de cliente ya se almacena en el almacén de usuario local. Sin embargo, si una aplicación de servicio, como una aplicación Web ASP.NET no puede tener acceso el mismo certificado de cliente, el certificado de cliente no puede almacenarse en el almacén del equipo local.

Este paso explica cómo copiar un certificado de cliente en el almacén de usuario local en el almacén equipo local mediante el Asistente para exportación de certificados.

Nota Si el certificado de cliente ya está en el almacén del equipo local, o si puede instalar el certificado de cliente directamente en el almacén equipo local como en el paso 1, vaya al paso 4. Sin embargo, si utiliza el paso 3, a continuación, debe volver al paso 2 para conceder acceso al certificado de cliente.

Para copiar el certificado de cliente en el almacén del equipo local, siga estos pasos:
  1. Haga clic en Inicio , haga clic en Ejecutar , escriba mmc y, a continuación, haga clic en Aceptar .
  2. En el menú archivo , haga clic en Agregar o quitar complemento y, a continuación, haga clic en Agregar .
  3. En el cuadro de diálogo agregar complementos independientes , haga clic en certificados , haga clic en Agregar , haga clic en la cuenta de equipo , haga clic en siguiente y, a continuación, haga clic en Finalizar .
  4. En el cuadro de diálogo agregar complementos independientes , haga clic en certificados , haga clic en Agregar , haga clic en la cuenta de usuario y, a continuación, haga clic en Finalizar .
  5. Haga clic en Cerrar y, a continuación, haga clic en Aceptar .
  6. Para exportar el certificado de cliente desde el almacén de usuario local, siga estos pasos:
    1. Expanda certificados: usuario actual , expanda personal y, a continuación, haga clic en certificados .
    2. Haga clic con el botón secundario en el certificado de cliente, haga clic en Todas las tareas , haga clic en Exportar y, a continuación, haga clic en siguiente .
    3. Si la opción de exportar la clave privada no está disponible, la aplicación Web ASP.NET no puede utilizar el certificado de cliente. Debe obtener otro certificado de cliente. Para ello, siga las instrucciones del paso 1 y el paso 2. De lo contrario, haga clic en exportar la clave privada y, a continuación, haga clic en siguiente dos veces.
    4. En el cuadro contraseña en el cuadro Confirmar contraseña , escriba una contraseña y a continuación, haga clic en siguiente .
    5. En el cuadro nombre de archivo , escriba un nombre de archivo. Haga clic en siguiente y, a continuación, haga clic en Finalizar .
    6. En el Asistente para exportación de certificados de diálogo, haga clic en Aceptar .
  7. Para importar el certificado de cliente en el almacén equipo local, siga estos pasos:
    1. Expanda certificados (equipo local) y, a continuación, expanda personal .
    2. Haga clic con el botón secundario del mouse en certificados , haga clic en Tarea todas , haga clic en Importar y, a continuación, haga clic en siguiente .
    3. En el cuadro nombre de archivo , escriba el nombre de archivo especificado en el paso 6e y, a continuación, haga clic en siguiente .
    4. En el cuadro contraseña , escriba la contraseña que especificó en el paso 6 d y, a continuación, haga clic en siguiente dos veces.
    5. Haga clic en Finalizar y, a continuación, haga clic en Aceptar .

Paso 4: Instalar el certificado raíz de la entidad emisora

Si el certificado de cliente ya está firmado por una entidad emisora externa, como VeriSign, o si ya ha instalado el certificado raíz de la entidad emisora de CERTIFICADOS, puede omitir el paso 4.

De forma predeterminada, Windows tiene los certificados raíz de CA externas muchos ya preinstalado en el almacén de certificados raíz de confianza.
Compruebe que el certificado raíz está instalado
Para comprobar que el certificado raíz de la entidad emisora de CERTIFICADOS está instalado, siga estos pasos:
  1. Haga clic en Inicio , haga clic en Ejecutar , escriba mmc y, a continuación, haga clic en Aceptar .
  2. En el menú archivo , haga clic en Agregar o quitar complemento y, a continuación, haga clic en Agregar .
  3. En el cuadro de diálogo agregar complementos independientes , haga clic en certificados , haga clic en Agregar , haga clic en la cuenta de equipo , haga clic en siguiente y, a continuación, haga clic en Finalizar .
  4. Haga clic en Cerrar y, a continuación, haga clic en Aceptar .
  5. Expanda certificados (equipo local) , expanda entidades Emisoras raíz de confianza y, a continuación, haga clic en certificados .
  6. En el panel derecho, confirme que aparece el certificado raíz de la CA que desea utilizar.
Instalar el certificado raíz
Si el certificado raíz de la CA que desea utilizar no aparece, debe instalar el certificado raíz. Si se ha emitido el certificado raíz de la CA que desea utilizar para usted en un archivo de certificado como un archivo .cer, un archivo .DER o un archivo .pfx, siga estos pasos:
  1. Expanda certificados (equipo local) , haga clic con el botón secundario en Entidades emisoras de certificados raíz de confianza , haga clic en Todas las tareas y, a continuación, haga clic en Importar .
  2. En el Asistente para importación de certificados de cuadro de diálogo, haga clic en siguiente y a continuación, en el cuadro nombre de archivo , escriba el nombre del archivo de certificado y, a continuación, haga clic en siguiente dos veces.
  3. Haga clic en Finalizar y, a continuación, haga clic en Aceptar .
Solicitar el certificado raíz
Si la CA que desea utilizar está incluida en la base de datos de instalación de servicios de Microsoft Certificate Server, puede solicitar el certificado raíz. Para ello, siga estos pasos:
  1. En Internet Explorer, visite el sitio Web de CA. Por ejemplo, si el servidor de CA se denomina CAServidor, visite el siguiente sitio Web:
    http://CAServer/certsrv
  2. Haga clic en Descargar certificado de entidad emisora, cadena de certificados o CRL y, a continuación, haga clic en CA Descargar certificado .
  3. En el cuadro de diálogo Descarga de archivos , haga clic en Guardar .
  4. En el cuadro de diálogo escriba la ubicación donde desea guardar el archivo de certificado y, a continuación, haga clic en Guardar .
  5. Después de guardar el archivo de certificado de raíz, utilice los pasos de la sección "Instalar el certificado de raíz" para instalar el archivo de certificado en el almacén de entidades emisoras de certificados raíz de confianza.

Llamar al servicio Web

Una vez instalado el certificado de cliente en el almacén del equipo local o el almacén de usuario local, puede obtener acceso al certificado de cliente desde la aplicación Web ASP.NET para llamar al servicio Web. Los pasos para tener acceso el certificado de cliente son el mismo para una aplicación de Windows Forms o para un Web de ASP.NET aplicación.

Si está utilizando .NET Framework 1.1, primero debe exportar la clave a un archivo codificado mediante DER. Debe exportar la clave porque la clase System.Security.Cryptography.X509Certificates.X509Certificate no contiene métodos de acceso directamente a los detalles de un certificado de un almacén de certificados. Por lo tanto, la aplicación debe leer los detalles de un certificado desde un archivo codificado mediante DER.

Nota Web Services Enhancements 2.0 para Microsoft .NET (WSE) proporciona una forma de una aplicación recuperar los detalles de un certificado directamente de un almacén de certificados.

El código de ejemplo de C# siguiente muestra cómo llamar a un servicio Web pasando un certificado de cliente para la autenticación.
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) es un Microsoft .NET clase biblioteca para generar servicios Web mediante los más recientes protocolos de servicios Web. Estos protocolos incluyen:
  • WS-Security
  • WS-SecureConversation
  • WS-Trust
  • WS-Policy
  • WS-SecurityPolicy
  • WS-Addressing
  • WS-Attachments
Nota WSE no se incluye como parte de .NET Framework. Para obtener WSE, visite el siguiente sitio Web de Microsoft: No es necesario utilizar cualquiera de estos protocolos para tener acceso a un Web de servicio que requiere autenticación de certificado de cliente. Sin embargo, desea utilizar la clase Microsoft.Web.Services2.Security.X509 . La clase Microsoft.Web.Services2.Security.X509 contiene métodos para tener acceso directamente a un certificado de cliente en el almacén de certificados. Si utiliza estos métodos, no es necesario exportar el certificado a un archivo.

El código de ejemplo de C# siguiente muestra cómo buscar el primer certificado que se denomina SecureMathClient en el almacén equipo local. Después, este código de ejemplo utiliza el certificado para llamar el método Add de servicio Web math. El servicio Web math requiere 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);    }  }
Referencias
Para obtener más información acerca de la clase System.Security.Cryptography.X509Certificates.X509Certificate , visite el siguiente sitio Web de Microsoft Developer Network (MSDN): Para obtener más información acerca de cómo llamar a un sitio Web con seguridad mejorada con una aplicación Web ASP.NET, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
817854REVISIÓN: La aplicación Web ASP.NET no puede entregar un certificado de cliente a un sitio Web con seguridad mejorada

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 901183 - Última revisión: 12/13/2007 17:57:49 - Revisión: 3.2

Microsoft .NET Framework 1.1

  • kbmt kbcode kbwebservices kbcertservices kbhowto kbinfo KB901183 KbMtes
Comentarios
html>