Hostname/IP doesn't match certificate's altnames

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();