команда curl с сертификатами на php SoapClient (BankID)


На основе https://www.bankid.com/assets/bankid/rp/bankid-relying-party-guidelines-v2.13.pdf

У меня есть рабочая 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

serverCertificate.cer и PrivateKey.ключ были извлечены из сертификата PFX (https://www.bankid.com/assets/bankid/rp/FPTestcert2_20150818_102329.pfx ) с помощью команды openssl.

Но я не могу заставить его работать с PHP SoapClient:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://appapi.test.bankid.com/rp/v4?wsdl' : failed to load external entity "https://appapi.test.bankid.com/rp/v4?wsdl"

Я буду признателен за любую помощь здесь.

Author: halfer, 2016-11-29

2 answers

Спасибо вам, ребята, за ваши ответы.

Решение:

  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 файле.

Затем:

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
Author: Dmitry, 2017-03-01 13:43:51

Просто для будущих людей, столкнувшихся с той же проблемой BankID, Дмитрий дал очень хороший учебник о том, как получить правильный сертификат, но код, который работал для меня, требовал еще нескольких параметров:

try {
    $client = new SoapClient('https://appapi2.test.bankid.com/rp/v4?wsdl',
        ["local_cert" => "certname.pem",
         "stream_context" => [
             "ssl" => [
                 "verify_peer" => false,
                 "verify_peer_name" => false,
                 "allow_self_signed" => true
             ]
         ]
     ]);
} catch (Exception $e) {
    return json_encode( array( "result" => false, "reason" => $e->getMessage() ) );
}
 1
Author: Fran, 2017-11-14 14:24:26