Renegociación de una conexión de Schannel
Para cambiar los atributos de una conexión, como el conjunto de cifrado o la autenticación de cliente, puede solicitar una "puesta al día" o una renegociación de la conexión.
Si los atributos que desea cambiar se controlan mediante credenciales, debe obtener nuevas credenciales antes de renegociar la conexión. Para obtener más información, consulte Obtención de credenciales de Schannel.
Para solicitar una puesta al día desde una aplicación cliente, llame a la función InitializeSecurityContext (Schannel). Las aplicaciones de servidor llaman a la función AcceptSecurityContext (Schannel). Establezca los parámetros de la manera siguiente:
- Especifique el contexto de seguridad existente en el parámetro phContext .
- (Solo clientes) Especifique el mismo nombre de servidor (en el parámetro pszTargetName ) que se especifica al establecer el contexto.
- Especifique las nuevas credenciales mediante el parámetro phCredential , si procede.
- Si desea cambiar los atributos de contexto no relacionados con las credenciales, especifique estos atributos mediante el parámetro fContextReq .
Después de llamar a la función adecuada, la aplicación debe enviar los resultados al cliente y continuar procesando los mensajes entrantes mediante la función DecryptMessage (Schannel).
La función DecryptMessage (Schannel) devolverá SEC_I_RENEGOTIATE cuando Schannel esté listo para que la aplicación continúe. Cuando reciba el código de retorno SEC_I_RENEGOTIATE, la aplicación debe llamar a AcceptSecurityContext (servidores) o InitializeSecurityContext (Schannel) (clientes) y pasar el contenido de SECBUFFER_EXTRA devuelto de DecryptMessage en el SECBUFFER_TOKEN. Después de que esta llamada devuelva un valor, continúe como si la aplicación creara una nueva conexión.