Tag: ssl

使用SSL联系Active Directory

我有一个方法来validation针对Active Directory的用户凭据。 我想在SSL中使用这种方法,但我无法使用它。 主要问题是我有一个服务器在我们的网络之外(它叫做DMZ?)。 从那里我想联系我的活动目录,这就是我想使用SSL的原因。 在我的本地计算机(而不是DMZ)上使用它时,我收到此错误: System.DirectoryServices.AccountManagement.PrincipalServerDownException:无法联系服务器。 —> System.DirectoryServices.Protocols.LdapException:LDAP服务器不可用。 在System.DirectoryServices.Protocols.LdapConnection.Connect() 在System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest请求,Int32和messageID) 在System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest请求,TimeSpan requestTimeout) 在System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest请求) 在System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName,ServerProperties&properties) —内部exception堆栈跟踪结束— 在System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName,ServerProperties&properties) 在System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval() at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType,String name,String container,ContextOptions options,String userName,String password) 在System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType,String name,String container,ContextOptions options) at Authorization.AuthorizeAD.ValidateCredentials(String username,String password) 我认为在我从服务器上尝试之前,让它从本地使用SSL会很好。 我的方法: public bool ValidateCredentials(string username, string password) { using ( var context = new PrincipalContext(ContextType.Domain, ContextName, ContextContainer, […]

HTTPs客户端连接到Azure Web App上没有受信任链(非受信任CA)的服务器

我已经被困了大约3天试图连接到一个没有被可信CA签名的证书的服务器 – 你可以通过Azure门户添加CA的证书 – 但是没有任何影响。 显然,HTTP使用内核模块(!)HTTP.SYS。 我所看到的所有建议都要使用: ServicePointManager.ServerCertificateValidationCallback = Communicator.CustomServiceCertificateValidation; (或者在请求本身上不那么全球化的对应物) 或类似的东西: client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication() { CertificateValidationMode = X509CertificateValidationMode.Custom, RevocationMode = X509RevocationMode.NoCheck, //TrustedStoreLocation = StoreLocation.CurrentUser, CustomCertificateValidator = new PermissiveCertificateValidator() }; 但是,都没有被调用!! 一些更重要的细节: 这有效: try { ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; using (var wc = new WebClient()) { var res = wc.DownloadString(“https://untrusted-root.badssl.com/”); […]

使用WildCard SSL证书通过HTTPS进行WCF

我们是在线浏览器内管理工具的开发者。 我们的主要软件目前通过互联网托管和访问,每个客户都有自己的主要软件实例和子域。 例如,customerA.ourdomain.com指向在虚拟服务器上运行的客户A的服务。 customerB.ourdomain.com指向同一个或另一个虚拟服务器上的另一个服务,反之亦然。 我们正在切换到Windows Phone和Store应用程序。 目前,我们已经开发了WCF服务和WP应用程序。 WCF服务与我们的一个虚拟服务器上的主要软件并行运行,并且可以通过测试子域访问。 我们使用90天的路径证书成功确保了应用和服务之间的连接。 此证书包含完整的子域名。 我们现在希望通过使用WildCard证书来保护我们的WCF服务,因此每个客户和/或子域都受到保护,我们不需要为每个客户购买证书。 这可能与WCF有关吗? 这之前完成了吗? CN名称为* .ourdomain.com。 客户可以通过输入自己的子域名将手机连接到自己的服务。 换句话说:WP应用程序应该能够使用相同的证书连接到在customerA.ourdomain.com或customerB.ourdomain.com上运行的WCF服务。 非常感谢!

用.net2.0和.net4.0编写的webservice客户端之间的差异

我在使用SSL上的java webservice时遇到了问题。 我有两种方法,一种是.net4.0,一种是.net2.0。 不幸的是.net4.0方法不起作用。 但是,早期版本(2.0)正常工作: class Program { static void Main(string[] args) { try { Srv.Service client = new Srv.Service (); X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); string findValue = “IssuerName”; X509Certificate2Collection certsCollection = store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false); X509Certificate2 cert; if (certsCollection.Count > 0) { cert = certsCollection[0]; client.ClientCertificates.Add(cert); // Only in .net 2.0 } […]

如何在.NET SslStream中为客户端身份validation指定接受的证书

我试图使用.Net System.Security.SslStream类来处理具有客户端身份validation的SSL / TLS流的服务器端。 要执行握手,我使用此代码: SslStream sslStream = new SslStream(innerStream, false, RemoteCertificateValidation, LocalCertificateSelectionCallback); sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, false); 不幸的是,这会导致SslStream传输一个CertificateRequest,其中包含我的CryptoAPI受信任的根存储中所有证书的主题名。 我希望能够覆盖它。 我不能要求用户在受信任的根存储中安装或删除证书。 看起来SslStream下面使用了SSPI / SecureChannel,所以如果有人知道如何使用该API进行等效,那么这也会有所帮助。 有任何想法吗?

Azure Web应用程序中的“无法创建SSL / TLS安全通道”

我的Azure Web应用程序需要连接到各种服务器(使用和不使用SSL)。 只要我在Windows 10上的本地IIS Express或IIS 7.5中运行应用程序,这就完美无缺。 一旦我将应用程序部署到Azure,它就会停止为需要SSL的某些服务器工作(不是全部)。 如果我通过ssllabs运行它们通常会得到一个A,而那些工作得到一个B或一个C. 所以我假设Azure实例上的.NET支持的密码少于本地支持的密码或类似的东西? 我试过这个 ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3; 也试过没有任何TLS标志,因为这是大多数人的建议,但它没有帮助。 根据下面的post,10月有一个修复,但现在是12月。 https://social.msdn.microsoft.com/Forums/en-US/ca6372be-3169-4fb5-870f-bfbea605faf6/azure-webapp-webjob-exception-could-not-create-ssltls-secure-channel?forum= windowsazurewebsitespreview 它也与Cloud Flare无关。 有任何想法吗? 或者也许要开始,我如何看到我的应用程序尝试使用的密码和可用的密码?

C# – 使用SSL保护`套接字`

嗨我有一个套接字连接(服务器)与可用的方法开发 using System.Net.Sockets; using System.Net; 是否可以在此套接字中保护数据通信? 专门实施SSL ? 任何例子?

System.Web.Services.Protocols.SoapHttpClientProtocol使用什么版本的SSL / TLS?

现在已经发现SSL 3容易受到POODLE攻击: System.Web.Services.Protocols.SoapHttpClientProtocol在连接到任何https Uri时使用的是什么版本的SSL / TLS? 我使用SoapHttpClientProtocol连接到几个第三方SOAP API。 其中一个已经表示他们将阻止任何使用SSL 3的请求。但SoapHttpClientProtocol是.Net核心框架的一部分(使用4.5),因此它使用的SSL版本或如何覆盖版本并不明显。 请注意,此问题与System.Net.WebRequest支持哪些版本的SSL / TLS不重复? 。 我使用了几个API,一些是REST(另一个问题是那些),一些是SOAP(这个问题适用于那些)

添加https绑定时,Microsoft.Web.Administration中的NullReferenceException

我正在尝试以编程方式将绑定添加到我的默认网站,但我一直在Microsoft.Web.Administration dll中获得空引用exception。 最初我想分配证书和绑定。 我能够用这个查询我想要的证书: var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite); var certificate = store.Certificates.Find(X509FindType.FindByIssuerName, “TEST_SELF_SIGNED”, true) .OfType().FirstOrDefault(); 这恰当地给了我我想要的证书,它是非空的并且有我期望的信息。 Site site = GetSite(“Default Web Site”); var binding = site.Bindings.Add(“*:443”, certificate.GetCertHash(), “https”); 鉴于我的变量或示例代码中的任何其他项都不为null(包括返回20字节数组的GetCertHash),我很困惑为什么我在这里得到一个null。 我甚至试过以下重载: site.Bindings.Add(“*:443”, “https”); 我仍然得到相同的空ref堆栈: System.NullReferenceException未处理 Message =对象引用未设置为对象的实例。 来源= Microsoft.Web.Administration 堆栈跟踪: 在Microsoft.Web.Administration.Configuration.SetDirty() 在Microsoft.Web.Administration.ConfigurationElement.SetDirty() 在Microsoft.Web.Administration.ConfigurationElement.SetAttributeValue(String attributeName,Object value) 在Microsoft.Web.Administration.Binding.SetBindingProperty(String attributeName,String value) 在Microsoft.Web.Administration.BindingCollection.Add(String bindingInformation,Byte [] […]

SmtpClient不会通过SSL / TLS进行身份validation(不指向gmail)

我有一个ssl / tls服务器(nodejs),作为postfix / sendmail的代理,对外发邮件执行一些预处理/数据获取。 从C#,我可以使用以下代码手动连接和validation: var sslStream = new SslStream(tcpClient.GetStream(), false, new RemoteCertificateValidationCallback(CertificateValidation), new LocalCertificateSelectionCallback(CertificateSelectionCallback)); string fn = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, “cert.pem”); X509Certificate c = X509Certificate.CreateFromCertFile(fn); var certs = new X509CertificateCollection(); certs.Add(c); sslStream.AuthenticateAsClient(System.Environment.MachineName, certs , SslProtocols.Default, false); 但是,我无法连接SmtpClient。 顶级错误是超时,但我已调试到SmtpClient / SmtpConnection,并且潜在的错误是流不可读,大概是因为它从未经过身份validation(我无法在我的ssl / tls代理服务器中找到一个断点) SmtpClient代码,但上面的手动sslConnection工作正常)。 如果有一种方法可以手动将底层通信流提供给SmtpClient,那将会很棒,但我找不到办法。 任何人都知道为什么下面的代码不会进行身份validation? 这是我用来尝试与SmtpClient连接但未成功的测试应用程序: ServicePointManager.ServerCertificateValidationCallback = CertificateValidation; // Using Ssl3 rather than Tls […]