このモジュールは、署名の生成および認証、そして、データのシール (暗号化)およびオープン(復号化)を行うために、 OpenSSL の関数を使用します。 OpenSSL は多くの機能を提供しますが、これらはまだこのモジュールでは サポートされていません。これらのいくつかは将来的に追加される可能性が あります。
OpenSSL 関数を使用するためには、OpenSSL パッケージがインストール されていることを要します。 PHP のバージョン 4.0.5 から 4.3.1 までは、OpenSSL >= 0.9.5 で動作します。他のバージョン(PHP <=4.0.4 および >= 4.3.2) では OpenSSL >= 0.9.6 を必要とします。
警告 |
最新のバージョンの OpenSSL を使用するようにしてください。 さもないと、Web サーバへの攻撃に対しての脆弱性をかかえてしまいます。 |
PHP の OpenSSL サポートを使用するには、--with-openssl[=DIR]
を指定して PHP を
コンパイルする必要があります。
Win32 ユーザへの注意: この拡張モジュールを動作させるには、 Windows システムの PATH が通った場所に DLL ファイルが存在する必要があります。 FAQ の "Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?" で、その方法を説明しています。 DLL ファイルを PHP のフォルダから Windows のシステムディレクトリにコピーしても動作します (システムディレクトリは、デフォルトで PATH に含まれるからです) が、これは推奨しません。 この拡張モジュールを使用するには、以下のファイルが PATH の通った場所にある必要があります。 libeay32.dll
Win32 ユーザへの注意: 加えてキー生成およびサイン認証関数を使用する計画がある場合、 システムに 有効な openssl.cnf をインストールする 必要があります。PHP 4.3.0 以降、Win32 バイナリ配布版の openssl フォルダに サンプル設定ファイルが含まれています。 PHP 4.2.0 以降を使用しておりこのファイルがない場合、 OpenSSLのホームページから入手するか PHP 4.3.0 のリリース版をダウンロードし、それらに含まれる 設定ファイルを使用することができます。
PHP は、 以下のロジックにより openssl.cnf を探します。
環境変数 OPENSSL_CONF が設定された場合、 設定ファイルの(ファイル名を含む)パスとして使用されます。
環境変数 SSLEAY_CONF が設定された場合、 設定ファイルの(ファイル名を含む)パスとして使用されます。
ファイル openssl.cnf はデフォルトの認証エリアに あることが仮定され、openssl DLL がコンパイルされた時間で設定されます。 通常、デフォルトのファイル名が c:\usr\local\ssl\openssl.cnf であることを 意味します。
インストール時に、設定ファイルを c:\usr\local\ssl\openssl.cnf または 他の場所にインストールし、(例えば仮想ホスト毎に)環境変数に設定ファ イルの場所を指定するかを選ぶ必要があります。 設定ファイルを必要とする関数の
configargs
に より、デフォルトのパスを上書きすることが可能であることに注意してください。
設定ディレクティブは定義されていません。
OpenSSL 関数のうち、キーまたは証明書パラメータを必要とするものは ごく一部です。PHP 4.0.5 より以前では、openssl_get_xxx 関数により り返されたキーまたは証明書リソースを使用する必要がありました。 これより後のバージョンでは、次の方法のどれかを使用することが 可能となる予定です。
証明書
openssl_x509_read() から返された X.509 リソース。
file://path/to/cert.pem 形式の文字列。 このファイルは、PEM エンコードされた証明書である必要があります。
PEMエンコードされた証明書の内容を含む文字列。
公開鍵/秘密鍵
openssl_get_publickey() あるいは openssl_get_privatekey() から返された キーリソース。
公開鍵のみ: X.509リソース。
file://path/to/file.pem 形式の文字列。- このファイルは、PEM エンコードされた証明書/秘密鍵である 必要があります(両方を含むことも可能です)。
PEM エンコードされた証明書/キーの内容を含む文字列
秘密鍵については array($key, $passphrase) という構文を使用することも可能です。 ただし、$key は file:// または上記のテキスト表現形式を使用 して指定したキー、$passphrase はその秘密鍵に関するパスワードを 有する文字列を表します。
サイン/証明書を認証する関数をコールする際、 cainfo パラメータは、ファイルと認証済みの CA ファイルの場所を指定するファイルディレクトリ名を含む配列です。 ディレクトリが指定された場合、openssl コマンドが 使用できるような正しい形式にハッシュされたディレクトリである必要が あります。
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。
S/MIME 関数はビットフィールドを使用して指定したフラグを使用します。 このビットフィールドには、以下の値を一つ以上含むことが可能です。
表 1. PKCS7 定数
定数 | 説明 |
---|---|
PKCS7_TEXT | text/plain content type ヘッダを暗号化/署名されたメッセージに 追加します。復号化または認証を行う際には、このヘッダは出力から 取り除かれます。復号化または認証されたメッセージがMIME 型 text/plain でない場合、エラーとなります。 |
PKCS7_BINARY | 通常は、入力されたメッセージは CR および LF を行端として使用した 「正規化」された形式に変換されます。こらは、S/MIME の規格に 基づくものです。このオプションが指定された場合、変換は行われません。 この機能は、MIME 形式でないバイナリデータを処理する際に 便利です。 |
PKCS7_NOINTERN |
メッセージを認証する際に、通常、メッセージに含まれる証明書が
証明書にサインする際に検索されます。
このオプションでは、
openssl_pkcs7_verify() の
extracerts パラメータで指定した証明書
のみが使用されます。しかし、指定された証明書を信頼されていな
い CA として使用することも可能です。
|
PKCS7_NOVERIFY | サインつきメッセージをサインした証明書の署名について 検証しません。 |
PKCS7_NOCHAIN | サインを行った側の証明書の認証の連鎖を行いません。 この場合、サイン付きのメッセージにある証明書を未認証の CA として使用しません。 |
PKCS7_NOCERTS |
メッセージにサインする際、通常はサインをする人の証明書が挿入
されますが、このオプションを指定した場合はそうなりません。これに
よりサイン付きのメッセージのサイズは小さくなりますが、認証
側が(例えば、openssl_pkcs7_verify() の
extracerts を用いて渡すことにより)
サインをした人の証明書のコピーをローカルに用意する必要があります。
|
PKCS7_NOATTR | 通常、メッセージがサインされる時、サインした時間やサポートされる 対象アルゴリズムを含む一連の属性が付加されます。このオプションを 指定した場合、それらの属性は付加されません。 |
PKCS7_DETACHED |
メッセージにサインをする際、MIME型 multipart/signed を指定して
クリアテキストでサインを行います。これは、
openssl_pkcs7_sign() において
フラグを指定しなかった場合の flags
パラメータのデフォルトです。このオプションをオフにした場合、
メッセージは不透明なサインによりサインされます。これは、
メールリレイによる変換に対してより耐性がありますが、S/MIME を
サポートしないメールエージェントでは読むことはできません。
|
PKCS7_NOSIGS | メッセージにサインや認証を試みません。 |
注意: これらの定数は、4.0.6 で追加されました。
openssl_sign() および openssl_verify() のデフォルトアルゴリズムとして用いられます。
注意: これらの定数は、5.0.0 で追加されました。