このモジュールは、署名の生成および認証、そして、データのシール (暗号化)およびオープン(復号化)を行うために、 OpenSSL の関数を使用します。 OpenSSL は多くの機能を提供しますが、これらはまだこのモジュールでは サポートされていません。これらのいくつかは将来的に追加される可能 性があります。
OpenSSL関数を使用するためには、OpenSSL パッケージがインストールされ ていることを要します。 このモジュールでは、PHP 4.0.4pl1 は、OpenSSL >= 0.9.6 を必要としま すが、PHP-4.0.5以降では、OpenSSL >= 0.9.5 でも動作します。
PHPのOpenSSLサポートを使用するには、--with-openssl[=DIR]を指定してPHPをコンパ イルする必要があります。
Win32ユーザへの注意 このモジュールをWindows環境で使用するには、PHP/Win32バイナリパッケー ジのDLLフォルダからlibeay32.dllを使用する WindowsマシンのSYSTEM32フォルダ(例: C:\WINNT\SYSTEM32または C:\WINDOWS\SYSTEM32)にコピーする必要があります。
加えてキー生成およびサイン認証関数を使用する計画がある場合、 システムに有効なopenssl.cnfをインストールする 必要があります。PHP 4.3.0以降、Win32バイナリ配布版に opensslのサンプル設定ファイルが含まれています。 PHP 4.2.0以前を使用する場合やこのファイルがない場合、 OpenSSLのホームページから入手す るか、PHP 4.3.0のリリース版をダウンロードし、それらに含まれる設定ファ イルを使用することができます。
Win32ユーザへの注意 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 関数はビットフィールドを使用して指定したフラグを使用します。 このビットフィールドには、以下の値を一つ以上含むことが可能です。
表 1PKCS7 CONSTANTS
定数 | 説明 |
---|---|
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 で追加されました。