Webサーバ(Nginx)でオレオレ(自己署名)証明書

オレオレ(自己署名)証明書を利用することで、閉じたセキュアなネットワーク内で、コストを掛けず、更新の手間を省き、SSL 通信を実現できます。

images/cards/nginx.webp

目次

0. Introduction

SSL サーバー証明書は、認証局(CA)に認証してもらうことで発行されます。例えば、Let’s Encryptのように、フリーで自動化されたオープンな認証局も存在します。しかし、自分でプライベート認証局(CA)を立てて、独自の SSL サーバー証明書を発行することで、認証してしまうこともできます。

  • 対象となる読者

    • 信用ある認証局に署名してもらうコストを発生させたくない方
    • SSL 証明書の更新の手間をなくしたい方
    • 閉じたセキュアなネットワーク内で SSL 通信をしたい方
  • 本記事の価値

    • オレオレ(自己署名)証明書を利用することで、閉じたセキュアなネットワーク内で、コストを掛けず、更新の手間を省き、SSL 通信を実現できます
  • 前提

    • openssl がインストール済の Linux 環境
    • web サーバーが Nginx

1. プライベート認証局(CA)用の秘密鍵を作成する

プライベート認証局(CA)用の秘密鍵をパスワード無しで生成します。他にも、DES、DES3、AES128、 AES192、AES256 などの方式を利用することができます。パスワードを設定してしまうと、後段の nginx の再起動時にパスワードを聞かれてしまい、再起動できなくなります。

sudo openssl genrsa -out /etc/nginx/ssl/2022staging.key 2048

2. CSR(証明書発行要求ファイル、公開鍵情報)を作成する

CA の証明書を発行するための CSR(証明書発行要求ファイル、公開鍵情報が含まれる)を作成します。

sudo openssl req -new -key 2022staging.key -out 2022staging.csr

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Osaka
Locality Name (eg, city) []:Sakai-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:staging.hogehoge.net
Email Address []:

この時点で以下の 2 つのファイルが作成されています。

ls /etc/nginx/ssl
2022staging.csr  2022staging.key

3. サーバー証明書を作成する

CSR ファイルに情報を付加して秘密鍵で暗号化した証明書を作成します。また、有効期限も設定します。

sudo openssl x509 -days 36500 -req -signkey /etc/nginx/ssl/2022staging.key -in /etc/nginx/ssl/2022staging.csr -out /etc/nginx/ssl/2022staging.crt

4. Nginx の設定ファイルを変更する

設定ファイルに以下の証明書の設定を追加します。ルート設定ファイル nginx.conf 内に include を記述することで、他の設定ファイルの読み込みが可能です。設定ファイルは Apache と同様に conf.d/に格納することが多いです。

server {
    # 443番ポートを許可し、SSL機能をON
    listen 443 ssl;
    # 証明書を設定
    ssl_certificate     /etc/nginx/ssl/2022staging.crt;
    ssl_certificate_key /etc/nginx/ssl/2022staging.key;
}

5. Nginx を再起動する

sudo systemctl restart nginx

参考