CentOS7 NginxでSSL証明書の設定(SNI含む)

スポンサーリンク

このご時世、Webサイトはhttpよりもhttps対応のほうが多くなってきております。Nginxでも当然https対応可能です。

基本的に証明書の作成などについてはApacheやNginxに依存する話ではなくOpenSSLにて作成するものとなりますので以下のOpenSSLを用いた部分のみを参照いただければと思います。

Apache+OpenSSL

以下では秘密鍵や証明書、中間証明書などが既に作成され以下に保存されているという前提で話を進めます。

# 証明書ファイルの指定
SSLCertificateFile /etc/pki/tls/test.crt

# 秘密鍵ファイルの指定
SSLCertificateKeyFile /etc/pki/tls/private/test.key

# ベリサインなどを利用する際は下記の中間証明書を設定する必要あり
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt

これらをNginxの設定ファイルにて追記します。

Apacheのときとの違いはApacheでは証明書、中間証明書、秘密鍵を上記の3つの項目で指定しますが、Nginxでは証明書と中間証明書を一つのファイルにまとめてssl_certificateで指定します。ファイルの中身は以下のような感じです。

-----BEGIN CERTIFICATE-----
SSL証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
SSL中間証明書
-----END CERTIFICATE-----

これらを踏まえてNginxの設定ファイルは以下のようになります。

# vi /etc/nginx/conf.d/default.conf
server {
    listen 80;
    listen 443;

    ssl on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_certificate      /etc/pki/tls/test.crt; #証明書+中間証明書
    ssl_certificate_key  /etc/pki/tls/private/test.key;
    server_name ssl_site;

    location / {
       root /usr/share/nginx/html;
       index index.html index.htm;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

■マルチドメインの設定(Server Name Indication)

一昔前は1IPにつき1証明書でしたが、今では1IPで複数の証明書に対応できます。デフォルトでNginxも対応しているはずですが念の為、以下のコマンドで確認可能です。

# nginx -V
nginx	version:	nginx/1.16.0
built	by	gcc	4.8.5	20150623	(Red	Hat	4.8.5-36)	(GCC)
built	with	OpenSSL	1.0.2k-fips	26	Jan	2017
TLS	SNI	support	enabled

TLS SNI support enabledとなっていればOKです。

設定自体は単純で/etc/nginx/conf.d/default.confもしくは/etc/nginx/nginx.confにhttpディレクティブを必要数分だけ追加していきます。それぞれのサイトごとに証明書や秘密鍵が必要となります。

下記の設定例はほぼほぼ必要最小限の設定しか記載しておりませんのでご注意ください。

# vi /etc/nginx/conf.d/default.conf
server {
    server_name site1; 
    listen 80;
    listen 443;

    ssl on;
    ssl_certificate      /etc/pki/tls/test1.crt; 
    ssl_certificate_key  /etc/pki/tls/private/test1.key;

    location / {
       root /site1/html;
       index index.html index.htm;
    }
}

server {
    server_name site2;

    listen 80;
    listen 443;

    ssl on;
    ssl_certificate /etc/pki/tls/test2.crt;
    ssl_certificate_key /etc/pki/tls/private/test2.key;

    location / {
       root /site2/html;
       index index.html index.htm;
    }
}

上記では2サイト分だけですが、数に制限はありません。必要数分だけ追記していけばよいということになります。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする