繁体   English   中英

使用带有HTTPS证书的System.Net.WebClient

[英]Using System.Net.WebClient with HTTPS certificate

在我的C#Windows客户端中,我有一个POST提交给“母舰”。 当然,我希望提交中的数据是安全的,因此我支付了HostGator向我发放SSL证书的费用。

我保存了.CER文件,我正在构建请求:

//wrapper for WebClient object to use certificate file
class SecureWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
        string certPath = @"e:\mycertificate.cer";
        X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath);
        request.ClientCertificates.Add(myCert);
        return request;
    }
}

//request
private static SecureWebClient client = new SecureWebClient();
private static NameValueCollection = new NameValueCollection();
nvc.Add(POST_ACTION, ACTION_CODE_LOGIN);
nvc.Add(POST_EMAIL, email);
nvc.Add(POST_PASSWORD, password);

sResponse = System.Text.Encoding.ASCII.GetString(client.UploadValues(BASE_URL + ACTION_PAGE, nvc));

它抛出一个System.Net.WebException:

底层连接已关闭:发送时发生意外错误。

InnerException是一个System.IO.IOException:

由于意外的数据包格式,握手失败。

对我做错了什么的见解?

如果您没有使用客户端证书,并且可以使用https://访问您的服务器,那么您的代码应如下所示:

private static WebClient client = new WebClient();
private static NameValueCollection nvc= new NameValueCollection();

nvc.Add(POST_ACTION, ACTION_CODE_LOGIN);
nvc.Add(POST_EMAIL, email);
nvc.Add(POST_PASSWORD, password);

sResponse = System.Text.Encoding.ASCII.GetString(client.UploadValues(BASE_URL + ACTION_PAGE, nvc));

只要您的BASE_URL使用https://,就会加密所有数据( 进出服务器)。

IOW使用SSL / TLS从客户端到服务器不要求客户端做任何特殊的事情(使用证书),除了使用https://作为方案,因为操作系统提供您需要的所有内容(例如,受信任的根)保护数据传输。

当私钥可用时, 客户端证书有效。 使用.CER文件时,因为X.509证书包括私钥这不是通常的情况。

确保私钥可用的唯一安全方法是从PKCS#12文件加载证书,其中证书和私钥都可用(即两者都被导出到.pfx文件中)。

笔记:

  • 我之所以说通常是因为Windows / CryptoAPI有时会产生一些魔力 (当与X509Certificate一起使用时)并自动将证书与来自certificate.key存储的私钥相关联。

  • 我说安全,因为这也适用于Mono,而不仅仅是MS .NET。

听起来你正在倒退。 您应该在Web主机/服务器上安装SLL证书。 然后,您创建Web服务器的Web请求,并需要HTTPS协议。

只需使用RDP连接到您的服务器即可

打开IE并转到Internet选项

导航到“高级”选项卡并启用“使用SSL 2.0和SSL 3.0”

现在,您的服务器请求将被验证

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM