2016-12-11 11 views
1

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ファイルを読み込むために別の方法を試しました。Zoopla webserviceをC言語で使用することができません。

以下のスレッドに従っていますが、まだ.pemファイルからX509Certificateをロードできませんでした。

私のコードはここにすべてが私は.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ことをここでエラーを取得しています今すぐとして

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; 

を下回っています。あなたの証明書がすでに証明書ストアにロードされている場合は、私が参照 how to get private key from PEM file?

http://pages.infinit.net/ctech/20040812-0816.html

+0

エラーメッセージは何ですか? – ArDumez

+0

2つのエラーメッセージがあります。1つ目は.crtファイルのパスに到達できません.2番目のエラーは接続のクローズ – Mahajan344

+0

のため、CreateFromCertFileメソッドが証明書を見つけられませんでしたか? –

答えて

0

ために、次のスレッドを試してみました

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; 
        } 

以下のようなコードの 残りは、あなたが次の操作を行うことができ、あります:

var requestHandler = new WebRequestHandler(); 
var store = new X509Store("My", StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadOnly); 
var certificates = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, certificateName, true); 
if (certificates.Count > 0) 
    requestHandler.ClientCertificates.Add(certificates[0]); 
else 
    throw new Exception(string.Format("Can't find certificate {0}", certificateName)); 
using (var client = new HttpClient(requestHandler)) 
{ 
    do work! 
} 

stからcertを追加する必要があります接続への鉱石。

次に、証明書に証明書ストアを開き(ローカルコンピュータストアのコンソールに証明書を追加)、証明書を参照して右クリックし、[すべてのタスク]> [秘密キーの管理]を選択する必要がありますアプリケーションが証明書の秘密鍵への「読み取り」アクセスで実行されるユーザーアカウントを許可し、これを行うためにファイルを開く必要はありません。

もちろん、証明書にアクセスできない共有ホスティング環境でこれをやっている場合や、証明書ストアに証明書ストアをインストールできない場合は、別の問題です。

関連する問題