Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

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つの証明書を確認してみると違ってました。。。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ファイルを指定する、といった感じになるんでしょうかね。


間違っていれば、指摘をお願いします;-)