cUrlGuzzleで外部のAPIを利用するアプリケーションをAzure WebAppで動かした場合、証明書が見つからずAPIにHTTPSで接続できない問題が発生します。

HTTPSアクセスする際のSSL証明書の場所は、php.iniのcurl.cainfoに設定しますが、Azure Web Appではd:\home\site\ini/settings.iniファイルで設定できます。

公式ドキュメントは、Azure App Service Web Apps での PHP の構成方法
「PHP_INI_SYSTEM 構成設定の変更」を参照ください。

settings.iniの場所をアプリ設定で指定

[アプリケーション設定] > [アプリの設定]に、キー PHP_INI_SCAN_DIR、値 d:\home\site\ini を追加します。
guzzle-on-azure-webapp

Kudu コンソールでsettings.iniファイルを作成

Kuduコンソールは、Web AppのURLが https://testguzzle.scm.azurewebsites.net/出会った場合、https://testguzzle.scm.azurewebsites.net/でアクセスできます。

以下のようにKuduコンソールが表示されたら、[Debug console] > [CMD]を選択します。
guzzle-on-azure-kudo

以下のように、Web Appのディレクトリ構成と、コンソールが表示されます。
guzzle-on-azure-kudo-cmd

ディレクトリ[site]を選択して、[+] > [New folder]を選択して、iniフォルダを作成します。
guzzle-on-azure-webapp-kudu-cmd-new-folder

フォルダ名に、iniと入力します。
guzzle-on-azure-webapp-kudu-cmd-enter-folder-name

作成したsiteフォルダに、settings.iniファイルを作成します。

[+] > [New file]を選択します。
guzzle-on-azure-webapp-kudu-cmd-new-file

settings.iniと入力します。
guzzle-on-azure-webapp-kudu-cmd-enter-file-name

ファイルができました。
guzzle-on-azure-webapp-kudu-cmd-edit-file

編集アイコンをクリックすると、エディタが開くので以下の内容を入力します。

; Example Settings
curl.cainfo="D:/Program Files (x86)/Git/usr/ssl/certs/ca-bundle.crt"

証明書のパスは、公式ドキュメントとは異なります。Gitは入っているので都度確認した方が良いかもしれません。

画面は以下のような感じ。
guzzle-on-azure-kudo-cmd-edit-file-2

3. Web Appを再起動

Web Appを再起動するとHTTPSアクセスが可能になります。

サンプルで確認

今回の設定で実行になるのは以下のようなコードです。

curlの例

<?php
$ch = curl_init("https://www.example.com");
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_exec($ch);
curl_close($ch);

Guzzleの例

<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;

$client = new Client(['timeout'  => 2.0]);
$response = $client->get('https://www.example.com/', ['stream' => true]);
$body = $response->getBody();

// Implicitly cast the body to a string and echo it
while (!$body->eof()) {
    echo $body->read(1024);
}
?>

※ ファイル権限エラーが出たので、streamオプションを指定して回避しています。
sinkの設定した場合は、フォルダのパーミッションがよくわからず。。。

参考

Windows版PHPのcurlの証明書

付録

Composerは、[拡張機能] > [+追加]からインストールできます。

install-composer-to-azure-web-app

Composerを追加後は、Git push後Composerのinstallが実行されるようになります。