Tag: 客户端证书

禁止WCF客户端证书和用户名凭据

我在让WCF客户端连接到需要客户端证书和用户名/密码的服务器时遇到问题。 我已经validation使用JUST客户端证书使用此方法: var binding = new WSHttpBinding(SecurityMode.Transport); binding.Security.Transport = new HttpTransportSecurity(); binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; var ea = new EndpointAddress(EndpointUrl); using (var p = new ServiceReference1.AAAClient(binding, ea)) { try { p.ClientCredentials.ClientCertificate.SetCertificate( System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser, System.Security.Cryptography.X509Certificates.StoreName.My, System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName, CertificateSubject); var x = p.RequiresClientCertificateOnly(); Console.WriteLine(“Status: ” + x.status); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.WriteLine(); } 下一个合乎逻辑的步骤是添加用户名/密码部分,但它返回403未经授权。 我知道凭证和证书是有效的,因为我在中间使用fiddler提供客户端证书和用户名/密码,它工作正常,只是当通过WCF使用它似乎不起作用,或使用发送两个客户端证书和用户名/密码。 尝试使用两者的代码如下(尝试使用WSHttpBinding和BasicHttpBinding – […]

在C#中导入证书时,`PersistKeySet`-StorageFlag的影响是什么

在我的应用程序中,使用以下代码以编程方式将客户端身份validation证书添加到MY -Store: //certData is a byte[] //password is a SecureString X509Certificate2 certificate = new X509Certificate2(certData, password, X509KeyStorageFlags.Exportable); X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); try { store.Open(OpenFlags.ReadWrite); store.Add(certificate); } finally { store.Close(); } 使用此代码,证书已在我测试的所有计算机上正确导入MY -Store(指纹和认证链也正确)。 但是在某些计算机(Windows 7 Professional SP1和带有本地用户帐户的Widnows Server 2008 R2)上,证书之后可能不会用于客户端身份validation( “无法为SSL / TLS安全通道建立信任关系” )。 在具有域用户帐户的Windows 8.1 Enterprise计算机上,身份validation有时会起作用,但并非总是如此。 我绝望地尝试了几件事,最后找到了将X509KeyStorageFlags.PersistKeySet添加到存储标志的解决方案。 所以第一行现在是: X509Certificate2 certificate = new X509Certificate2(certData, […]

使用客户端证书身份validation连接到Web服务

我已经使用客户端证书身份validation通过SSL连接到Web服务的.p12文件。 我使用cURL成功地在PHP中工作。 这些是我在执行请求时使用的选项: $headers = array( ‘Method: POST’, ‘Connection: Keep-Alive’, ‘User-Agent: PHP-SOAP-CURL’, ‘Content-Type: text/xml; charset=utf-8’, ‘SOAPAction: “‘.$action.'”‘, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $location); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $request); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_SSLCERT, $this->clientcert); curl_setopt($ch, CURLOPT_SSLKEYTYPE, $this->clientcerttype); curl_setopt($ch, CURLOPT_SSLKEY, $this->keyfile); curl_setopt($ch, […]

在* some * WebAPI控制器上禁用SSL客户端证书?

为未来的读者编辑 :不幸的是,获得赏金的答案不起作用; 我现在无能为力。 但是请在下面阅读我自己的答案(通过测试) – 确认可以使用最少的代码更改 我们有一个完全在ASP.NET WebAPI 2.2中的Azure云服务(WebRole)(没有MVC,前端是Angular)。 我们的一些控制器/ REST端点通过SSL(客户端证书身份validation/相互身份validation)与第三方云服务通信,其余控制器/端点与HTML5 / AngularJS前端通信,也通过SSL(但更传统的服务器身份validation) SSL)。 我们没有任何非SSL端点。 我们通过云服务启动任务启用了客户端SSL,例如: IF NOT DEFINED APPCMD SET APPCMD=%SystemRoot%\system32\inetsrv\AppCmd.exe %APPCMD% unlock config /section:system.webServer/security/access 问题:该设置是站点范围的,因此即使用户访问第一页(例如https://domain.com ,返回angular.html的index.html),他们的浏览器也要求他们提供客户端SSL证书。 (下图) 如果有办法要么 将客户端SSL证书请求限制为仅与第三方云服务通信的WebAPI控制器? 要么 为我们的前端驱动webapi控制器跳过客户端SSL身份validation? 我们的服务器的web.config很复杂,但相关的代码片段如下: 并且客户端的屏幕截图访问常规WebAPI端点但尚未尝试客户端SSL身份validation(在任何浏览器,Chrome,Firefox或IE中都会发生)

当SMPT服务器具有有效证书时,“根据validation过程”获取“远程证书无效”

这似乎是一个常见的错误,但是当我找到一个解决方法(见下文)时,我无法确定我首先得到它的原因。 我正在将SMTPfunction写入我们的应用程序,并且我正在尝试将SSLfunction添加到我们已有的工作SMTP中。 我正在测试使用我们公司的MS Exchange服务器,特别是在其上启用的webmail选项。 我可以通过我的代码在内部发送电子邮件,不会对我的连接进行身份validation并匿名发送,但是由于我们公司的政策,这些电子邮件不会转发到外部电子邮件地址。 除此之外,我正在为我们的客户编程,他们并不都允许开放中继和/或匿名连接。 我相信Exchange服务器正在使用显式SSL / TLS。 我已尝试telnet到端口25上的服务器地址并获得文本响应,人类可读的响应,根据我之前的一些搜索,这意味着它使用显式SSL / TLS。 我有以下测试代码 SmtpClient SMTPClient = new SmtpClient(webmailaddress); SMTPClient.Port = 25; SMTPClient.UseDefaultCredentials = true; SMTPClient.EnableSsl = true; System.Net.Mail.MailMessage Message = new ` System.Net.Mail.MailMessage(emailFrom,emailTo,subject,body); SMTPClient.Send(Message); 在我寻找解决方案期间,我遇到了“远程证书根据validation程序无效”。 使用Gmail SMTP服务器 从中我得到以下代码…… ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); public static bool ValidateServerCertificate(object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) […]