private bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain,
                                               SslPolicyErrors sslPolicyErrors)
        {
            // Note: add ref to handle since the caller will reset the cert after the callback return.

            // dotnet/wcf#1574
            // ORIGINAL CODE:
            // X509Certificate2 certificate2 = new X509Certificate2(certificate.Handle);
            X509Certificate2 certificate2 = certificate.CloneCertificateInternal();

            SecurityToken token = new X509SecurityToken(certificate2, false);
            ReadOnlyCollection <IAuthorizationPolicy> authorizationPolicies = _serverCertificateAuthenticator.ValidateToken(token);

            _serverSecurity = new SecurityMessageProperty();
            _serverSecurity.TransportToken         = new SecurityTokenSpecification(token, authorizationPolicies);
            _serverSecurity.ServiceSecurityContext = new ServiceSecurityContext(authorizationPolicies);

            AuthorizationContext authzContext = _serverSecurity.ServiceSecurityContext.AuthorizationContext;

            _parent.IdentityVerifier.EnsureOutgoingIdentity(RemoteAddress, Via, authzContext);

            return(true);
        }