Tag Archives: Oauth

研究の都合で、とある自動翻訳システムを使わせていただいています。

Microsoft TranslatorのAPIはライブラリを少しいじってうまくいったのですが、今回は認証関係で色々コケたので、メモ。

実装にはPHPを使っており、OAuth認証が必要だったので、oauth-phpというライブラリを使い、以下のコードで実行しました 1

すると、以下のエラーが出てしまいました・・・

CURL error: Peer certificate cannot be authenticated with known CA
certificates

SSL認証で何か問題ありそうだったので、とりあえずコマンドラインでcURLを使い、直接APIのURLを叩いてみると、

curl: (60) Peer certificate cannot be authenticated with known CA certificates
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a “bundle”
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn’t adequate, you can specify an alternate file
using the –cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you’d like to turn off curl’s verification of the certificate, use
the -k (or –insecure) option.

と出たので、–insecureでCA証明書を回避して、もう一度試すと、どうやらアクセス自体はできました(ただ、API keyも何も送っていないので、エラーにはなりますが) 2

で、PHPに戻って、CA証明書を回避する方法を調べると、どうやら以下のコードでいけそうだと分かりました。

このコードを、「適当」に最初のphpコードに入れて実行したところ・・・やっぱりうまくいきません。。そこで、システム提供者の方に問い合わせたところ、上記のコードをライブラリの「OAuthRequester.php」の413行目 3に入れるよう教えてもらいました。

すると・・・うまく翻訳結果を取得できました。やっぱり「適当」だと、ボロが出ますね。教えていただいた方々に感謝です。

 

Notes:

  1. このコードは自動翻訳システム側で参考として提示されていたものを少し修正しています(あと、実際はconsumer keyとか各種APIの情報を入れています)。ベースは、ライブラリで提供されているTwo-legged OAuthのサンプルコードみたいです。ちなみに、そもそもTwo-legged OAuthが何なのかあんまり分かっていませんが・・・
  2. なお、当たり前ですがセキュリティ的にはSSL認証を回避するのは望ましくありません。ここでやっているのは「とりあえず」の対処法です。
  3. つまり、curl_raw()内、curl_exec()を実行する前
Top