[PHP-users 24531] Re: 【お願いします】クライアント認証→外部サーバーのCGIを起動の方法
rimk @ sky.sannet.ne.jp
rimk @ sky.sannet.ne.jp
2005年 2月 15日 (火) 13:31:54 JST
田中です。
#ちょうど似たようなシステムを構築中でしたので・・。
> 先方の会社から、PKCS12形式のクライアント証明書と認証パスワード等は
> 提供していただいております。
認証パスワードについては、HTTPのBASIC認証ということならば、マニュアル
をご覧ください。
次にクライアント証明書ですが、野中様も言われておりますが、PKCS12形式の
ファイルをPEM形式にする必要があります。下記の例ではclient.pfxがPKCS12形
式のファイルです。
1.PKCS12からクライアント証明書と秘密鍵を一つのPEMにまとめる
下記コマンドで client.pem というファイルができます。
# openssl pkcs12 -in client.pfx -nodes -clcerts -out client.pem
2.CAの証明書を一つのPEMにまとめる
下記コマンドで ca.pem というファイルができます。
PKCS12にCA証明書が入っていなければ生成する必要はないと思います。
# openssl pkcs12 -in client.pfx -nodes -cacerts -nokeys -out ca.pem
3.client.pem ca.pem の余分なヘッダを取り除く
"Bag Attributes: hoge〜"といった余分なヘッダを削除します。
"-----BEGIN hoge-----" から "-----END hoge-----" までの部分だけを
抽出します。
※下記コードが動作すればこの作業は特に必要ないと思います。
実は、1,2を別々で動かした実績しかないのですが、おそらく下記のコードで
ソケットをオープンできるかと思います。(できなかったらごめんなさい)
$host = "sample.com";
$port = 443;
$context = stream_context_create();
stream_context_set_option($context, 'ssl', 'local_cert', './client.pem'); // 1
stream_context_set_option($context, 'ssl', 'cafile', './ca.pem'); // 2
$fp = fsockopen("ssl://{$host}", $port, $errno, $errstr, 5, $context);
詳しくは http://www.php.net/manual/ja/transports.php をご覧ください。
--
rimk @ sky.sannet.ne.jp
PHP-users メーリングリストの案内