【问题标题】:Encrypted web services connections and pk12 certificates加密的 Web 服务连接和 pk12 证书
【发布时间】:2008-12-08 03:20:20
【问题描述】:

我需要编写一些代码来与 SOAP Web 服务通信。不幸的是,我无法连接到该服务,因为它需要使用特殊证书加密的 SSL 连接。我已经获得了一个 pk12 证书,当它安装到我的钥匙串中时,我可以通过 Safari 手动访问 SOAP 服务,但我无法从 Cocoa Web 服务的东西获得连接:( 是否有人对我可能需要做些什么才能使其正常工作有任何想法?

【问题讨论】:

    标签: cocoa soap encryption


    【解决方案1】:

    我也遇到过类似的问题。这是自签名证书吗?如果是这样,您可能会发现您需要做的就是更改此证书上的信任设置。

    还有另一种解决方法,您说该站点应忽略信任设置,但这会使您容易受到中间人攻击。关于这个主题还有另一个关于 SO 的帖子:

    Objective-C/Cocoa How do I accept a bad server certificate?

    【讨论】:

    • 我已经将证书上的信任设置设置为“始终信任”,但这似乎对我没有帮助。就好像 WS 函数没有查看钥匙串 :(
    • 是的,我也遇到了这个问题。我必须在链接的帖子中使用该技术,并稍加补充 - 在我做我的 WS 工作之前,我需要先做一个 NSURLRequest。然后它按预期工作。
    • 我无法让 WSInvocation 工作,最后我不得不构建 SOAP 信封并手动执行 HTTP 发布,但 Matthew 为我指明了正确的方向。跨度>
    【解决方案2】:

    通常,您必须将证书作为代码的一部分提供。例如,在 C# 中,您需要像这样指定证书:

    using System.Security.Cryptography.X509Certificates;
    
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //some code creating your soap client
    
            string cert_file = "C:\\prf_res.pem"; //You'll probably use the PEM format here, not the .p12 format
            X509Certificate cert = new X509Certificate(cert_file);
            soap_client.ClientCertificates.Add(cert);
    
            //now you're set!
    

    在 PHP 中,它是:

       $cert = "myCert.pem"; //notice it's in PEM format. 
    
       $client = new SoapClient($wsdl, array('local_cert' => $cert));
    

    要使用 .p12 制作 PEM 文件,您可以使用:

    OpenSSL> pkcs12 -in myCert.p12 -out myCert.pem -nodes -clcerts

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 请至少添加链接说明。
      • 请添加足够的内容以使答案能够独立存在 - 仅链接的答案通常不受欢迎,因为内容很容易更改。
      猜你喜欢
      • 2012-12-04
      • 1970-01-01
      • 2014-12-25
      • 2015-07-08
      • 2011-12-31
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 2012-02-04
      相关资源
      最近更新 更多