node v0.8時代のアプリをv4.2で起動したら、Hostname/IP doesn't match certificate's altnames
というエラーが出て動作しなかった。
HTTPSリクエストで、リクエストホスト名とサーバ証明書に記されたドメインが一致しないというエラーメッセージ。node v0.12からサーバ証明書の検証が厳格になり、テスト環境でオレオレ証明書を使っていたのが原因。正しい証明書ならば発生しない。
rejectUnauthorized: falseというオプション付きでリクエストすると回避できる。当然だが、本番でこんなオプションが必要な環境はやばい。正しい証明書を使わなくてはならない。
var https = require('https'); var req = https.request({ host: 'api.example.com', port: 443, path: '/', method: 'GET', rejectUnauthorized: false // セキュリティ上の危険あり! }, (res) => { console.log('status:', res.statusCode); }); req.on('error', (e) => { console.error(e); }); req.end();