Función WSASetSocketSecurity (ws2tcpip.h)

La función WSASetSocketSecurity habilita y aplica seguridad para un socket.

Sintaxis

INT WSAAPI WSASetSocketSecurity(
  [in]           SOCKET                             Socket,
  [in, optional] const SOCKET_SECURITY_SETTINGS     *SecuritySettings,
  [in]           ULONG                              SecuritySettingsLen,
  [in, optional] LPWSAOVERLAPPED                    Overlapped,
  [in, optional] LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
);

Parámetros

[in] Socket

Descriptor que identifica un socket en el que se aplica la configuración de seguridad.

[in, optional] SecuritySettings

Puntero a una estructura de SOCKET_SECURITY_SETTINGS que especifica la configuración de seguridad que se va a aplicar al tráfico del socket. Si este parámetro es NULL, la configuración predeterminada se aplicará al socket.

[in] SecuritySettingsLen

Tamaño, en bytes, del parámetro SecuritySettings .

[in, optional] Overlapped

Puntero a una estructura WSAOVERLAPPED . Este parámetro se omite para sockets no superpuestos.

[in, optional] CompletionRoutine

Puntero a la rutina de finalización a la que se llama cuando se ha completado la operación. Este parámetro se omite para sockets no superpuestos.

Valor devuelto

Si la función es correcta, el valor devuelto es cero. De lo contrario, se devuelve un valor de SOCKET_ERROR y se puede recuperar un código de error específico llamando a WSAGetLastError.

A continuación se enumeran algunos códigos de error posibles.

Código de error Significado
WSAEAFNOSUPPORT
La familia de direcciones especificada no se admite.
WSAEINVAL
Se pasó un parámetro no válido. Este error se devuelve si el socket pasado en el parámetro Socket no se creó con una familia de direcciones del AF_INET o AF_INET6 y un tipo de socket de SOCK_DGRAM o SOCK_STREAM. Este error también se devuelve si la estructura SOCKET_SECURITY_SETTINGS a la que apunta el parámetro SecuritySettings tiene un valor incorrecto.
WSAEISCONN
El socket está conectado. Esta función no se permite con un socket conectado, ya sea que el socket esté orientado a la conexión o sin conexión.
WSAEMSGSIZE
Un búfer pasado era demasiado pequeño.
WSAENOTSOCK
El descriptor pasado en el parámetro Socket no es un socket válido.

Comentarios

El propósito principal de la función WSASetSocketSecurity es activar la seguridad de un socket si aún no está habilitado por la directiva administrativa. Para IPsec, esto significa que se crearán instancias de las directivas y los filtros IPsec adecuados que se usarán para proteger este socket. La función WSASetSocketSecurity también se puede usar para establecer requisitos de seguridad específicos para el socket.

Esta función simplifica la necesidad de llamar a la función WSAIoctl con un parámetro dwIoControlCode establecido en SIO_SET_SECURITY.

Se puede llamar a la función WSASetSocketSecurity en un parámetro Socket creado con una familia de direcciones de AF_INET o AF_INET6.

Para una aplicación cliente que usa sockets orientados a la conexión (protocolo de IPPROTO_TCP), se debe llamar a la función WSASetSocketSecurity antes de llamar a la función connect, ConnectEx o WSAConnect . Si se llama a la función WSASetSocketSecurity después de la función connect, ConnectEx o WSAConnect , WSASetSocketSecurity debe producir un error.

Para una aplicación de servidor mediante sockets orientados a la conexión (protocolo de IPPROTO_TCP), se debe llamar a la función WSASetSocketSecurity antes de llamar a la función bind . Si se llama a la función WSASetSocketSecurity después de la función de enlace , WSASetSocketSecurity debe producir un error.

En el caso de los sockets sin conexión (protocolo de IPPROTO_UDP), la aplicación debe llamar a la función WSASetSocketSecurity inmediatamente después de que se devuelva la llamada de socket o WSASocket .

Las aplicaciones de servidor deben llamar a la función setsockopt para adquirir acceso exclusivo al puerto utilizado por el socket. Esto impide que otras aplicaciones usen el mismo puerto. Se llamaría a la función setsockopt con el parámetro level establecido en SOL_SOCKET, el parámetro optname establecido en SO_EXCLUSIVEADDRUSE y el parámetro value establecido en distinto de cero. La función WSASetSocketSecurity llama internamente a setsockopt con SO_EXCLUSIVEADDRUSE para obtener acceso exclusivo al puerto. Esto es para asegurarse de que el socket no es vulnerable a ataques por otras aplicaciones que se ejecutan en el equipo local.

La configuración de seguridad no establecida mediante WSASetSocketSecurity se deriva de la directiva predeterminada del sistema o de la directiva configurada administrativamente. Se recomienda que la mayoría de las aplicaciones especifiquen un valor de SOCKET_SECURITY_PROTOCOL_DEFAULT para la enumeración SOCKET_SECURITY_PROTOCOL en el miembro SecurityProtocol del SOCKET_SECURITY_PROTOCOL señalado por el parámetro SecuritySettings . Esto hace que la aplicación sea neutra para los protocolos de seguridad y permita implementaciones más sencillas entre diferentes sistemas.

Cuando el parámetro SecuritySettings apunta a una estructura de SOCKET_SECURITY_SETTINGS_IPSEC , el miembro SecurityProtocol de la estructura debe establecerse en SOCKET_SECURITY_PROTOCOL_IPSEC, no en SOCKET_SECURITY_PROTOCOL_DEFAULT.

Se devolverá un error si no se cumplen las condiciones siguientes.

  • La familia de direcciones del parámetro Socket debe ser AF_INET o AF_INET6.
  • El tipo de socket debe ser SOCK_STREAM o SOCK_DGRAM.
  • La aplicación debe establecer su configuración de seguridad antes de llamar a las funciones bind, connect, ConnectEx o WSAConnect .
  • La función WSASetSocketSecurity solo se puede llamar una vez por socket.

Directiva IPsec de socket seguro predeterminada

Si el parámetro SecuritySettings se establece en NULL y no hay ninguna otra directiva IPsec especificada administrativamente en el equipo, se usará una directiva de seguridad predeterminada basada en IPsec para proteger el tráfico de la aplicación. Algún tipo de credencial de autenticación (un certificado de usuario o pertenencia a un dominio, por ejemplo) debe estar presente para que IPsec se realice correctamente con una directiva predeterminada.

La directiva IPsec predeterminada se ha diseñado para que la seguridad de IPsec se pueda negociar en tantos escenarios como sea posible.

Authip MM policy = 
{
 Auth methods = {IKE_ANONYMOUS}
 No impersonation
 Proposals = 
 {
   {
     Crypto algos = 
     IKE_CIPHER_AES_128,
     IKE_INTEGRITY_SHA1, 
     IKE_DH_ECP_256
     MM lifetime = 2 hrs
     QM = 0 (infinite)
   }
   {
     Crypto algos = 
     IKE_CIPHER_3DES, 
     IKE_INTEGRITY_SHA1, 
     IKE_DH_GROUP_2
     MM lifetime = 2 hrs
     QM = 0 (infinite)
   }
 }
}

Authip QM policy =
{
 QM proposals = 
 {
   QM lifetime = 1 hr, 55GB,
   Crypto algos = 
   IPSEC_TRANSFORM_ESP_AUTH, 
   IPSEC_AUTH_TRANSFORM_ID_HMAC_SHA_1_96
   No PFS
 }
 {
   QM lifetime = 1 hr, 55GB,
   Crypto algos = 
   IPSEC_TRANSFORM_ESP_AUTH_AND_CIPHER,
   IPSEC_AUTH_TRANSFORM_ID_HMAC_SHA_1_96,
   IPSEC_CIPHER_TRANSFORM_ID_AES_128
   No PFS
 }
 {
   QM lifetime = 1 hr, 55GB,
   Crypto algos = 
   IPSEC_TRANSFORM_ESP_AUTH_AND_CIPHER,
   IPSEC_AUTH_TRANSFORM_ID_HMAC_SHA_1_96,
   IPSEC_CIPHER_TRANSFORM_ID_CBC_3DES
   No PFS
 }
 {
   QM lifetime = 1 hr, 55GB,
   Crypto algos = 
   IPSEC_TRANSFORM_AH,
   IPSEC_AUTH_TRANSFORM_ID_HMAC_SHA_1_96
   No PFS
 }
 IPSEC_POLICY_FLAG_ND_BOUNDARY
 ndAllowClearTimeoutSeconds = 10
 saIdleTimeout = {5mins, 1min}
 UM policy = 
 {
   {IKE_SSL, Null-Root-Config}
   {IKE_KERBEROS}
   {IKE_SSL, Null-Root-Config}
   No impersonation
 } 
}

Requisitos

   
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado ws2tcpip.h
Library Fwpuclnt.lib
Archivo DLL Fwpuclnt.dll

Consulte también

SOCKET_SECURITY_PROTOCOL

SOCKET_SECURITY_SETTINGS

SOCKET_SECURITY_SETTINGS_IPSEC

SO_EXCLUSIVEADDRUSE

Uso de extensiones de socket seguro

WSADeleteSocketPeerTargetName

WSAImpersonateSocketPeer

WSAOVERLAPPED

WSAQuerySocketSecurity

WSARevertImpersonation

WSASetSocketPeerTargetName

WSASetSocketSecurity

Plataforma de filtrado de Windows

Funciones de api de plataforma de filtrado de Windows

Extensiones de socket seguro winsock