1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AlmaLinux環境のNestJSでhttps

Last updated at Posted at 2024-05-30

NestJSで自己署名証明書を使用したhttpsサーバを起動します。(同時にhttpサーバも立ち上げます。)

  • 自己署名証明書の作成から行います
  • 秘密鍵と証明書はWindowsにて、mkcertで作成したものをAlmaLinuxにコピーします

環境

AlmaLinux 8.8
NestJS 10.3.2
npm 10.8.0
Window 10

自己署名証明書の作成

AlmaLinux(RHEL/CentOS)で自己署名証明書を作成するにはOpenSSLを使用して作成するのが一般的なようですが、Windows 10にmkcertをインストールして、mkcertで作った証明書をAlmaLinuxへコピーすることにしました。

1.Windows 10 に Chocolatery をインストール

まず mkcert をインストールするためのパッケージマネージャ Chocolatery をインストールします。

  1. Windows PowerShell (管理者)を起動
  2. https://chocolatey.org/install にアクセス
  3. 「Install Chocolatey for Individual Use:」の「Install with powershell.exe」の「Now run the following command:」の下にあるテキストボックスの右端をクリック(テキストボックスの内容がコピーされる)
    ちなみにこれを書いている時点の内容は下記。
    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
    
    ※管理者で実行しないと失敗する。もし通常で実行してしまった場合は作成されてしまったC:\ProgramData\chocolateyを削除してから、管理者で再実行する。
  4. Windows PowerShell に貼り付けて実行
  5. インストールできたかどうかを下記を実行して確認(もしかしたらPowerShellを起動し直す必要があるかも)
    > choco list
    Chocolatey v2.2.2
    chocolatey 2.2.2
    1 packages installed.
    

Windows 10 に mkcert をインストール

  1. Windows PowerShell (管理者)を起動
  2. mkcert をインストール
    > choco install mkcert
    
  3. トラストストアにローカル認証局(CA)をインストール
    > mkcert -install
    

Windows 10 で自己署名証明書を作成

下記を実行してlocalhostの証明書を発行(localhost以外の場合は環境に応じてドメイン名や固定IPアドレスを指定)

  • 秘密鍵ファイル: key.pem
  • 証明書ファイル: cert.pem
> cd {適当なフォルダに移動}
> mkcert -key-file key.pem -cert-file cert.pem localhost

出来上がったkey.pem、cert.pemをAlmaLinux環境へコピー

2. NestJSでhttpsサーバを起動 (同時にhttpサーバも起動)

main.tsに以下のように記述

main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ExpressAdapter } from '@nestjs/platform-express';
import * as express from 'express';
import * as fs from 'fs';
import * as http from 'http';
import * as https from 'https';

async function bootstrap() {
  const privateKey = fs.readFileSync('{ファイルを置いたパス}/key.pem', 'utf8');
  const certificate = fs.readFileSync('{ファイルを置いたパス}/cert.pem', 'utf8');
  const httpsOptions = { key: privateKey, cert: certificate };

  const server = express();
  const app = await NestFactory.create(AppModule, new ExpressAdapter(server));
  await app.init();

  http.createServer(server).listen(3000);
  https.createServer(httpsOptions, server).listen(443);
}
bootstrap();

sudoでNestJSを開始 (通常通り開始すると443ポートのバインドで失敗する)

$ sudo npm start

root権限で実行するのでNestJSプロジェクト内のdistフォルダ以下のパーミッションが全てrootになってしまいますのでご注意下さい。(次にユーザ権限で実行するときにエラーとなります。その場合は一旦distフォルダを消して下さい。)

確認方法

ブラウザからhttpsでアクセス

参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?