[PHP-users 24532] Re: 【お願いします】クライアント認証→外部サーバーのCGIを起動の方法
nonaka
nonaka @ vi.ath.cx
2005年 2月 15日 (火) 15:34:07 JST
野中です。
言い忘れました。
証明書ファイルと秘密鍵のファイルは結合してください。
念のためにサンプルを・・・。
[hogeget.php]
=====================================================================
<?
$ch = curl_init("https://hoge.com");
curl_setopt($ch, CURLOPT_SSLCERT ,"client.pem");
curl_exec($ch);
?>
=====================================================================
[client.pem]
=====================================================================
-----BEGIN CERTIFICATE-----
MIID2zCCA0SgAwIBAgIBEjANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJKUDEO
MAwGA1UECBMFVG9reW8xEjAQBgNVBAcTCVNoaW5qeXVrdTEYMBYGA1UEChMPUGVu
・
・
・
AfPGp893z13iAQ14GUd5XIpP2rAJiEOL92XsdlGtpUn8uegG/jg2YGNaI5wWwcb+
uo17EsOBr8wgx9JtnE/CVZbLiOR54Im9PXJxEmLGDw==
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC3TFRJpH2X+cYNwg0djOSFbQiVzZsFxMtCKd+z8QJU/2qDJauT
9akz7waTaghY3blGWeNMiPlg8BjXEE9MrECWt6O/hL5NtQA3UdSwRc+t3edcVop1
・
・
・
1xSH84MVe+U+TCq4lwJBAMfJK74wRsPpggBnBxJK+tA9VWP4Lh2nLWdCORGkXMAa
fruL/G3kOHfjdD9rv39uEWbuV49GdWVvYgoZWmu/Z3c=
-----END RSA PRIVATE KEY--------
=====================================================================
わかりづらい仕様ですよね ^^;
ちなみに、CURLは以前にHTMLのリンクを辿るプログラムで利用しましたが、特定
のURLに対して動作しない場合があります。(バグ?)
田中さんの方法をお勧めします。
※但し、HTTPプロトコルは自分で実装することになるかと・・・。
以上
> 田中です。
>
> #ちょうど似たようなシステムを構築中でしたので・・。
>
> > 先方の会社から、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 mailing list PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
-
PHP-users メーリングリストの案内