带有证书的curl命令到php SoapClient(BankID)

时间:2016-11-29 09:13:53

标签: php curl soap https

基于https://www.bankid.com/assets/bankid/rp/bankid-relying-party-guidelines-v2.13.pdf

我有f = requests.post('http://www.example.com/getHtml.php?', headers=headers, cookies=cookies, data=data) resp = f.text if resp == "": return [] resp = encode("utf-8") resp = ''.join(c for c in resp if valid_xml_char_ordinal(c)) doc = html5parser.fragment_fromstring(resp.encode("utf-8"), guess_charset=False, create_parent='div') 命令:

curl

使用curl https://appapi.test.bankid.com/rp/v4?wsdl -E --cacert /path/to/BankID_SSL_Root_Certification_Authority_TEST.pem --cert /path/to/ServerCertificate.cer --key /path/to/PrivateKey.key 命令从PFX证书(https://www.bankid.com/assets/bankid/rp/FPTestcert2_20150818_102329.pfx)中提取ServerCertificate.cer和PrivateKey.key。

但我无法使用PHP SoapClient:

openssl

我将在此感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

谢谢你们的答案。

解决方案:

  1. openssl pkcs12 -in FPTestcert2_20150818_102329.pfx -nocerts -out key.pem -nodes
  2. openssl pkcs12 -in FPTestcert2_20150818_102329.pfx -nokeys -out cert.pem
  3. openssl rsa -in key.pem -out server.key
  4. 复制
    -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----
    来自server.key
    的部分 -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
    来自cert.pem的部分,并将其放入新的certname.pem文件。
  5. 然后:

    try {
        $this->client = new SoapClient( $this->wsdl, array( "local_cert" => "/path_to_cert/certname.pem" ) );
    } catch (Exception $e) {
        return json_encode( array( "result" => false, "reason" => $e->getMessage() ) );
    }
    

答案 1 :(得分:1)

为了让未来的人发现自己有同样的BankID问题,Dmitry提供了一个非常好的教程,说明如何获得正确的证书,但是对我有用的代码需要更多的参数:

$count = $products->where('colour', '[$colour->id]')->count();
----
$count = $products->whereIn('colour', $colour->id)->count();