Node.jsでhttps通信をするときに中間証明書を指定する方法

はじめに

本記事は、Qiitaに投稿した記事を移行したものです。

Node.js+expressで作ったアプリケーションをhttps化したときにスマホだけでエラーが出たのでその対処法をメモしておきます。

環境

$ uname -a
Linux tk2-227-23187 3.13.0-98-generic #145-Ubuntu SMP Sat Oct 8 20:13:07 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ node -v
v4.4.5

SSL証明書はLet's Encryptで取得しました。

エラーの内容

「この接続ではプライバシーが保護されません」という内容のエラーがスマホ(Android4.2.2 Chrome 54.0.2840.85)で出ました。
Windows(Windows 8.1 Chrome 54.0.2840.99)ではエラーが出ませんでした。

原因

中間証明書を指定していないのが原因と考えられます。

対処

中間証明書を指定するようにしました。

//before
var options = {  
	key: fs.readFileSync('privkey.pem'),
	cert: fs.readFileSync('cert.pem')
};
//after
var options = {  
	key: fs.readFileSync('privkey.pem'),
	cert: fs.readFileSync('cert.pem'),
	ca: fs.readFileSync('chain.pem')
};