自前のcouchdbサーバとのSSL通信ができなくなった

内容

自前のcouchdbサーバ利用時にSSL通信ができなくなってしまいました。

以前、「自前のcouchdbサーバの利用ができない」という同様の件を報告した際、サポートいただいて利用できるようになりましたが、その後、Syncが過去のある時点で止まっていました。

しばらく1台の端末のみで使っていたため、正確にいつから同期されなくなったのかは不明です。

パケットキャプチャにより確認したところ、SSLハンドシェイクの途中で、inkdropアプリ側から切断しているらしい(FINを送っている)ことが分かりました。
1ヶ月ほど前に、当該サーバで利用しているSSL証明書を更新しているのですが、そのあたりが影響しているのかも知れません。
なお、本サーバはウェブブラウザやcurlでは正常にアクセスできる環境であり、何故inkdropだけがアクセスできないのかは分かりません。

inkdropアプリが何故ハンドシェイクを中止しているのか、原因が分かる方法があれば直接の原因を調べられるのですが、そういったことは可能ですか?

サーバ環境

  • CouchDB 2.1.0
  • nginx 1.12.1
  • SSL復号化はnginxにて行っており、CouchDBは関与していません
  • 証明書は自己署名ではなく、購入したものです(RapidSSL)

状況

  • nginxのアクセスログには何も出力されていない
  • couchdbのログには何も出力されていない
  • HTTPSではなくHTTPを同期URLに指定すると同期できる
  • indropアプリが動作しているMacから、curlでHTTPSのURLにアクセスすると、正常な応答が返り、nginx/couchdbのログが出力される
  • inkdropアプリからサーバへの通信は試みられている(パケットキャプチャにより確認)
    • SSLのハンドシェイクの途中で、inkdropアプリ側から切断している(FINを送っている)

こんにちは。それは奇妙ですね。
Inkdrop側で通信方法を変えたりはしていませんので、証明書かその設定の問題である可能性が高いと推測します。Inkdropのデータベースは先日お伝えしたnginxの設定で変わらず運用しています。証明書はLet’s Encryptです。
クライアントの環境はmacOSでしょうか?
であれば、バイナリ Inkdrop.app/Contents/MacOS/Inkdrop を直接ターミナルから実行してみてください。
何かエラーログが出るかもしれません。

InkdropはElectron製で、Electronのメインプロセスはnode.js (v7.9.0)です。
なので、node.jsで問題を再現出来れば、原因を詳しく調べることができると思います。
CouchDBクライアントモジュールのPouchDBは、通信モジュールに request を使っています。
以下のコードをnode 7.9.0で実行してエラーにならないか確認してみてください。

var request = require('request');
request('サーバのURL', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', body); // Print the HTML for the Google homepage.
});

詳細な情報、ありがとうございます!

node 7.9.0 の環境で、request を使ったテストを実行してみました。

UNABLE_TO_VERIFY_LEAF_SIGNATURE
でエラーになりました。

やはり証明書チェインの解決ができていないようですね。

KeychainにRoot CAと中間CAの証明書を明示的に登録してもダメなようです。
いただいたテストコードで通る方法を探すか、証明書を他のものにするかを検討しますね。

本件は一旦クローズとしていただければと思います。
有り難うございました。

ちなみに、とりあえずは
NODE_TLS_REJECT_UNAUTHORIZED=0
がexportされている状態で
Inkdrop.app/Contents/MacOS/Inkdrop
を実行してSSL通信するようにしました(HTTPで同期するよりはセキュアなので)。

おお、原因が判明して良かったです。
解決を祈っております。
では一旦クローズします。