Tag: sspi

无法连接到仅使用临时密码套件的SSL服务器(无法联系本地安全机构)

我正在尝试连接到以openssl开头的测试服务器(这个有限的密码组合是有意的): openssl s_server -accept 443 -www -tls1_2 -cipher ECDHE:DHE:EDH -cert selfsignedcert.pem -key sskey.pem 我使用的代码类似于msdn的 public static bool ValidateServerCertificate( object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } … var client = new TcpClient(target, port); SslStream sslStream = new SslStream(client.GetStream(), false,ValidateServerCertificate,null); sslStream.AuthenticateAsClient(target, null, SslProtocols.Tls12, false); 但是我在最后一行遇到exception: A call to SSPI failed, see inner […]

如何在.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进行等效,那么这也会有所帮助。 有任何想法吗?

我如何在.NET中处理Negotiate?

我正在尝试在小型Web服务器中实现Negotiate(至少是Kerberos部分)。 我已经想出如何让客户端向我发送Kerberos Negotiate Authorization标头。 我已经弄清楚如何解码这些数据(ASN.1)。 我无法弄清楚如何将其变成WindowsIdentity 。 我可以从KerberosReceiverSecurityToken中了解我的情况,但是找不到像NegotiateReceiverSecurityToken这样的东西。 我一直在挖掘大量的DLL,我不能为我的生活找出IIS / .NET处理Negotiate标头的地方。 我假设(如果我有自己的SspiWrapper )我会用SspiWrapper.AcquireDefaultCredential(“Negotiate”, CredentialUse.Inbound)做一些事情来获取一个SSPI上下文,我可以用它来调用AcceptSecurityContext/Negotiate ,然后使用QuerySecurityContextToken来获取令牌我可以创建一个WindowsIdentity 。 但是KerberosReceiverSecurityToken使得它看起来像一个非常复杂的过程。 并且不知道如何做到这一点或授权头部有效负载的哪一部分放入其中,我可能会在没有任何地方的情况下击败它一个月。 (在你提出或回答之前,我完全没有兴趣使用内置的谈判逻辑。如果我能找到它,我会从中学习,但我一直在努力让它为FAR工作很久。而我完成了。)

SslStream.AuthenticateAsClient上的exception(消息格式错误)

我有一个奇怪的问题。 我试图通过TCP / SSL连接到Apple服务器。 我使用Apple提供的客户端证书进行推送通知。 我在本地受信任的根证书和本地个人证书文件夹中的服务器(Win2k3)上安装了证书。 现在我有一个处理该连接的类库,当我从服务器运行的控制台应用程序调用这个类库时它工作得非常好,但是当我从asp.net页面或asmx web服务调用该类库时,我得到了以下例外。 对SSPI的调用失败,请参阅内部exception。 收到的消息是意外的或格式错误。 这是我的代码: X509Certificate cert = new X509Certificate(certificateLocation, certificatePassword); X509CertificateCollection certCollection = new X509CertificateCollection(new X509Certificate[1] { cert }); // OPEN the new SSL Stream SslStream ssl = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); ssl.AuthenticateAsClient(ipAddress, certCollection, SslProtocols.Default, false); ssl.AuthenticateAsClient是抛出错误的地方。 这让我疯了。 如果控制台应用程序可以很好地连接,那么在validation失败的情况下,asp.net网络层安全性肯定存在一些问题…不确定,可能需要在web.config中添加一些或某种安全策略。 还要指出我可以通过控制台和网站在我的本地开发机器上正常连接。 有人有任何想法吗?

如何使用SSPI从Kerberos获取服务令牌

目标:我正在尝试使用SSPI构建Proof Of Concept客户端应用程序以实现单点登录。 我是C#的新手,我很困惑。 到目前为止我所知道和完成的事情:所有用户都是Active Directory域的一部分,因此我知道Kerberos在登录期间用于身份validation。 此时我需要做的就是从Kerberos获取服务令牌,这样我就可以将它传递给服务资源而不是用户名和密码(如果我错了,请纠正我)。 我已经获得了服务原则名称(SPN)和已在Kerberos中注册的服务密码。 我希望不要使用平台调用服务来调用SSPI函数,但如果必须的话,我会这样做。 我通读了“.NET Remoting身份validation和授权示例 – 第一部分”,并使用Microsoft.Samples.Security.SSPI进行测试。 我还尝试使用C#/ .Net接口到Win32 SSPI身份validationAPI 。 到目前为止,我可以获得用户/客户端凭据,构建客户端安全上下文。 但是,如何为给定的SPN请求服务票证? 非常感谢您的帮助和指导。 如果可以,请具体说明,如果您有任何疑问,请告诉我。

对SSPI的调用失败,请参阅内部exception – 无法联系本地安全机构

我有一个WPF应用程序,它使用SSLStream连接到服务器并发送/接收一些消息。 我的代码更大程度上基于这个例子(SslTcpClient): https ://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v = vs.110).aspx。 这个工作好几个月了。 但是,在获得此Windows更新(Windows 10版本1511和Windows Server 2016技术预览4的累积更新:2016年6月14日 – https://support.microsoft.com/en-us/kb/3163018 )之后。 我的应用程序开始报告此exception: System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. —> System.ComponentModel.Win32Exception: The Local Security Authority cannot be contacted — End of inner exception stack trace — at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte[] […]

客户端 – 服务器身份validation – 使用SSPI?

我正在研究客户端 – 服务器应用程序,我希望客户端使用用户的登录凭据向服务器validation自身,但我不希望用户必须输入他们的用户名和密码。 我当然不想负责安全处理密码。 我只需要用户向我certificate他们是他们所说的人,然后我的服务器就可以继续执行并随意授予/拒绝命令。 我的用户是域的一部分,因此我希望能够使用他们登录时创建的登录凭据。 我没有使用任何类型的Web服务,也不想。 我控制客户端和服务器软件,两者都是用纯C#编写的,并使用好的插槽来完成工作。 我宁愿用纯C#/。Net来做这件事,但我愿意使用不安全的C#和pinvokes到win32 API,如果这意味着我将完成工作。 我已经在Windows中阅读了一些关于SSPI的内容,但是我在黑暗中有点感觉,因为这种应用程序开发对我来说是新的。 有人知道怎么做这个吗? SSPI是这样的吗? 如何在C#中使用SSPI? 是否有.Net原生方式,以便我的代码可以保持可移植性?