インストール手順

PHP の OpenSSL サポートを使用するには、--with-openssl を指定して PHP を コンパイルする必要があります。

OpenSSL ライブラリを動作させるためには、実行時にさらに必要なものがあります。 特に、OpenSSL から乱数 (あるいは疑似乱数) 生成器にアクセスできなければなりません。 たいていの Unix および Unix 系のプラットフォーム (Linux など) の場合、 /dev/urandom あるいは /dev/random デバイスがこれにあたります。

configure オプション --with-system-ciphers が利用できます。 これにより、PHP がハードコードされたデフォルトではなく、システムが持つ暗号リストを使うようになります。

注意: Win32 ユーザーへの注意

この拡張モジュールを動作させるには、 Windows システムの PATH が通った場所に DLL ファイルが存在する必要があります。 FAQ の "Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?" で、その方法を説明しています。 DLL ファイルを PHP のフォルダから Windows のシステムディレクトリにコピーしても動作します (システムディレクトリは、デフォルトで PATH に含まれるからです) が、これは推奨しません。 この拡張モジュールを使用するには、以下のファイルが PATH の通った場所にある必要があります。 libeay32.dll, または、OpenSSL 1.1 以降では libcrypto-*.dll

加えてキー生成およびサイン認証関数を使用する計画がある場合、 システムに 有効な openssl.cnf をインストールする 必要があります。 Win32 バイナリ配布版にサンプル設定ファイルを同梱することにしました。 extras/ssl ディレクトリにあります。

PHP は、 以下のロジックにより openssl.cnf を探します。

  • 環境変数 OPENSSL_CONF が設定された場合、 設定ファイルの(ファイル名を含む)パスとして使用されます。
  • 環境変数 SSLEAY_CONF が設定された場合、 設定ファイルの(ファイル名を含む)パスとして使用されます。
  • ファイル openssl.cnf はデフォルトの認証エリアに あることが仮定され、openssl DLL がコンパイルされた時間で設定されます。 これは通常、デフォルトのファイル名が c:\usr\local\ssl\openssl.cnf (x64の場合), または C:\Program Files (x86)\Common Files\SSL\openssl.cnf (x86の場合), PHP 7.4.0 より前のバージョンでは C:\usr\local\ssl\openssl.cnf であることを意味します。

インストール時に、設定ファイルを デフォルトのパス または 他の場所にインストールし、(例えば仮想ホスト毎に)環境変数に設定ファ イルの場所を指定するかを選ぶ必要があります。 設定ファイルを必要とする関数の options に より、デフォルトのパスを上書きすることが可能であることに注意してください。
警告

権限がないユーザーに openssl.cnf を変更させないようにしてください。

Windows 版の PHP 8.2.0 以降でデフォルトとなっている OpenSSL 3.0.0 以降、 いくつかのアルゴリズムがレガシーとみなされるようになっています。 そうしたアルゴリズムは、暗号のコミュニティは使わなくなってきており、 かつセキュアでないと見なされてきているものです。 これらのアルゴリズムはレガシープロバイダ (extras/ssl/legacy.dll) で利用できます。その使い方は OpenSSL マニュアルの » provider configuration で説明されています。

変更履歴

バージョン 説明
7.4.0 --with-openssl[=DIR] は、ディレクトリ名を引数として受け入れなくなりました。 代わりに、pkg-config の変数 PKG_CONFIG_PATH を OpenSSL のインストールパスに設定するか、 環境変数 OPENSSL_LIBSOPENSSL_CFLAGS を設定するようにしてください。
7.4.0 OpenSSL のデフォルトの設定ファイルのパスが C:\usr\local\ssl から C:\Program Files\Common Files\SSLC:\Program Files (x86)\Common Files\SSL にそれぞれ変更されました。