2017-06-28 5 views
0

私は2つの環境を持っています.1つは開発環境、もう1つは開発環境を反映した環境です。Zendフレームワークはどこでデフォルトの証明書ストアを保持しますか?

開発環境では、zendフレームワークを使用してsslサーバーに接続しようとしていますが、次の意味のないエラーメッセージが表示されます。

Unable to Connect to ssl://test.server.com:443. Error #0: 

tcpdumpを使用すると、不明なCAが原因でエラーが検出されました。ここで

は私のコードです:

require_once 'Zend/Http/Client.php'; 
$uri = 'https://test.server.com'; 
$client = new Zend_Http_Client($uri); 
$client->setHeaders(Zend_Http_Client::CONTENT_TYPE, 'application/json'); 
$response = $client->setRawData($json)->setEncType('application/json')->request('PUT'); 

私はsslcapathを指定していない、しかし、私の生産システムは、それなしで正常に動作します。私はsslcapath

$client = new Zend_Http_Client($uri, array(
      'sslcapath' => '/etc/ssl/certs' 
     )); 

を設定-do-とき、私はまだエラーを取得します。 私はZendがどこかで証明書ストアを使用していると思います。あるいは、sslcapathを間違って設定しています。CAが開発環境の証明書ストアにあるかどうか確認したいと思います。

私のCAは両方のシステムで/etc/ssl/certsです。

なぜ同じであるにもかかわらず、本番システムでは動作しますが、開発では動作しない理由が説明されていますか?

答えて

1

あなたのコードに基づいて、Zend_Http_Client_Adapterを定義していません。次に、どのアダプターを選択するかによって、構成が異なります。

https://framework.zend.com/manual/1.11/en/zend.http.client.adapters.html

ソケットを使用した例:

$config = array(
    'adapter' => 'Zend_Http_Client_Adapter_Socket', 
    'sslcert' => '/etc/ssl/certs' 
); 

// Instantiate a client object 
$client = new Zend_Http_Client($uri, $config); 
$client->setHeaders(Zend_Http_Client::CONTENT_TYPE, 'application/json'); 
$response = $client->setRawData($json)->setEncType('application/json')->request('PUT'); 

あなたはあなたの必要性やそのアダプタあなたが好きに基づいて別のアダプタを使用することができます。

+0

'Zend_Http_Client_Adapter_Socket'はデフォルトですので、私のコードをあなたが書いたコードと同じにしませんか? また、 '/ etc/ssl/certs'パスを明示的に設定しても、それでも私の証明書は認識されません。 –

関連する問題