Node.jsでhttpsをGETした際にError: unable to verify the first certificate at TLSSocket.onConnectSecureと怒られたときの対処法
事象
タイトルの通り,Node.jsのhttpsモジュールでGETしにいくと,Errorが発生しました. 後で気づいたのですが,wgetやcurlでも
ERROR: cannot verify certificate, issued by ‘CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US’:
みたいなエラーが出ていました.
(ブラウザでは何も問題が無かったので今まで全く気づきませんでした.)
原因
どうやら,中間ルートCA証明書が切れていることが原因らしい ←つまりサーバ側に問題あり
解決方法
サーバの証明書はLet's Encryptを使用していて,Nginxでホスティングしていましたが,どうやらそこでの設定に問題があったようです.
nginxの/etc/nginx/conf.d/ssl.conf等をこんな感じにすれば解決します.
server { listen 443 ssl; server_name example.com; # ssl_certificate /etc/letsencrypt/live/example.com/cert.pem; を下に変更 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem }
まあ,つまりはcertの指定が,中間CA証明書を連結しているfullchain.pemの方にしなければいけないというだけのことでした..