[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 メーリングリストの案内

AltStyle によって変換されたページ (->オリジナル) /