Nginxをプライベート認証局やオレオレ証明書でHTTPS化

はじめに

Nginxで構築したWebサーバーのHTTPS化について紹介します。

サーバー証明書には、プライベート認証局で署名した証明書、または自己署名した証明書を使っています。コピー&ペーストで実行できます。

環境はUbuntuですが、Nginxのインストール手順 (aptの利用) を除けば、他の環境でも有効だと考えられます。

サーバー証明書の作成

HTTPS化に必要なサーバー証明書は、次のいずれかの方法で作成します。

  • プライベート認証局による証明書の作成 (オレオレ認証局)
  • 自己署名による証明書の作成 (オレオレ証明書)

方法1: プライベート認証局による証明書の作成

次の記事に従ってプライベート認証局の構築からサーバー証明書の作成と署名までを行なってください。

プライベート認証局によるサーバー証明書の発行
プライベート認証局(オレオレ認証局)を構築して、Webサーバー向けのサーバー証明書を発行する手順について紹介します。認証局の証明書をWebブラウザやOSの証明書ストアに読み込むことで、自己署名証明書を使ったサーバーに、警告なしにアクセスすることができます。

上記が完了したらscpを使って認証局から秘密鍵と署名済み証明書を、Webサーバー上で受け取ります。<user>, <ca-server>は、プライベート認証局のユーザー、サーバーアドレスで適宜置き換えてください。

scp <user>@<ca-server>:~/web-server/web-server.crt ~/web-server.crt
scp <user>@<ca-server>:~/web-server/web-server.key ~/web-server.key

方法2: 自己署名による証明書の作成 (オレオレ証明書)

opensslを使って自己署名による証明書を作成します。(oepnsslはインストール済みとします) 下記の説明は、この作業をWebサーバー上で行うものと想定しています。

まず秘密鍵 (web-server.key) と署名リクエスト (web-server.csr) を作成します。秘密鍵は暗号化せずに作成しています。暗号化していると、Nginxを起動するサービス中でPass Phraseの入力を求められ、エラーとなるためです。

cd ~
openssl genpkey -out web-server.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
openssl req -new -key web-server.key -out web-server.csr

作成中、次のような質問が表示されるので、適宜指定してください。

Country Name (2 letter code) [AU]: JP
State or Province Name (full name) [Some-State]: Tokyo
Locality Name (e.g. city) []: Chiyoda
Organization Name (eg. company) [Internet Widgits Pty Ltd]: Hoge LLC
Organiztion Unit Name (eg. section) []: Home
Common Name (e.g. server FQDN or YOUR name) []: example.com

必須項目は、Country Name, Organization Name, Common Nameです。

Common Name (CN) は、Webブラウザに入力されたアドレスと比較されます。WebサーバーがFQDN (Fully Qualified Domain Name) を持っている場合は、それを指定します。IPアドレスしか持たない場合は、IPアドレスを指定します。

ブラウザによっては、CNではなく、SAN (Subject Alt Name) を参照するため、本来はSANの指定も必要です。ただそもそも自己署名証明書として例外を承認することで、SANは無視されるので、ここではSANの指定は省略しています。

次に証明書 (web-server.crt) を生成します。

openssl x509 -in web-server.csr -out web-server.crt -req -signkey web-server.key -days 365

正しく実行されると、Signature ok と表示されます。

スポンサーリンク

Nginxのインストール

Nginxをインストールします。次の例ではUbuntuにaptを使ってインストールしています。他の環境ではそれぞれのインストール方法を確認してください。

sudo apt update
sudo apt install nginx

ブラウザで、http://<サーバーアドレス> にアクセスすると、デフォルトのページが表示されます。

NginxのHTTPS構成の設定

証明書と秘密鍵の保管

証明書と秘密鍵をディレクトリ (/etc/certificate) を作ってコピーします。

sudo mkdir /etc/certificate
sudo cp ~/web-server.crt /etc/certificate/web-server.crt
sudo cp ~/web-server.key /etc/certificate/web-server.key

Nginx SSLパラメータの定義

Nginxの構成ファイルを作成して、Redmineへの接続とHTTPSを構成します。Nginxではサイトの構成を/etc/nginx/sites-availableの下に定義します。またそのシンボリックリンクを/etc/nginx/sites-enabledの下に作成することで、その定義を有効にします。

構成ファイルを作成します。

sudo vim /etc/nginx/sites-available/ssl-conf.conf

次の内容をコピーします。SSLに関わる設定項目は多岐にわたり奥も深いので、後述の参考資料などを元に、よく使われるもののみを設定しています。

server {
        listen 443 ssl;
        server_name example.com;

        ssl_certificate /etc/certificate/web-server.crt;
        ssl_certificate_key /etc/certificate/web-server.key;
        ssl_session_tickets off;
        ssl_protocols TLSv1.3;
        ssl_prefer_server_ciphers on;
}
  • server_name (要変更)
    サーバーのFQDN (Fully Qualified Domain Name) またはIPアドレスを指定
  • ssl_certificate
    作成した証明書を指定
  • ssl_certificate_key
    作成した秘密鍵を指定
  • ssl_session_tickets
    前方秘匿性を保つためにオフに指定 (セッションキーの暗号化に使われる秘密鍵が漏洩した場合も安全とのこと)
  • ssl_protocols
    通信方式を指定
  • ssl_prefer_server_ciphers
    暗号化方式として、クライアント (ブラウザ)、サーバーのどちらを優先するかを指定 (onでサーバー側)

参考資料

Nginx本家のHTTPS構成に関する解説

Configuring HTTPS servers

SSL構成を生成してくれるツール

Mozilla SSL Configuration Generator
An easy-to-use secure configuration generator for web, database, and mail software. Simply select the software you are u...

上記のツールで生成されるSSL構成では、OCSP Staplingが有効になっています。しかし本記事のSSL構成定義では、OCSP Staplingを有効にしていません。

OCSP (Online Certificate Status Protocol)は、証明書の有効性をクライアント (Webブラウザ)から問い合わせるプロトコルです。OCSPサーバーを立てて問い合わせを処理する必要があります。Staplingは更にそのOCSPサーバーへの問い合わせをWebサーバー側で行うものです。本記事で紹介したオレオレ証明書やオレオレ認証局の場合は、OCSPサーバーを立てていないので、OCSP Staplingをサポートできません。

構成の適用

構成ファイルを有効にします。

sudo ln -s /etc/nginx/sites-available/ssl-conf.conf /etc/nginx/sites-enabled/ssl-conf.conf

Nginxを再起動します。

sudo service nginx restart

動作確認

Webブラウザで、https://<web-server> にアクセスします。

プライベート認証局で証明書を作成した場合は、アドレスバーに鍵マークが表示され、そのまま当該のページが表示されます。

自己署名証明書を作成した場合は、ブラウザに警告画面が表示されます。指示に従って警告を受け入れることで、当該のページが表示されます。

更新記録

日付内容
2024/03/29初版リリース
NginxSecurity
スポンサーリンク