EvernoteAPIを利用するアプリケーションはEvernoteサーバーと通信しますが、接続エラーが発生する事があります。本日は「EvernoteSDK(PHP)の「Error obtaining temporary credentials: making the request failed (SSL connect error)」エラーが、どうしても解決しない場合に一番最後に確認したいこと」についてです。
こんにちは。猫ITソリューションズ広報の齊藤メイ(♀)です。 本日は、「EvernoteSDK(PHP)の「Error obtaining temporary credentials: making the request failed (SSL connect error)」エラーが、どうしても解決しない場合に一番最後に確認したいこと」についてです。
この記事に書くエラー原因は、可能性としてはありえます。しかし、今現在このエラー「原因は」、おそらくありえないと思います。そういうこともあり「一番最後に」とタイトルにつけさせていただきました。備忘録的に綴るにすぎませんのでご了承ください。
エラー概要
エラー内容は、「EvernoteサーバーへのOAuthによるSSL接続エラー」です。対象は、以下環境で稼働させているEvernoteアプリケーション(PHP)です。
- サーバーOS:CentOS 5.6以上
- openssl:0.9.8f以上
- EvernoteSDK(PHP) :1.22以下
このような「接続エラー」の原因は、大抵Webアプリケーションの作りの問題ですが、ごくまれにEvernoteサーバーの不具合(=メンテナンス中など)という場合もあります。ですので、まずは
- Webアプリケーションの不具合
- Evernoteサーバー稼働状況
を確認をしてから本記事を参照してください。
エラー対処方法
Webサーバーのopensslのバージョンを0.9.8eに下げる事で、エラーが解消されます。
あくまで上記環境のようにEvernoteSDKのバージョンが古い、または後述のようにアプリケーションによるSSLプロトコルバージョン差異の吸収が出来ない場合の対処です。
そしてしつこいようですが、今から新たにEvernoteSDK(PHP)を使いWebアプリケーションを作ろうという方が、こんなエラーに遭遇するとは思えません。
エラー原因
エラーは、EvernoteSDK(PHP)と、Webアプリケーションが稼働するサーバーと、Evernoteサーバーの、それぞれで利用するSSLプロトコルバージョンが異なった場合に発生すると思われます。
先に書いておきますが、
Webアプリケーション側でOAuth::disableSSLChecksを使うことにより、SSLプロトコルバージョン違いに関係なく稼働させることが「本来は」可能です。これで問題ないはずなのです。
PHP OAuth SSL problem - Evernote for Developers - Evernote User Forum
ですが、どうやっても上記が効かない・出来ない場合には、根本的な「SSLプロトコルバージョンを揃える」という対策を取るしかなくなる訳です。
以下は、EvernoteサーバーのSSLプロトコルバージョンを確認した結果です。
1 2 3 4 5 6 7 8 9 10 |
$ gnutls-cli-debug www.evernote.com -p 443 Resolving 'www.evernote.com'... Connecting to '204.154.94.81:443'... Checking for SSL 3.0 support... yes Checking whether %COMPAT is required... yes (略) Checking for TLS 1.0 support... yes Checking for TLS 1.1 support... no Checking fallback from TLS 1.1 to... failed Checking for TLS 1.2 support... no |
EvernoteサーバーはTLS1.1/1.2には未対応、ということがわかります。
Upgrade to OpenSSL 1.0.1 in CentOS | Axivo Community
>
> OpenSSL v1.0.x now support TLS v1.1/1.2 and WINE also support it automaticaly.
openssl1.0.x系は、TLS1.1/1.2をサポートしていることがわかります。
- TLS1.0/SSL3.0接続をサポートしたopenssl1.x.x系
- TLS1.0をサポートしたOpenSSL 0.9.8e
を使うしかないという事になります。
補足
しかし、上記の結論を施策として行うべきではありません。セキュリティを無視することになるからです。
TLS1.1/1.2と後続バージョンが出ている以上、TLS1.0は安全ではありません。本来は最新のopensslを使うべきなのです。
Transport Layer Security - Wikipedia
Provide OpenSSL 1.0.1c or Higher as cPanel RPM, to allow TLS 1.1, TLS 1.2 | cPanel Feature Requests
当然そうなると、上記で書いた「TLS1.0/SSL3.0接続をサポートしたopenssl1.x.x系」が今後リリースされることはないだろう、と予想できます。
しかし、Webアプリケーション側が最新のopensslを使おうとも、EvernoteサーバーがTLS1.1/1.2に未対応という事実があります。既にこの件はEvernoteForum上で要望として?挙がっており、Evernote中の人も認識していましたので、今しばらく待ってみましょう。
・・・要望から結構時間が経っていますね、、、