LXXIIOpenSSL 関数

導入

このモジュールは、署名の生成および認証、そして、データのシール (暗号化)およびオープン(復号化)を行うために、 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 関数のどれかによ り返されたキーまたは証明書リソースを使用する必要がありました。こ れより後のバージョンでは、次の方法のどれかを使用することが可能と なる予定です。

  • 証明書

    1. openssl_x509_read()から返された X.509リ ソース

    2. file://path/to/cert.pem 形式の文字列。 このファイルは、PEMエンコードの証明書である必要があります。

    3. PEMエンコードされた証明書の内容を含む文字列。

  • 公開/秘密キー

    1. openssl_get_publickey() または openssl_get_privatekey() から返されたキー リソース

    2. 公開キーのみ: X.509リソース

    3. file://path/to/file.pem フォーマットを 有する文字列。このファイルには、PEMエンコードされた証明書/ 秘密キーが含まれている必要があります。(両方を含むことも可能 です。)

    4. PEMエンコードされた証明書/キーの内容を含む文字列

    5. 秘密キーについては、array($key, $passphrase) という構文を使用することも可能です。 ただし、$key は、file:// または上記のテキスト表現形式を使用 して指定したキー、$passphrase はその秘密キーに関するパスワー ドを有する文字列を表します。

証明書の認証

サイン/証明書を認証する関数をコールする際、 cainfo パラメータは、ファイルと認証済みのCA ファイルの場所を指定するファイルディレクトリ名を含む配列です。 ディレクトリが指定された場合、opensslコマンド が使用できるような正しい形式にハッシュされたディレクトリである必 要があります。

定義済みの定数

これらの定数は、この拡張モジュールで定義されており、 この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー ドされるかのどちらかの場合のみ使用可能です。

X509_PURPOSE_SSL_CLIENT (integer)

X509_PURPOSE_SSL_SERVER (integer)

X509_PURPOSE_NS_SSL_SERVER (integer)

X509_PURPOSE_SMIME_SIGN (integer)

X509_PURPOSE_SMIME_ENCRYPT (integer)

X509_PURPOSE_CRL_SIGN (integer)

X509_PURPOSE_ANY (integer)

OPENSSL_PKCS1_PADDING (integer)

OPENSSL_SSLV23_PADDING (integer)

OPENSSL_NO_PADDING (integer)

OPENSSL_PKCS1_OAEP_PADDING (integer)

OPENSSL_KEYTYPE_RSA (integer)

OPENSSL_KEYTYPE_DSA (integer)

OPENSSL_KEYTYPE_DH (integer)

PKCS7フラグ/定数

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 で追加されました。

目次
openssl_csr_export_to_file -- CSRをファイルまたは変数にエキスポートする
openssl_csr_export -- CSRをファイルまたは変数にエキスポートする
openssl_csr_new -- 秘密キーとCSRを生成する
openssl_csr_sign -- 他のCERTで証明書をサインする
openssl_error_string -- OpenSSL エラーメッセージを返す
openssl_free_key -- キーリソースを開放する
openssl_get_privatekey -- PEMフォーマットされた秘密キーを使用可能とする
openssl_get_publickey --  証明書(certificate)から公開キーを展開し、使用可能とする
openssl_open -- シール(暗号化)されたデータをオープン(復号)する
openssl_pkcs7_decrypt -- S/MIME 暗号化されたメッセージを復号化する
openssl_pkcs7_encrypt -- S/MIME メッセージを暗号化する
openssl_pkcs7_sign -- S/MIME メッセージにサインする
openssl_pkcs7_verify -- S/MIMEサインされたメッセージのサインを確認する
openssl_pkey_export_to_file --  キーのエキスポート可能な表現をファイルに取得する
openssl_pkey_export --  あるキーのエクスポート可能な表現を文字列またはファイルに取得する
openssl_pkey_get_private -- Get a private key
openssl_pkey_get_public -- Extract public key from certificate and prepare it for use
openssl_pkey_new -- 新規に秘密キーを生成する
openssl_private_decrypt -- 秘密キーでデータを復号化する
openssl_private_encrypt -- 秘密キーでデータを暗号化する
openssl_public_decrypt -- 公開キーでデータを復号化する
openssl_public_encrypt -- 公開キーでデータを暗号化する
openssl_seal -- データをシール(暗号化)する
openssl_sign -- 署名を生成する
openssl_verify -- 署名を認証する
openssl_x509_check_private_key -- 秘密キーがあるCERTに対応するかを確認する
openssl_x509_checkpurpose --  証明書が特定の目的に使用可能かどうか確認します。
openssl_x509_export_to_file -- CERTをファイルまたは変数にエキスポートする
openssl_x509_export -- CERTをファイルまたは変数をエキスポートする
openssl_x509_free -- 証明書リソースを開放する
openssl_x509_parse --  Parse an X509 証明書をパースし、配列として情報を返す
openssl_x509_read --  Parse an X.509 証明書をパースし、リソースIDを返す