Freigeben über


Neuverhandlung einer Kanalverbindung

Um die Attribute einer Verbindung zu ändern, z. B. die Verschlüsselungssuite oder die Clientauthentifizierung, können Sie eine "Wiederholung" oder Neuverhandlung der Verbindung anfordern.

Wenn die Attribute, die Sie ändern möchten, durch Anmeldeinformationen gesteuert werden, müssen Sie neue Anmeldeinformationen abrufen, bevor Sie die Verbindung neu aushandeln. Weitere Informationen finden Sie unter Abrufen von Schannel-Anmeldeinformationen.

Um eine Wiederholung von einer Clientanwendung anzufordern, rufen Sie die Funktion InitializeSecurityContext (Schannel) auf. Serveranwendungen rufen die Funktion AcceptSecurityContext (Schannel) auf. Legen Sie die Parameter wie folgt fest:

  • Geben Sie den vorhandenen Sicherheitskontext im parameter phContext an.
  • (Nur Clients) Geben Sie denselben Servernamen (im Parameter pszTargetName ) an, der beim Einrichten des Kontexts angegeben wurde.
  • Geben Sie ggf. mithilfe des parameters phCredential neue Anmeldeinformationen an.
  • Wenn Sie Kontextattribute ändern möchten, die keinen Bezug zu den Anmeldeinformationen haben, geben Sie diese Attribute mithilfe des Parameters fContextReq an.

Nach dem Aufrufen der entsprechenden Funktion sollte Ihre Anwendung die Ergebnisse an den Client senden und die Verarbeitung eingehender Nachrichten mithilfe der Funktion DecryptMessage (Schannel) fortsetzen.

Die DecryptMessage-Funktion (Schannel) gibt SEC_I_RENEGOTIATE zurück, wenn Schannel bereit ist, damit Ihre Anwendung fortfahren kann. Wenn Sie den SEC_I_RENEGOTIATE Rückgabecode erhalten, muss Ihre Anwendung AcceptSecurityContext (Schannel) (Server) oder InitializeSecurityContext (Schannel) (Clients) aufrufen und den Inhalt der von DecryptMessage zurückgegebenen SECBUFFER_EXTRA im SECBUFFER_TOKEN übergeben. Nachdem dieser Aufruf einen Wert zurückgegeben hat, fahren Sie so fort, als würde Ihre Anwendung eine neue Verbindung erstellen.