[NestJS] node-redis TLS 対応サンプルコード

Tadashi Shigeoka ·  Tue, April 6, 2021

NestJS で node-redis TLS 対応したサンプルコードをご紹介します。

NestJS

背景 node-redis で TLS 対応するには?

今回は node-redis を利用して TLS 対応する方法を調べて、サンプルコードまで書きました。

前提知識 Redis TLS サポート

Redis version 6 から SSL/TLS サポートが始まったようです。

TLS Support

SSL/TLS is supported by Redis starting with version 6 as an optional feature that needs to be enabled at compile time.

引用元: TLS Support – Redis

node-redis TLS オプション

Property: tls

Default: null

Description: An object containing options to pass to tls.connect to set up a TLS connection to Redis (if, for example, it is set up to be accessible via a tunnel).

引用元: redis.createClient() - NodeRedis/node-redis at v3.1.0

事前準備 ローカル環境用 SSL/TLS サーバ証明書の発行

localhost-key.pem, localhost.pem などの ローカル環境用 SSL/TLS サーバ証明書は mkcert で発行しました。

サンプルコード redis.createClient() tls オプション指定

NestJS で redis.createClient() に tls オプションを指定して実行したサンプルコードは以下のとおりです。

import { createClient, RedisClient } from 'redis';

let redisClinet;
if (process.env.REDIS_TLS_URL) {
  redisClinet = createClient(process.env.REDIS_TLS_URL, {
    tls: {
      requestCert: true,
      rejectUnauthorized: false,
      cert: fs.readFileSync('/your_path/localhost.pem', 'utf8'),
      key: fs.readFileSync('/your_path/localhost-key.pem', 'utf8'),
    },
  });
} else {
  redisClinet = createClient({
    host: process.env.REDIS_HOST,
    port: parseInt(process.env.REDIS_PORT || '')
  });
}

以上、NestJS で node-redis TLS 対応のサンプルコードを書いてみた、現場からお送りしました。