PHP SoapClient Предупреждение: SoapClient :: SoapClient (): невозможно установить файл закрытого ключа - PullRequest
0 голосов
/ 21 января 2010

Я пытаюсь использовать мыло для вызова веб-службы, но постоянно получаю следующую ошибку «Предупреждение: SoapClient :: SoapClient (): невозможно установить файл закрытого ключа».

Я предполагаю, что ошибка возникает из-за того факта, что используемый мной файл .cer содержит только открытый ключ, а не закрытый ключ. Но я не уверен, что есть другой способ использовать файл .cer. Если я не использую файл .cer, я могу подключиться очень хорошо, и я могу звонить и получать результаты, когда использую метод __getFunctions(). Тем не менее, когда я пытаюсь использовать другие методы, я должен быть авторизован, и это приводит к проблеме. Ниже приведен простой код, который я пытаюсь использовать. Пожалуйста, дайте мне знать, если требуется дополнительная информация.

ini_set('display_errors',1);
error_reporting(E_ALL);

ini_set('soap.wsdl_cache_enabled', 0);
$username = 'user';
$password = 'pass';

$ns = 'GatewayEDI.WebServices';
$auth = array();
$auth['User'] = new SOAPVar($username, XSD_STRING, null, null, null, $ns);
$auth['Password'] = new SOAPVar($password, XSD_STRING, null, null, null, $ns);
$headerBody = new SOAPVar($auth, SOAP_ENC_OBJECT);
$header = new SOAPHeader($ns, 'AuthSOAPHeader', $headerBody);

$client=new SoapClient('https://url/Service.asmx?WSDL',
                   array(
                  'local_cert' => 'file.cer'
                   ));

$client->__setSOAPHeaders(array($header));

$param = array(
  'X12Input'=>"testing",
  "GediPayerID"=>"52",
  "ResponseDataType"=>"Xml"
);

//this leads to private key error
echo $result = $client->DoInquiryByX12Data($param,$header);

1 Ответ

2 голосов
/ 21 января 2010

Я считаю, что ваш файл .pem / .cer должен содержать ваш закрытый ключ:

-----BEGIN RSA PRIVATE KEY----- 
# base64 encoded key 
-----END RSA PRIVATE KEY----- 
-----BEGIN CERTIFICATE----- 
# base64 encoded cert
-----END CERTIFICATE-----

Если в первой строке вашего закрытого ключа есть директива, аналогичная "Proc-Type: 4, ENCRYPTED"Вам нужно будет включить опцию «passphrase» при создании вашего SoapClient().Вы также можете убрать требование парольной фразы с помощью OpenSSL, мой синтаксис немного ржавый, поэтому вы можете проверить его дважды:

openssl rsa -in /path/to/private.key -out /path/to/private.key

«private.key» должен быть только закрытым ключом в этомконтекст (вы можете добавить его в файл .cer / .pem после удаления ключевой фразы.

...