【发布时间】:2015-09-23 08:29:59
【问题描述】:
无法从 C# 客户端发送 https 请求。这是我的代码:
var client = WebRequest.Create("https://hastname.com/bla bla bla") as HttpWebRequest;
var cert = new X509Certificate2(File.ReadAllBytes("c:\\certs\\MyCert.pfx"), "MyPassword");
client.ClientCertificates.Add(cert);
result = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd();
服务器端没问题,因为如果我在我的 mashine 证书存储中安装了证书,everythink 就可以了。
我比较 2 个请求: 1.从证书存储中删除证书,我从代码文件中加载它 2. 证书安装在证书存储中
在我的结果下方:
首先,我从文件中加载证书
Secure Protocol: Tls
Cipher: Aes256 256bits
Hash Algorithm: Sha1 160bits
Key Exchange: ECDHE_RSA (0xae06) 256bits
== Server Certificate ==========
[Subject]
CN=xxx, OU=Web Services, O=xxx, S=England, C=GB
[Issuer]
E=xx@xxx.com, CN=xxx Server Intermediate CA, OU=CA, O=xxx, S=England, C=GB
[Serial Number]
1000
[Not Before]
17.09.2015 12:51:29
[Not After]
26.09.2016 12:51:29
[Thumbprint]
xxxxxxxxxxxxxxxxxxxxxxxx7
然后我从本地 mashine 证书存储加载证书
Secure Protocol: Tls
Cipher: Aes256 256bits
Hash Algorithm: Sha1 160bits
Key Exchange: ECDHE_RSA (0xae06) 256bits
== Client Certificate ==========
[Subject]
CN=WinClient, OU=Client Apps, O=xxx, S=England, C=GB
[Issuer]
E=xx@xxxxx.com, CN=xxxx Client Intermediate CA, OU=CA, O=xxx, S=England, C=GB
[Serial Number]
1000
[Not Before]
17.09.2015 13:19:55
[Not After]
26.09.2016 13:19:55
[Thumbprint]
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7
== Server Certificate ==========
[Subject]
CN=xx.xxxxxxx.com, OU=Web Services, O=xxx, S=England, C=GB
[Issuer]
E=xx@xxxxx.com, CN=xxx Server Intermediate CA, OU=CA, O=xxx, S=England, C=GB
[Serial Number]
1000
[Not Before]
17.09.2015 12:51:29
[Not After]
26.09.2016 12:51:29
[Thumbprint]
xxxxxxxxxxxxxxxxxxxxxx7
如您所见,第一个请求中没有客户端证书部分。我该如何解决我的问题?
附言我的观点是发送带有从文件加载的证书的请求,而不是从证书存储区。
【问题讨论】: