質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.09%

HTTPSのサーバへSOAP通信

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,534

score 106

require_once 'SOAP/Client.php';
$client =  new SOAP_Client('https://soap/example.com/api?wsdl');
$param = array(
  'Request' => array(
    'abc' => 123,
    'def' => 456,
  ),
);
$response = $client->ClientMethod($param);
var_dump($response);

上記プログラムを実行すると以下のエラーが表示されます。

object(SOAP_Fault)#4 (8) {
  ["error_message_prefix"]=>
  string(0) ""
  ["mode"]=>
  int(1)
  ["level"]=>
  int(1024)
  ["code"]=>
  string(4) "HTTP"
  ["message"]=>
  string(165) "curl_exec error 60 SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed"
  ["userinfo"]=>
  string(0) ""
  ["backtrace"]=>
  array(9) {
    [0]=>
    array(7) {
      ["file"]=>
      string(30) "/usr/share/pear/SOAP/Fault.php"
      ["line"]=>
      int(64)
      ["function"]=>
      string(10) "PEAR_Error"
      ["class"]=>
      string(10) "PEAR_Error"
      ["object"]=>
      *RECURSION*
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(5) {
        [0]=>
        string(165) "curl_exec error 60 SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed"
        [1]=>
        string(4) "HTTP"
        [2]=>
        NULL
        [3]=>
        NULL
        [4]=>
        string(0) ""
      }
    }
※省略

上記、soap.example.comのサーバ証明書にチェーンする証明書を設定する方法をご教授いただきたく質問致します。

以上、宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

curlSSL3_GET_SERVER_CERTIFICATEのエラーが出てますね。
証明書を更新すると直るかもしれません。(opensslのパッケージを更新する)
http://hogem.hatenablog.com/entry/20120705/1340284071

どうしても中間証明書が必要な場合は、SoapClientのオプションで指定する必要があると思いますが、
詳しいドキュメントが探せませんでした。以下のドキュメントあたりを参照してください。
SoapClient::SoapClient
SSL コンテキストオプション

SOAP/Client.phpはsoapのラッパークラスですかね?
素のSoapClientだと以下のようにして、SSLコンテキストオプションを指定できます。
例として、CAファイルを指定する場合を書きますが、これが中間証明書になるのかは分かりませんでした。

$cafile = '/path/to/cafile.pem'; //CAファイルの場所

$client = new SoapClient(
  "https://soap.example.com/api?wsdl", // これがWSDLですよね?
  [
    "stream_context" => stream_context_create(
      [
        'ssl' => [
          'cafile' => $cafile,
          'capture_peer_cert' => true,
          'capture_peer_cert_chain' => true
         ]
      ])
  ]
);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る