[PHP-users 33493] Re: 証明書つきのhttpsのソケット通信

Michiyoshi Buniu buniu @ dream-link.jp
2008年 4月 26日 (土) 09:28:24 JST


豊丹生です。

回答ありがとうございます。

私の説明が悪くて、すみません。

困っているのは、証明書ではなく、SSLクライアント認証の部分です。

通常の証明書付きのSSL通信はfsockopenで問題なくできている状態です。

fsockopenの第6引数は定義はされてないので、
私も気にはなっていたのですが、
何らかの形で、引数を渡さなければ、
認証のしようがないかと思い、
過去のスレッドを参考に入れてみました。

また、いきなり本番環境での実装をやろうとしているわけではなく、
PHPでHTTPでのソケット通信→PHPでHTTPSでのソケット通信までは、
テスト環境で問題なくできることを確認した上で、
本番環境でクライアント認証を実装しようとしています。
(fsockopenを実行しているサーバー自体が
ローカルにあるわけではないので、
ブラウザによる通信はテストできないのですが)

もちろん、クライアント認証についても
手元で検証できる環境を準備したほうが良いのでしょうが、
予算の都合もあり、そこまでは準備できないので。

ここ数日こればっかりやっているのですが、
どうにもこうにもならなくて困っております。

以上、よろしくお願いします。

----- Original Message ----- 

> こんばんは。
>
> SSLのクライアント側実装はやったことがないのであまり突っ込んだことはいえないのですが。
> ソケット通信もやってないし。
>
>> $fp = fsockopen($purl['host'], (isset($purl['port']) ? $purl['port'] : 
>> 80),
>> $errno, $errstr, 30, $context);
>
> これって、
> $fp=fsockopen("先方サーバIPアドレス", 14100, $errno, $errstr, 30, 
> $context);
> ってなるようですが、
> http://jp.php.net/manual/ja/function.fsockopen.php
> をみるに第6引数は定義されていないし、動くにしてもただのTCP通信しかしてない
> んじゃないですか?
> http://www.php.net/manual/ja/transports.php
> http://jp.php.net/manual/ja/stream.examples.php
> とかでSSL/TLSの際の記述の仕方やSSL通信の例なんかもありますけれど、
> こういうところは見ているんでしょうか?
>
> 参考にしたという記事はクライアント認証の例であって、参考にはなるかもしれない 
> 
> けれど実装例が同じになるとは思えません。
> とりあえずそれっぽいのが検索して引っかかったからコードをコピペして試してみて、 
> 
> 動かなかったからすぐお手上げ状態になっているように見えるんですが。。
> SSLに証明書がついているのは当たり前なので、クライアント認証の話をしている
> ってことなんでしょうか?
>
> PHPでSSL通信のUA側実装を行う場合に、証明書の確認や暗号の交換、SSL
> セッションの確立あたりをどう実装するのかよく分かりませんが、ちょっと調査が
> 不足しすぎているような気もします。
>
>
> 私も具体的なやりかたを知っている訳ではないですし、TLSの理解はSSLV3の
> 上位版程度の認識ですが、同様の実装を行うなら、いきなり本番環境のサーバに
> 接続しながらではなんてことはやりません。
>
> SSL通信のできるサーバを構築して、サーバ-クライアントの環境を作ってからまず
> HTTPでのソケット通信を成功させ、次にブラウザでのSSL通信を行い、最後に
> PHPでのSSL/TLSソケット通信を行うと思います。
> クライアント認証を行うとなればさらにこのあとでしょうか。



PHP-users メーリングリストの案内