PHP: OpenSSL 関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<openal_streamopenssl_csr_export_to_file>
view the version of this page
Last updated: Tue, 21 Dec 2004

LXXXII. 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以前を使用する場合やこのファイルがない場合、 から入手す るか、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 関数はビットフィールドを使用して指定したフラグを使用します。 このビットフィールドには、以下の値を一つ以上含むことが可能です。

表 1. PKCS7 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を返す


add a note add a note User Contributed Notes
OpenSSL 関数
gm at df dot ru
14-Jan-2005 05:15
There is no way to build PHP 4.3.10 with OpenSSL 0.9.6 using "--with-openssl" option. It seems like PHP 4.3.10 can be built  only with OpenSSL 0.9.7. :( Unfortunately, PHP's configure script doesn't reflect this and I've spent a lot of time discovering it.

I hope that it helps.

---
Dmitry D. Khlebnikov
skippy zuavra net
20-Oct-2004 12:38
In case you're wondering what's a "correctly hashed" directory for the use with cainfo: it's simply a directory which contains CA public certificates in PEM/X.509 format. You can get such certificates either from the CA's website (they advertise it in visible places) or from your browser. In Explorer for instance you can click on the little yellow padlock, go to the CA entry and export it.

The only trick with the directory is that file names must be in the form "hash.#". The "hash" part is the 8-digit hex hash of the certificate, while the # part is a number which serves to differentiate certificates which give the same hash (yes, it can happen with certificates coming from the same CA). Usually # is 0, but you also can use 1, 2 and so on when having more certs with the same hash.

In order to obtain the hash of a certificate you can use the openssl command line utility like this:

openssl x509 -hash -in certfile.cer | head -1
jaz at ensn dot net
16-Sep-2004 06:18
For newbies (as me):
If you want to try at home on win32, you can learn how to install apache+ssl on this url:

Versions on English, Spanish and French.

Just I have read and install and run perfectly.
php ~at~ NOSPAM wwwcrm.com
12-Feb-2004 08:27
I spent some time fiddling with these functions for simple public key encryption jobs.

I wrote the following class which may be useful to others, it encapsulates much of the example code written by contributors to this section:



I hope it is useful to you.

----------------------------------
WIN 98, PHP 4.3.4, OpenSSL 0.9.7b
----------------------------------

Regards,
Alex Poole
norman at rasmussen dot org
02-Feb-2004 06:43
Debian maintainers have disabled the openssl support because it seems to help break apache on startup.  ( and )

- Norman
Maciej_Niemir at ilim dot poznan dot pl
17-Oct-2003 02:49
If you use OpenSSL in WIN32 you must copy libeay32.dll AND SSLEAY32.DLL to the SYSTEM32 folder of your windows machine.
jonbaer at jonbaer dot net
28-Jul-2003 07:24
Kept getting error warnings with Apache Monitor claiming that php_openssl.dll could not load correctly ... seems that in Apache2 (on Win32) to get OpenSSL to work correctly, copy all the .dll files located in $PHP_HOME/dlls to $APACHE_HOME/bin ... specifically the ssleay32.dll and libeay32.dll. 

- Jon

<openal_streamopenssl_csr_export_to_file>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page