public void do_handshake() { try { // make sure the remote side hasn't shutdown before authenticating so we don't // hang if we're in blocking mode. #pragma warning disable 219 // unused variable int available = _socket._socket.Available; #pragma warning restore 219 } catch (SocketException) { throw PythonExceptions.CreateThrowable(PythonExceptions.OSError, "socket closed before handshake"); } EnsureSslStream(true); var enabledSslProtocols = GetProtocolType(_protocol); try { if (_serverSide) { _sslStream.AuthenticateAsServer(_cert, _certsMode == PythonSsl.CERT_REQUIRED, enabledSslProtocols, false); } else { var collection = new X509CertificateCollection(); if (_cert != null) { collection.Add(_cert); } _sslStream.AuthenticateAsClient(_serverHostName ?? _socket._hostName, collection, enabledSslProtocols, false); } } catch (AuthenticationException e) { ((IDisposable)_socket._socket).Dispose(); throw PythonExceptions.CreateThrowable(PythonSsl.SSLError(_context), "errors while performing handshake: ", e.ToString()); } if (_validationFailure != null) { throw _validationFailure; } }
private void ValidationError(object reason) { _validationFailure = PythonExceptions.CreateThrowable(PythonSsl.SSLError(_context), "errors while validating certificate chain: ", reason.ToString()); }