Ich muss einen TLS-Handshake-Prozess mithilfe der SSPI-Schnittstelle implementieren.
Meine App implementiert die Client-Seite, und wie ich von here sah die allgemeine Strömung:TLS Handshake-Prozess von InitializeSecurityContext (Schannel)
- InitializeSecurityContext - erster Aufruf einen Zeiger auf eine SecBufferDesc Struktur zurück.
- Anruf an senden (= WinSock API) -Funktion mit den Ausgabepuffern.
- Aufruf der Recv-Funktion
- Rufen Sie InitializeSecurityContext erneut mit den Puffern auf.
Die MSDN Erklärung über diese Puffer:
„Auf Anrufe an diese Funktion nach dem ersten Anruf, muss es zwei Puffer sein Der erste Typ SECBUFFER_TOKEN und enthält das Token aus dem empfangenen. Server. Der zweite Puffer hat den Typ SECBUFFER_EMPTY; setzen Sie die pvBuffer und cbBuffer Mitglieder auf Null. "
Meine Fragen:
- Ich brauche etwas mehr Erklärung: Was ist die Bedeutung der Puffer? Was enthält der zweite Puffer? Wofür sind sie?
- In der MSDN geschrieben, dass die TargetDataRep Eingabeparameter der Funktion InitializeSecurityContext Nuss für Schannel verwendet wird, aber viele Beispiele, die ich gesehen habe, setzen Sie es auf SECURITY_NATIVE_DREP. Was ist das SECURITY_NATIVE_DREP Flag? Warum sagt das MSDN, es auf Null zu setzen?
Ich werde wirklich jede Hilfe zu schätzen wissen.
Danke !.
danke !. 1. Kannst du mir bitte ein Beispiel für den Inhalt dieser Puffer während der Handshake-Schleife geben? (Beispiel zu was der Inhalt an einem bestimmten Punkt im Prozess wird groß sein). 2. In [diesem] (http://msdn.microsoft.com/en-us/library/aa918273.aspx) MSDN SSPI (Schannel) Codebeispiel wird das SECURITY_NATIVE_DREP festgelegt. ist es ein Fehler? (Sie finden dies durch eine schnelle Suche nach SECURITY_NATIVE_DREP Flagge auf dieser Seite) – RRR
1 - Auf den ersten 'InitializeSecurityContext' Aufruf geben Sie eine Ausgabe leer' SECBUFFER_TOKEN' Puffer, um das Token zu halten.Wenn Sie "SEC_I_CONTINUE_NEEDED" empfangen haben, senden Sie die Daten, die Sie im Token-Ausgabepuffer haben, an die entfernte Partei, Sie erhalten Daten als Antwort zurück und führen einen weiteren "InitializeSecurityContext" -Aufruf durch, der den Puffer "SECBUFFER_TOKEN" mit empfangenen Daten versorgt. Wenn Sie das Ergebnis "SEC_I_CONTINUE_NEEDED" erneut erhalten, wiederholen Sie das Ganze - Sie senden Token-Daten an die Gegenstelle, erhalten eine Antwort und geben sie erneut in die SChannel-API ein, um die Initialisierung fortzusetzen. –
2 - Ich bin mir nicht sicher, ob 'SECURITY_NATIVE_DREP' ein Fehler ist oder nicht. Es sieht so aus, als wäre dieses Flag nicht erforderlich und API ignoriert es. Ich würde mich an die Dokumentation halten und sie aus echtem Code entfernen. –