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