所以我使用的是PayPal API。他们要求大公司在每个SOAP请求的同时发送一个X509Certificate。我从未听说过使用证书,它总是只发送API签名和API请求。
因此,我首先创建了一个名为Cerficate的类,它实现了.NET ICerfiticatePolicy。成员方法之一,实际上是您必须实现的唯一方法是:
System.Net.ICertificatePolicy.CheckValidationResult(System.Net.ServicePoint, System.Security.Cryptography.X509Certificates.X509Certificate, System.Net.WebRequest, int)到目前为止,我真的很难理解该把什么传递给这个方法。我想这个方法只是验证Cerfiticate是有效的。所以我不知道ServicePoint是什么,也不知道要传递什么。我以为它是我的web服务引用和一个代理类,比如PayPalAPIAAInterfaceClient。
我还看到了一个使用ServicePointManager.S进行某些操作的非常老的示例,但即使在查看MSDN之后,我也不理解它。所以,我想您要使用ServicePointManager.ServerCertificateValidationCallback,我想应该将回调设置为CheckValidationResult?如果是的话,你什么时候这么做?这让我很困惑。
另外,我猜想我创建了我的证书类的一个实例,并通过从我的磁盘读取P12证书来设置证书属性,然后将它传递给这个方法来检查它是否有效?我想这是对的。
我仍然在试图弄清楚这一切,而且我真的被困在了ServicePoint和WebRequest上,因为实际上我在PayPal中使用了一个代理类,它可以完成请求的幕后发送。因此,我甚至不知道如何传递WebRequest类型,因为无论如何,我都在使用代理方法。那么,我会用什么来代表WebRequest param呢?我使用的是SOAP,而不是NVP,因此我没有像您使用REST服务那样创建一个HttpWebRequest变量,以便通过Http发送API请求。
到目前为止,我尝试过的是:
PayPalAPIAAInterfaceClient client = new PayPalAPIAAInterfaceClient();
Certificate x509Certificate = new Certificate();
ServicePointManager.ServerCertificateValidationCallback = x509Certificate.CheckValidationResult();
client.ClientCredentials.ClientCertificate.Certificate = x509Certificate;问题是,对于ServicePiont和CheckValidationResult的其他参数,我应该传递什么??我甚至不知道我说得对不对。
发布于 2010-01-25 18:17:10
使用WS-Security规范来保护使用X.509证书的SOAP服务当然不是闻所未闻,而且实际上也相当常见--事实上,我们对所有内部和外部web服务都是这样做的。包括WCF在内的所有web服务框架都是专门设计的,以使这尽可能容易。
您不应该在使用with的SOAP服务中使用ServicePointManager或ICertificatePolicy。除非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的绑定和行为元素--或者使用,这要容易得多。
当然,要做到这一点,您必须有一个X.509证书,而PayPal必须知道它。你不能只写new X509Certificate2()。您需要在某个地方拥有一个.pfx或.p12文件,或者如前所述,需要实际安装证书(这是最简单的方法,也是最安全的方法,因为您没有硬编码密码)。您需要将公钥上传到PayPal。
您可能可以使用OpenSSL创建证书。PayPal的EWP页面建议他们接受这些建议,并给出如何创建它们的说明,尽管还不完全清楚是否可以将相同的进程用于SOAP。这可能是他们需要一个“真正的”证书,从Verisign,Thawte等-我会先试试OpenSSL,看看,或只是问他们。
对于整个过程,这里有一个相当全面的指南--除非您在某个地方拥有Microsoft,否则您可能希望跳过生成证书的部分。同样,对于这一部分,您可能希望尝试使用OpenSSL实用程序,然后按照PayPal的说明,然后在服务器上安装证书,然后跳到指南的步骤7。
https://stackoverflow.com/questions/2106328
复制相似问题