mixiIDとcurl_setoptのCURLOPT_CAINFO
via. mixi OpenIDのサンプルコードをPHP OpenID Libraryを使って動かしてみた(訂正) - 大阪で働くソーシャルゲームエンジニア ダイアリー
先日のGINZA TECH LOUNGE feat. OpenIDの前にPHP OpenID Libraryを使って
- myopenid.com
- mixi.jp
をOPとして試していたわけですが、mixi.jpを使った場合、CA証明書のエラーが出たので、/usr/share/ssl/certs/ca-bundle.crt(CentOS4.6)にmixi OpenIDのサンプルコードをPHP OpenID Libraryを使って動かしてみた(訂正) - 大阪で働くソーシャルゲームエンジニア ダイアリーにある手順でCA証明書を追加することで、とりあえず事なきを得てました。
一方、curl_setopt関数を使ってもいけるはずなのですが、mixi OpenIDのサンプルコードをPHP OpenID Libraryを使って動かしてみた(訂正) - 大阪で働くソーシャルゲームエンジニア ダイアリーとかphp-openid で mixi のコミュニティ認証を使う - まちゅダイアリー(2008-09-18)にあるAddTrustの証明書*だけ*じゃダメでした。
「何でかなー」と思っていたんですが、=katsu/(+blog): 誰でも分かるOpenID入門~第3回「OpenIDの基本認証フロー」にある「OpenID Authentication 2.0 基本認証フロー」の図を見ながら考えると、
- (2)OP発見でのアクセス先ドメインは、https://mixi.jp
- (10)結果の直接検証要求でのアクセス先ドメインは、https://id.mixi.jp
のハズで、実際に2つの証明書を確認してみると違ってました。。。mixi.jp側はAddTrust External CA Root、
id.mixi.jp側はGTE CyberTrust Global Root
ということは、
- AddTrustExternalCARoot
- GTECyberTrustGlobalRoot
の両方の証明書をCURLOPT_CAINFOに指定しなければダメっつーことですね。
ということで、ca-bundle.crtから追加したAddTrustの証明書を削除し、
$ ls *.pem AddTrustExternalCARoot.pem GTECyberTrustGlobalRoot.pem $ cat *.pem > test.pem $
として、mixi OpenIDのサンプルコードをPHP OpenID Libraryを使って動かしてみた(訂正) - 大阪で働くソーシャルゲームエンジニア ダイアリーに書かれているとおり、Auth/Yadis/ParanoidHTTPFetcher.phpの2カ所に
<?php : if ($this->isHTTPS($url)) { curl_setopt($c, CURLOPT_CAINFO, '/path/to/test.pem'); } :
とするとIDも検証され、ニックネームも返ってきました。
実際にはca-bundle.crtに追記しちゃった方が早そうですが、ダメな場合はca-bundle.crtをコピーしてCA証明書を追加し、curl_setoptでpemファイルを指定する、といった感じになるんでしょうかね。
間違っていれば、指摘をお願いします;-)