/// <summary> /// Allows overriding default client certificate selection logic during mutual authentication /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { e.State.Extended().PipelineInfo.AppendLine(nameof(OnCertificateSelection)); // set e.clientCertificate to override return(Task.FromResult(0)); }
/// <summary> /// Call back to select client certificate used for mutual authentication /// </summary> /// <param name="sender"></param> /// <param name="targetHost"></param> /// <param name="localCertificates"></param> /// <param name="remoteCertificate"></param> /// <param name="acceptableIssuers"></param> /// <returns></returns> internal X509Certificate SelectClientCertificate( object sender, string targetHost, X509CertificateCollection localCertificates, X509Certificate remoteCertificate, string[] acceptableIssuers) { X509Certificate clientCertificate = null; if (acceptableIssuers != null && acceptableIssuers.Length > 0 && localCertificates != null && localCertificates.Count > 0) { // Use the first certificate that is from an acceptable issuer. foreach (X509Certificate certificate in localCertificates) { string issuer = certificate.Issuer; if (Array.IndexOf(acceptableIssuers, issuer) != -1) { clientCertificate = certificate; } } } if (localCertificates != null && localCertificates.Count > 0) { clientCertificate = localCertificates[0]; } //If user call back is registered if (ClientCertificateSelectionCallback != null) { var args = new CertificateSelectionEventArgs { TargetHost = targetHost, LocalCertificates = localCertificates, RemoteCertificate = remoteCertificate, AcceptableIssuers = acceptableIssuers, ClientCertificate = clientCertificate }; Delegate[] invocationList = ClientCertificateSelectionCallback.GetInvocationList(); Task[] handlerTasks = new Task[invocationList.Length]; for (int i = 0; i < invocationList.Length; i++) { handlerTasks[i] = ((Func <object, CertificateSelectionEventArgs, Task>)invocationList[i])(null, args); } Task.WhenAll(handlerTasks).Wait(); return(args.ClientCertificate); } return(clientCertificate); }
/// <summary> /// Allows overriding default client certificate selection logic during mutual authentication /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { e.GetState().PipelineInfo.AppendLine(nameof(OnCertificateSelection)); // set e.clientCertificate to override return(Task.CompletedTask); }
/// <summary> /// Call back to select client certificate used for mutual authentication /// </summary> /// <param name="sender"></param> /// <param name="targetHost"></param> /// <param name="localCertificates"></param> /// <param name="remoteCertificate"></param> /// <param name="acceptableIssuers"></param> /// <returns></returns> internal X509Certificate SelectClientCertificate( object sender, string targetHost, X509CertificateCollection localCertificates, X509Certificate remoteCertificate, string[] acceptableIssuers) { X509Certificate clientCertificate = null; if (acceptableIssuers != null && acceptableIssuers.Length > 0 && localCertificates != null && localCertificates.Count > 0) { // Use the first certificate that is from an acceptable issuer. foreach (X509Certificate certificate in localCertificates) { string issuer = certificate.Issuer; if (Array.IndexOf(acceptableIssuers, issuer) != -1) { clientCertificate = certificate; } } } if (localCertificates != null && localCertificates.Count > 0) { clientCertificate = localCertificates[0]; } //If user call back is registered if (ClientCertificateSelectionCallback != null) { var args = new CertificateSelectionEventArgs { TargetHost = targetHost, LocalCertificates = localCertificates, RemoteCertificate = remoteCertificate, AcceptableIssuers = acceptableIssuers, ClientCertificate = clientCertificate }; //why is the sender null? ClientCertificateSelectionCallback.InvokeParallel(this, args); return(args.ClientCertificate); } return(clientCertificate); }
/// <summary> /// Call back to select client certificate used for mutual authentication /// </summary> /// <param name="sender">The sender.</param> /// <param name="sessionArgs">The http session.</param> /// <param name="targetHost">The remote hostname.</param> /// <param name="localCertificates">Selected local certificates by SslStream.</param> /// <param name="remoteCertificate">The remote certificate of server.</param> /// <param name="acceptableIssuers">The acceptable issues for client certificate as listed by server.</param> /// <returns></returns> internal X509Certificate?SelectClientCertificate(object sender, SessionEventArgsBase sessionArgs, string targetHost, X509CertificateCollection localCertificates, X509Certificate remoteCertificate, string[] acceptableIssuers) { X509Certificate?clientCertificate = null; //fallback to the first client certificate from proxy machine certificate store if (acceptableIssuers != null && acceptableIssuers.Length > 0 && localCertificates != null && localCertificates.Count > 0) { foreach (var certificate in localCertificates) { string issuer = certificate.Issuer; if (Array.IndexOf(acceptableIssuers, issuer) != -1) { clientCertificate = certificate; } } } //fallback to the first client certificate from proxy machine certificate store if (clientCertificate == null && localCertificates != null && localCertificates.Count > 0) { clientCertificate = localCertificates[0]; } // If user call back is registered if (ClientCertificateSelectionCallback != null) { var args = new CertificateSelectionEventArgs(sessionArgs, targetHost, localCertificates, remoteCertificate, acceptableIssuers) { ClientCertificate = clientCertificate }; ClientCertificateSelectionCallback.InvokeAsync(this, args, ExceptionFunc).Wait(); return(args.ClientCertificate); } return(clientCertificate); }
/// <summary> /// Call back to select client certificate used for mutual authentication /// </summary> /// <param name="sender">The sender.</param> /// <param name="sessionArgs">The http session.</param> /// <param name="targetHost">The remote hostname.</param> /// <param name="localCertificates">Selected local certificates by SslStream.</param> /// <param name="remoteCertificate">The remote certificate of server.</param> /// <param name="acceptableIssuers">The acceptable issues for client certificate as listed by server.</param> /// <returns></returns> internal X509Certificate?SelectClientCertificate(RequestStateBase state, object sender, string targetHost, X509CertificateCollection localCertificates, X509Certificate remoteCertificate, string[] acceptableIssuers) { X509Certificate?clientCertificate = null; if (acceptableIssuers != null && acceptableIssuers.Length > 0 && localCertificates != null && localCertificates.Count > 0) { foreach (var certificate in localCertificates) { string issuer = certificate.Issuer; if (Array.IndexOf(acceptableIssuers, issuer) != -1) { clientCertificate = certificate; } } } if (localCertificates != null && localCertificates.Count > 0) { clientCertificate = localCertificates[0]; } // If user call back is registered if (ClientCertificateSelectionCallback != null) { var args = new CertificateSelectionEventArgs(state) { ClientCertificate = clientCertificate }; // why is the sender null? ClientCertificateSelectionCallback.InvokeAsync(this, args, ExceptionFunc).Wait(); return(args.ClientCertificate); } return(clientCertificate); }
/// <summary> /// Allows overriding default client certificate selection logic during mutual authentication /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { //set e.clientCertificate to override return(Task.FromResult(0)); }
/// <summary> /// Invocator for ClientCertifcateSelectionCallback event. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected virtual void OnClientCertificateSelectionCallback(object sender, CertificateSelectionEventArgs e) { ClientCertificateSelectionCallback?.Invoke(sender, e); }
/// <summary> /// Allows overriding default client certificate selection logic during mutual authentication /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { return(Task.FromResult(0)); }
private Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { return(Task.CompletedTask); }
private Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { Log($"OnCertificateSelection: {e.TargetHost}"); return(Completed); }
public static Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { return Task.FromResult(0); }
// 允许在相互身份验证期间重写默认客户端证书选择逻辑 public Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { // set e.clientCertificate to override return(Task.CompletedTask); }
private static Task ProxyServer_ClientCertificateSelectionCallback(object arg1, CertificateSelectionEventArgs e) { return(Task.FromResult(0)); }
private Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { throw new NotImplementedException(); }
public static Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e) { //set e.clientCertificate to override return Task.FromResult(0); }