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