Tag: ssl

如何让System.Web.HttpWebRequest对象使用SSL 2.0?

我不知道我是否掌握了很好地表达这个问题所需的所有信息,所以请耐心等待。 我有一个本地网页(本地意思是192.168。*),它受到自签名SSL证书的保护。 我正在尝试使用System.Net.HttpWebRequest对象访问此页面,但我遇到了一个奇怪的问题。 如果在Internet Explorer中访问此页面并关闭“使用SSL 2.0”选项,浏览器将返回错误,就好像它无法建立连接一样。 (换句话说,浏览器连接错误,而不是服务器发送的错误。)如果打开“使用SSL 2.0”选项,页面工作正常,您会收到标准警告,这是一个自签名证书,你想继续等吗(奇怪的是,Firefox,据说没有打开SSL 2.0,工作得很好。) 现在我的问题是我正在尝试使用HttpWebRequest对象访问此页面,并且它返回的错误是连接意外关闭,就像关闭“使用SSL 2.0”时IE抛出的错误一样。 (我已经有代码来忽略它是一个自签名证书的事实,但它甚至没有达到那么远。) 在发出请求时,如何让System.Net.HttpWebRequest获得“使用SSL 2.0”?

WebApi HttpClient不发送客户端证书

我正在尝试使用客户端证书使用ssl和客户端身份validation来保护我的RESTful WebApi服务。 去测试; 我已生成一个自签名证书并放置在本地计算机,受信任的根证书颁发机构文件夹中,并且我已生成“服务器”和“客户端”证书。 服务器的标准https无问题。 但是我在服务器中有一些代码来validation证书,当我使用提供我的客户端证书的测试客户端进行连接并且测试客户端返回403 Forbidden状态时,这永远不会被调用。 这实现了服务器在我的证书到达我的validation码之前失败了。 但是,如果我启动提琴手,它知道需要客户端证书,并要求我提供一个到我的文档\ Fiddler2。 我给了它我在我的测试客户端使用的相同客户端证书,我的服务器现在工作,并收到我期望的客户端证书! 这意味着WebApi客户端没有正确发送证书,我的客户端代码与我发现的其他示例几乎相同。 static async Task RunAsync() { try { var handler = new WebRequestHandler(); handler.ClientCertificateOptions = ClientCertificateOption.Manual; handler.ClientCertificates.Add(GetClientCert()); handler.ServerCertificateValidationCallback += Validate; handler.UseProxy = false; using (var client = new HttpClient(handler)) { client.BaseAddress = new Uri(“https://hostname:10001/”); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/xml”)); var response = await client.GetAsync(“api/system/”); var str […]

使用Microsoft.Web.Administration以编程方式安装SSL证书

因此, Microsoft.Web.Administration API非常易于用于为站点创建HTTP和HTTPS绑定: using (ServerManager manager = new ServerManager()) { Site site = manager.Sites[siteName]; site.Bindings.Clear(); site.Bindings.Add(“*:80:”, “http”); site.Bindings.Add(“*:443:”, “https”); manager.CommitChanges(); } 但是如果没有SSL证书,HTTPS绑定就毫无意义。 如何使用此API以编程方式选择证书文件并将其与HTTPS绑定一起使用?

如何检查X509证书是否已启用“扩展validation”?

如果X509Certificate(或X509Certificate2)设置了“扩展validation”(EV)标志,我很难找到一种可靠的方法来检查我的C#(。Net 4.0)应用程序。 有谁知道最好的方法?

没有证书存储的WCF证书

我的团队正在为第三方胖客户端应用程序开发一些WPF插件。 WPF插件使用WCF来使用由许多TIBCO服务发布的Web服务。 胖客户端应用程序维护一个单独的中央数据存储,并使用专有API来访问数据存储。 胖客户端和WPF插件将部署到10,000个工作站上。 我们的客户希望将胖客户端使用的证书保留在中央数据存储中,这样他们就不必担心重新颁发证书(当前重发周期大约需要3个月)并且还有机会授权使用证书。 所提出的架构在中央数据存储和TIBCO服务之间提供了一种forms的共享秘密/认证。 虽然我不一定同意所提议的架构,但我们的团队无法改变它并且必须使用所提供的内容。 基本上我们的客户希望我们在我们的WPF插件中构建一个机制,该机制从中央数据存储(基于该数据存储中的角色允许或拒绝)检索证书到内存然后使用证书创建SSL连接到TIBCO服务。 不允许使用本地计算机的证书存储,并且在每个会话结束时丢弃内存版本。 所以问题是,是否有人知道是否可以将内存中的证书传递给WCF(.NET 3.5)服务以进行SSL传输级加密? 注意:我曾经问了一个类似的问题( 这里 ),但后来删除了它并重新询问了更多信息。

在.net获得ssl证书

我希望从任何给定的域名SSL证书获取数据。 例如,我想放入任何网站地址,例如“ http://stackoverflow.com ”,我的代码首先会检查是否存在SSL证书。 如果确实如此,我希望它能够取出证书的失效日期。 [我正在阅读DB的Domainnames]示例: http : //www.digicert.com/help/ 我需要创建一个Web服务来检查到期日期。 我怎么能实现它? – 我查了很多不同的东西,比如RequestCertificateValidationCallback和ClientCertificates等。 我可能完全错了(因此我需要帮助)但是我会创建一个HTTPWebRequest然后以某种方式请求客户端证书和特定元素吗? 我尝试了提供@ SSL证书预取.NET的示例,但我得到了forbitten 403错误。

使用SSL创建TCP客户端连接

我正在尝试创建TCP连接并发送/读取使用SSL的数据,但我无法成功完成此操作。 我想做的是这样的: TcpClient _tcpClient = new TcpClient(“host”, 110); BinaryReader reader = new BinaryReader(new System.Net.Security.SslStream(_tcpClient.GetStream(), true)); Console.WriteLine(reader.ReadString()); 我虽然没有运气。 创建BinaryReader时抛出exception。 有谁知道这样做的一个简单例子? 我不想写这个服务器端,只是客户端。

C#套接字和SslStreams

我很困惑在处理套接字时使用什么是“最好的”。 Socket对象提供发送/接收方法(和异步等效方法),但也允许创建NetworkStream。 我使用Socket.Send获得任何乐趣的唯一方法是将调用包装在一个块中,例如: using (Stream stream = new NetworkStream(socket)) { socket.Send(…); stream.Flush(); } 使用SslStream时,如果您在底层套接字上发送消息,它是否会通过SSL发送? 我应该只使用Stream.Write(…)而不是socket方法吗? 谢谢。

使用HTTPS和httpWebRequest

我发送httpwebrequests到paypal api服务器,这使用https。 我做了你通常用http请求做的正常事情,它起作用了。 我是否需要做一些特殊的事情才能正确使用https,或者在请求URL中指定https以使其正常工作? 谢谢! 顺便说一句,我的请求是从我的服务器发送的,因此加密它们并不像从客户端计算机发送它们那么重要,但我仍然想要做得对。

使用ServerCertificateValidationCallback的最佳实践

我正在开发一个在两个后端服务器之间使用一些HTTP通信的项目。 服务器使用X509证书进行身份validation。 不用说,当服务器A(客户端)建立与服务器B(服务器)的连接时,存在SSL / TLSvalidation错误,因为使用的证书不是来自受信任的第三方权限。 通常,处理它的方法是使用ServicePointManager.ServerCertificateValidationCallback ,例如: ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => { return cert.GetCertHashString() == “xxxxxxxxxxxxxxxx”; }; 这种方法有效,除非它不理想。 它本质上做的是覆盖应用程序完成的每个http请求的validation过程。 因此,如果另一个类将尝试运行HTTP请求,它将失败。 此外,如果另一个类为了自己的目的重写ServicePointManager.ServerCertificateValidationCallback ,那么我的通信开始突然失败。 想到的唯一解决方案是创建一个单独的AppDomain来执行客户端HTTP请求。 这可行,但实际上 – 只有这样才能执行HTTP请求是愚蠢的。 开销将是惊人的。 考虑到这一点,有没有人研究过.NET中是否有更好的实践,这将允许访问Web服务,同时处理客户端SSL / TLSvalidation而不影响其他Web客户端?