Problem gelöst:
Delphi-Quellcode:
procedure TForm1.IdSSLIOHandlerSocketOpenSSL1StatusInfoEx(ASender: TObject;
const AsslSocket: PSSL; const AWhere, Aret: Integer; const AType,
AMsg: string);
var
I, J, K, L: Integer;
B: Byte;
C: AnsiChar;
LClientRandom, LMasterSecret, LLogLine: string;
begin
if Assigned(AsslSocket) and
Assigned(AsslSocket^.session) and
Assigned(AsslSocket^.s3) then
begin
J := 0;
L := Length(AsslSocket^.session^.master_key) - 1;
for I := 0 to L do begin
B := AsslSocket^.session^.master_key[I];
J := J + B;
LMasterSecret := LMasterSecret + Format('%x', [B]);
if (I = L) and (J > 0) then begin
L := Length(AsslSocket^.s3^.client_random) - 1;
for K := 0 to L do begin
C := AsslSocket^.s3^.client_random[K];
B := Ord(C);
LClientRandom := LClientRandom + Format('%x', [B]);
if K = L then begin
LLogLine := 'CLIENT_RANDOM ' + LClientRandom + ' ' + LMasterSecret;
end;
end;
end;
end;
end;
end;
Diese Procedure wird von
Indy mehrfach aufgerufen. Die Variable LLogLine wird aber letztlich nur dann gefüllt, wenn beide Informationen (Master Secret und Client Random) zur Verfügung stehen. Müsste so funktionieren für TLS 1.1 .. 1.3 und SSLv3.