2010-01-21 21 views
0

所以我使用PayPal的API。他們要求大公司發送X509Certificate以及每個SOAP API請求。我從來沒有聽說過使用證書的,它一直只是一個API請求一起發送API簽名。ICerfiticatePolicy和的ServicePoint

所以我首先創建了一個名爲Cerficate實現了.NET ICerfiticatePolicy類。其中一個成員方法,真的是你必須實現只有一個:

System.Net.ICertificatePolicy.CheckValidationResult(System.Net.ServicePoint, System.Security.Cryptography.X509Certificates.X509Certificate, System.Net.WebRequest, int) 

到目前爲止,我無法真正理解傳遞給該方法。我想這種方法只是驗證Cerfiticate是有效的。所以,我不知道什麼的ServicePoint是什麼,通過了進去。我以爲這是內如PayPalAPIAAInterfaceClient

我的Web服務引用和代理類我也看到一個很老的例子使用的東西ServicePointManager.S,但我不明白,連看MSDN後。所以我猜你是使用ServicePointManager.ServerCertificateValidationCallback,我想回調設置爲CheckValidationResult?如果是這樣,你什麼時候這樣做?這對我來說非常混亂。

而且,所以我想我創造我的證書類的實例,並從我的硬盤讀取P12證書設置證書的屬性,然後在通過這種方法來檢查它是否有效?我想這是對的。

我仍然試圖弄清楚這件事情,我真的堅持在ServicePoint以及WebRequest上,因爲我真的在PayPal中使用了一個代理類,它在請求的底層發送請求。所以,我不明白我怎麼可以在類型的WebRequest即使通過,因爲我使用該反正代理方法。那麼我甚至會傳遞WebRequest參數呢?我使用的是SOAP API WSDL,不NVP這裏,所以我不是例如像你爲了發送通過HTTP API請求與REST服務做創建HttpWebRequest的變量。

到目前爲止,這是我已經試過:

PayPalAPIAAInterfaceClient client = new PayPalAPIAAInterfaceClient(); 
    Certificate x509Certificate = new Certificate(); 
    ServicePointManager.ServerCertificateValidationCallback = x509Certificate.CheckValidationResult(); 
    client.ClientCredentials.ClientCertificate.Certificate = x509Certificate; 

的問題是,我該怎麼傳遞的ServicePiont和params用於在CheckValidationResult的休息?我甚至不知道我是否打這個電話。

回答

2

這當然不是聞所未聞的,實際上相當普遍與使用的WS-Security規範X.509證書確保SOAP服務 - 事實上,我們這樣做對我們所有的內部和外部的Web服務。包括WCF在內的所有Web服務框架都是專門設計的,以便儘可能簡化。

您不應該使用帶有使用WS-Security的SOAP服務的ServicePointManagerICertificatePolicy。除非有一些真正怪異的有關PayPal的API,我認爲你是在錯誤的軌道與上。你需要做的WCF是這樣的:

var client = new PayPalAPIInterfaceClient(); 
X509Certificate2 certificate = (...); 
client.ClientCredentials.ClientCertificate.Certificate = certificate; 
client.AddressVerify(...); // or whatever method you want to call 

你甚至不需要寫這段代碼;如果您已經安裝在服務器的證書存儲中,那麼你只需編輯app.config中的綁定和行爲的要素 - 或使用WCF服務配置編輯器,這是一個容易得多。

當然,爲了做到這一點,你必須一個X.509證書,並且PayPal必須知道它。你不能只寫new X509Certificate2()。您需要在某個地方使用.pfx.p12文件,或者如上所述,必須安裝物理安裝的證書(這是最簡單的方法,也是最安全的方式,因爲您沒有對密碼進行硬編碼)。您需要將公鑰上傳到PayPal。

可能能夠使用OpenSSL創建證書。 PayPal的EWP page表明他們會接受這些信息並給出如何創建它們的說明,但是不清楚是否可以將相同的過程用於其SOAP API。這可能是因爲他們需要Verisign,Thawte等的「真實」證書。 - 我會先嚐試OpenSSL並查看,或者只是問問他們。

有一個非常全面的指導整個過程here - 你可能會想跳過生成證書部分,除非你有一個Microsoft CA的地方。同樣,對於這一部分,您可能會想嘗試使用OpenSSL實用程序,並遵循PayPal的說明,然後在您的服務器上安裝證書並跳至該指南的第7步。

相關問題