在我们的开发阶段,我们创建了一个自签名证书,这意味着我有.cer
和.pfx
文件。当我们尝试调用API时,是否有任何方法可用于在HTTPS请求中嵌入上述文件,因此并非每个客户端都将证书安装到本地可信证书存储区。
这可能吗?我发现了一些似乎我们可以这样做的API,但却无法让它成功:
try
{
var secure = new SecureString();
foreach (char s in "password")
{
secure.AppendChar(s);
}
var handler = new WebRequestHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.UseProxy = false;
var certificate = new X509Certificate2(@"C:\httpstest2.pfx", secure);
handler.ClientCertificates.Add(certificate);
using (var httpClient = new HttpClient(handler))
{
httpClient.BaseAddress = new Uri("https://www.abc.com");
var foo = httpClient.GetStringAsync("api/value").Result;
Console.WriteLine(foo);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
X509Certificate
代替X509Certificate2
?答案 0 :(得分:3)
您可以使用此代码忽略任何SSL错误
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
显然要确保它不能投入生产。
答案 1 :(得分:0)
客户端只需要.cer文件中的公钥,该公钥在建立https连接时自动发送。但是,客户是否信任该证书不是决定,应该允许发送证书的服务器做出决定。
您可以使用组策略将证书分发给您的客户端。有关详细信息,请参阅http://technet.microsoft.com/en-us/library/cc770315(v=ws.10).aspx。