Tag: ssl

如何指定用于WebClient类的SSL协议

我有一个应用程序使用HTTPS POST将数据发送到服务器。 我使用System.Net.WebClient对象来执行此操作。 这是一个发送一些数据的函数: private byte[] PostNameValuePairs(string uri, NameValueCollection pairs) { byte[] response; String responsestring = “”; using (WebClient client = new WebClient()) { client.Headers = GetAuthenticationHeader(); string DataSent = GetNameValueCollectionValuesString(pairs); try { response = client.UploadValues(uri, pairs); responsestring = Encoding.ASCII.GetString(response); } catch (Exception e) { responsestring = “CONNECTION ERROR: ” + e.Message; return Encoding.ASCII.GetBytes(responsestring); } […]

如何在C#中使用SSL的HTTP GET请求? (协议违规)

我目前正在尝试从在C#中使用SSL的服务器获得响应。 我有在Java中执行此操作的代码,但看起来它们不会以1:1进行翻译。 我确实有一些代码,我发现它适用于常规页面,但不适用于我需要的代码(可能是因为SSL的事情)。 这是代码: WebRequest request = WebRequest.Create(“https://” + sslServerHost + “:” + sslServerPort); request.Proxy = null; request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); 更新:对不起,我似乎忘记了错误是什么。 我在“HttpWebResponse response =(HttpWebResponse)request.GetResponse();”行中遇到了协议违规exception。 有任何想法吗? 多谢你们。

通过SSL发送带有HttpWebRequest的请求时出现错误502(错误网关)

我在经典ASP中有以下代码段,用于发送命令并通过SSL检索响应: Dim xmlHTTP Set xmlHTTP = Server.CreateObject(“Msxml2.ServerXMLHTTP.3.0”) xmlHTTP.open “POST”, “https://www.example.com”, False xmlHTTP.setRequestHeader “Content-Type”,”application/x-www-form-urlencoded” xmlHTTP.setRequestHeader “Content-Length”, Len(postData) xmlHTTP.Send postData If xmlHTTP.status = 200 And Len(message) > 0 And Not Err Then Print xmlHTTP.responseText End If 然后我使用此代码作为参考,在c#中重新实现请求: private static string SendRequest(string url, string postdata) { WebRequest rqst = HttpWebRequest.Create(url); // We have a proxy on the domain, […]

如何在不使用过时的BouncyCastle 1.7.0代码的情况下生成自签名证书?

我有以下代码生成一个很好的自签名证书,效果很好,但我想更新到最新的BouncyCastle(1.8.1.0),我收到有关过时使用的警告: var persistedCertificateFilename = “ClientCertificate.pfx”; if (!string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings[“PersistedCertificateFilename”])) { persistedCertificateFilename = ConfigurationManager.AppSettings[“PersistedCertificateFilename”].Trim(); } if (persistCertificateToDisk) { if (File.Exists(persistedCertificateFilename)) { var certBytes = File.ReadAllBytes(persistedCertificateFilename); this.clientCertificate = new X509Certificate2(certBytes, (string) null, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); } } if (this.clientCertificate == null) { // Initialize the new secure keys KeyGenerator keyGenerator = KeyGenerator.Create(); KeyPair keyPair = keyGenerator.GenerateKeyPair(); this.privateKey […]

WCF服务在方法请求上返回404

我有一个WCF服务页面只通过SSL运行WebGets / WebInvokes – 它在我的本地机器上工作正常(自签名证书)。 但是,在生产时,我可以访问service.svc(并且它向我提供有关如何使用的消息)但service.svc / AnyRequest返回404.两种环境都在IIS 7.5中托管。 我已经启用了跟踪,服务甚至没有获取任何方法请求(例如service.svc / SomeRequest),但它正在处理service.svc就好了。 它也在https://computername.domain.net/path/service.svc听 – 这是正常的吗? 它通常应该指向https://publicfacing.com/path/service.svc吗? 另请注意,生产服务器在IIS中托管多个站点。 下面是我的web.config的system.serviceModel部分。 从这里建议SSLBehave。

在Sql Server连接字符串中使用Encrypt = yes – >“provider:SSL Provider,error:0 – 证书的CN名称与传递的值不匹配。”

我在SQL Server连接字符串中使用Encrypt=yes ,因为我需要加密TCPIP流量,但在打开连接时出现错误: A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 0 – The certificate’s CN name does not match the passed value.) 有任何建议如何解决这个问题? 我假设我的服务器之间需要某种证书关系,但不知道从哪里开始。 我需要两个连接,一个连接到SQL 2000服务器,一个连接到2005服务器。

是否可以在web.config中配置客户端证书设置

我正在使用SSL应用程序,并希望控制哪些文件夹忽略,要求或接受客户端认证。 最终目标是让webApp的子文件夹忽略客户端认证。 我不想通过IIS执行此操作,因为它必须在整个Web场中进行复制。 有任何想法吗?

.NET https跨线程使用不同安全协议的请求

我维护一个非常复杂的ASP.NET应用程序(一个定制的NopCommerce 3.10)。 它需要在不同的场景下通过HTTPS连接到第三方服务器。 我是通过HttpWebRequest类来做到这一点的。 其中一些服务器配置不当: 其中一个第三方服务器(例如服务器A )需要SSL3协议类型,如果设置了其他协议类型,则只会使连接失败。 如果使用SSL3执行连接,则另一台服务器(例如服务器B )提供不正确的证书。 更确切地说,它提供了具有错误CN(通用名称)的证书。 但是,如果我从一开始就使用TLS ,证书就可以了。 我使用ServicePointManager.ServerCertificateValidationCallback回调确定了上述问题,以检查SSL策略错误。 更改安全协议是通过ServicePointManager.SecurityProtocol完成的,这是一个静态属性。 但是,客户端对我的应用程序执行的触发上述HTTPS连接的请求可能碰巧在不同的线程中并行运行。 如果我,例如:将安全协议设置为所需类型,执行HTTPS请求,然后将其设置回服务器A ,我无法保证如果同时需要连接到服务器B的请求不更改ServicePointManager.SecurityProtocol指向服务器A所需的值以外的值。 我相信这是静态变量的典型multithreading问题。 根据我的研究,我确定.NET没有为每个WebRequest实例提供使用特定SSL协议的方法。 我正在考虑以下解决方案: 排队应用程序内的所有传出HTTPS连接,以确保每个连接都有正确的SSL协议 为每个HTTPS请求构建一个单独的应用程序域(由https://stackoverflow.com/a/3107692/1288522建议) 将HTTPS请求更改为低级TCP连接,并为每个TCP连接强制执行不同的SSL协议 制作一个代理asp.net应用程序,它将对传出请求进行排队 注意:排队不会造成巨大的性能损失,因为所有客户端请求的一小部分实际上都会到达相关代码。 然而,考虑到应用程序架构或粗略的解决方法(第三种解决方案),上述解决方案需要进行困难的重构 我的问题与msdn上的这个非常类似,但是没有得到满意的答案。 是否有更直接或有效的方法来确保每个https请求使用特定的SSL协议?

绕过.net核心中的无效SSL证书

我正在开发一个需要连接到https站点的项目。 每次连接时,我的代码都会抛出exception,因为该站点的证书来自不受信任的站点。 有没有办法绕过证书检查.net核心http? 我在以前版本的.NET中看到了这段代码。 我想我只需要这样的东西。 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

将私钥与.net中的X509Certificate2类相关联

我正在研究一些创建X509certificate和公钥/私钥对的代码。 公钥被添加到证书中,并将其发送给签名的CA. 然后通过System.Security.Cryptography.X509Certificates.X509Certificate2类访问返回的证书。 现在,我想使用此证书启动与其他客户端的安全连接。 因此我使用SslStream类。 要启动SSL握手,我使用以下方法: server.AssociatedSslStream.AuthenticateAsServer( MyCertificate, // Client Certificate true, // Require Certificate from connecting Peer SslProtocols.Tls, // Use TLS 1.0 false // check Certificate revocation ); 此方法要求私钥与证书关联。 当然,CA返回的证书不包含私钥。 但它作为.key文件存储在硬盘上。 X509Certificate2类有一个名为PrivateKey的属性,我想将私钥与证书关联,但我找不到设置此属性的方法。 有没有办法可以将私钥与.net X509类关联起来?