【发布时间】:2016-12-11 08:56:51
【问题描述】:
我想使用 Web 服务 (https://realtime-listings-api.webservices.zpg.co.uk/sandbox/v1/listing/list) 并按照那里的文档 (https://realtime-listings.webservices.zpg.co.uk/docs/latest/documentation.html)
我必须发送 .crt 和 .pem 文件进行身份验证。
我能够加载 .crt 文件,但对于 .pem 我收到错误 Cannot find the requested object 。我尝试了不同的方法来加载 PEM 文件。
我关注了以下线程,但仍然无法从 .pem 文件加载 X509Certificate。
我的代码如下
var webAddr = "https://realtime-listings-api.webservices.zpg.co.uk/sandbox/v1/listing/list";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/json; profile=http://realtime-listings.webservices.zpg.co.uk/docs/v1.1/schemas/listing/list.json";
httpWebRequest.Method = "POST";
httpWebRequest.ClientCertificates.Add(X509Certificate.CreateFromCertFile(@"E:\ProcessZooplaData\zpg_realtime_listings_14810206-20261204.crt"));
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
现在到这里一切都好,如果我尝试加载 .pem 文件,则会出现错误
var pem = System.IO.File.ReadAllText(@"E:\\ProcessZooplaData\\private.pem");
byte[] certBuffer = GetBytesFromPEM(pem, "RSA PRIVATE KEY");
var certificate = new X509Certificate(certBuffer);
httpWebRequest.ClientCertificates.Add(certificate);
byte[] GetBytesFromPEM(string pemString, string section)
{
var header = String.Format("-----BEGIN {0}-----", section);
var footer = String.Format("-----END {0}-----", section);
var start = pemString.IndexOf(header, StringComparison.Ordinal);
if (start < 0)
return null;
start += header.Length;
var end = pemString.IndexOf(footer, start, StringComparison.Ordinal) - start;
if (end < 0)
return null;
return Convert.FromBase64String(pemString.Substring(start, end));
}
我在这里遇到错误 Cannot find the requested object 。
其余代码如下
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\"branch_reference\":\"test\"}";
streamWriter.Write(json);
streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
//return result;
}
我已尝试以下线程以供参考 how to get private key from PEM file?
【问题讨论】:
-
错误信息是什么?
-
有两个错误信息..第一个我无法到达.crt文件的路径..第二个错误是连接底层关闭
-
是的.. 它适用于 .crt 但不适用于 .pem
-
那么
GetBytesFromPEM工作正常吗?你不是要我们调试那小段代码,对吧?你在哪一行得到了异常? -
请发布实际的异常转储。
标签: c# .net web-services cryptography