Witam,
na wstępie zaznaczę że google już przekopałem, może nie potrafię właściwego pytania zadać, ale nic nie znalazlem.
Próbuje przepisać program łączący się ze sterownikiem za pośrednictwem TCP SSL.
W XE7 na formie postawiłem dwie kontrolki z Indy tzn.:IdTCPClient i IdSSLIOHandlerSocketOpenSSL i bez specjalnego przekonfigurowania program łaczy sie z urządzeniem.
Procedura łącząca:
procedure TForm1.Connect;
begin
IdTCPClient1.Host := '192.168.1.241';
IdTCPClient1.Port := 9771;
IdTCPClient1.Connect;
end;
function TForm1.IdSSLIOHandlerSocketOpenSSL1VerifyPeer(Certificate: TIdX509; AOk: Boolean; ADepth, AError: Integer): Boolean;
begin
Result:=true;
end;
Konfiguracja kontrolek:
object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL
OnStatus = IdSSLIOHandlerSocketOpenSSL1Status
Destination = '192.168.1.241:9771'
Host = '192.168.1.241'
MaxLineAction = maException
Port = 9771
DefaultPort = 0
UseNagle = False
ReadTimeout = 60000
SSLOptions.Method = sslvSSLv3
SSLOptions.SSLVersions = [sslvSSLv3]
SSLOptions.Mode = sslmClient
SSLOptions.VerifyMode = []
SSLOptions.VerifyDepth = 0
OnVerifyPeer = IdSSLIOHandlerSocketOpenSSL1VerifyPeer
Left = 104
Top = 32
end
object IdTCPClient1: TIdTCPClient
OnStatus = IdTCPClient1Status
IOHandler = IdSSLIOHandlerSocketOpenSSL1
ConnectTimeout = 5000
Host = '192.168.1.241'
IPVersion = Id_IPv4
Port = 9771
ReadTimeout = 60000
UseNagle = False
Left = 72
Top = 32
end
jak widać nic specjalnego.
Chciałem ten mechanizm przenieść do VS C# i tu się zaczęły schody:
private void Connect ()
{
tcp = new TcpClient();
tcp.Connect("192.168.1.241", 9771);
stream = tcp.GetStream();
SslStream sslStream = new SslStream(stream, false, new RemoteCertificateValidationCallback(ValidateCert), null,EncryptionPolicy.AllowNoEncryption);
do tego momentu jest ok, ale kolejna linia wywala bezustannie ten sam błąd.
sslStream.AuthenticateAsClient("192.168.1.241:9771", new X509CertificateCollection(), SslProtocols.Ssl3, false);
}
taka odmiana tego zapisu też wylatuje z tym samym błedem
sslStream.AuthenticateAsClient("192.168.1.241:9771");
}
public static bool ValidateCert(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
za każdym razem dostaję błąd:
Wywołanie SSPI zwróciło nieoczekiwany błąd.
Co najmniej jeden parametr przekazany do funkcji był nieprawidłowy
Czy macie może jakiś pomysł o ch chodzi ??
Czy są kontrolki INDY do VS C# ? (na stronie projektu są ale tylko do Borlanda).
Będę wdzięczy za każdą podpowiedź bo mnie już brakuje pomysłów.
Pozdrawiam
Rafał