6

DER 証明書 (つまり、証明書に秘密鍵がないことを意味します) を使用して SOAP - PHP 要求を送信しようとしていますが、成功しません。

$local_cert = FULL_PATH_TO_MY_CERT;

   $client = new SoapClient($wsdl, array(
                'local_cert' => $local_cert,
                'trace' => 1,
                'exceptions' => 1,
                'soap_version' => SOAP_1_1,
                'encoding' => 'ISO-8859-1',
                'compression' => (SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP),
                'location' => 'https://webserviceurl:port/ws/servlet/ws'
            ));

私だけがこのエラーを受け取ります:

警告 (2): SoapClient::SoapClient() [soapclient.soapclient]: 秘密鍵ファイル `PATHTOMYLOCALCERT' を設定できません [APP\Vendor\WebServices\MyWS.php、206 行目]

警告 (2): SoapClient::SoapClient() [soapclient.soapclient]: SSL ハンドルの作成に失敗しました [APP\Vendor\WebServices\MyWS.php、206 行目]

警告 (2): SoapClient::SoapClient() [soapclient.soapclient]: 暗号化を有効にできませんでした [APP\Vendor\WebServices\MyWS.php、206 行目]

警告 (2): SoapClient::SoapClient(https://webserviceurl:port/ws/servlet/ws?wsdl) [soapclient.soapclient]: ストリームを開くことができませんでした: 操作に失敗しました [APP\Vendor\WebServices\MyWS.php, 206行目]

警告 (2): SoapClient::SoapClient() [soapclient.soapclient]: I/O 警告: 外部エンティティ "https://webserviceurl:port/ws/servlet/ws?wsdl" [APP\Vendor\WebServices] の読み込みに失敗しました\MyWS.php、206行目]

しかし、関数 file_get_contents($local_cert); を使用して (php.net で) ちょっとしたトリックを見つけました。エラーはなくなりました。

しかし、新しいエラーが発生します。

結果: string(773) 「プレフィックスの読み取りエラー:Action.Execute」

私が言いたいのは...上記のこのエラーは... WebServiceから来ているのですか? 私のリクエストで認証できないからですか?

みんなありがとう。(あなたの答えに感謝します)

4

1 に答える 1

7

ソープ コールで SSL 証明書を使用しています。

私の場合、サーバーに絶対パスをwsdl指定しlocal_cert ており、クラスでそれらを既に定義しています。.pem形式で証明書を使用していることに注意してください。

public $local_cert = "/var/www/.../webroot/cert.pem";
public $wsdl = "/var/www/.../webroot/my_wsdl.wsdl";

$this->client = new SoapClient($this->wsdl, array(
        "trace"         => 1, 
        "exceptions"    => true, 
        "local_cert"    => $this->local_cert, 
        "uri"           => "urn:xmethods-delayed-quotes",
        "style"         => SOAP_RPC,
        "use"           => SOAP_ENCODED,
        "soap_version"  => SOAP_1_2 ,
        "location"      => $this->location
    )
);

私の証明書には 2 つの部分があります。証明書と RSA 秘密鍵。

(1)-----BEGIN CERTIFICATE-----
MIIFjzCC....
....
-----END CERTIFICATE-----
(2)-----BEGIN RSA PRIVATE KEY-----
MIIEpAI....
....
ww==
-----END RSA PRIVATE KEY----

そして最も重要なことはhttps、ソープ コールを行うためにリンクを使用することです。これは私にとってはうまくいきます。

これがあなたを助けることを願っています。

于 2012-07-27T04:14:54.647 に答える