SSL (Secure Sockets Layer) 接続を構成すると、一般的な HTTP に追加の非対称暗号化プロトコルを追加できます。 SSL プロトコルは、Web サイトの認証システムまたはアプリとサーバー間のデータ交換を強化するのに役立ちます。このガイドでは、Ubuntu 18.04 を使用して Apache で SSL 接続を構成し、HTTPS を有効にする方法について説明します。
まず、SSH 接続を介してサーバーに接続します。まだ行っていない場合は、ガイドに従って SSH プロトコルに安全に接続することをお勧めします。ローカル サーバーの場合は、次の手順に進み、サーバーのターミナルを開きます。
SSL 証明書の取得
安全な接続を確立するために、Apache は認証局 (CA) から取得できる SSL 証明書を必要とします。便宜上、この例では、テストおよび開発環境でのみ使用される自己署名または自己署名証明書を使用します。自己署名証明書を取得するには、自己署名 SSL 証明書を作成するためのガイドを参照してください。
認証局が発行する無料の SSL 証明書の取得に関心がある場合は、Let's Encrypt と Ubuntu 18.04 で Apache を保護する方法に関するガイドに従ってください。
重要な注意:
証明書の作成中に、共通名の入力を求められたら、サーバーの IP アドレスまたはドメイン名を入力します:
Common Name (e.g. server FQDN or YOUR name) []: domain.com
証明書を取得したら、/etc/certificate フォルダを作成します:
$ sudo mkdir /etc/certificate
次に、証明書と秘密鍵の両方をその中に保存します。
Apache SSL パラメータの設定
次に、Apache が作成する安全な接続のディレクティブを設定します。これを行うには、Apache conf-available ディレクトリに ssl-params.conf ファイルを作成します:
$ sudo nano /etc/apache2/conf-available/ssl-params.conf
次の基本構成を新しく作成したファイルに貼り付けます:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
ファイルを保存して閉じます。
仮想ホストの変更方法
次に、SSL 接続で保護したいドメインの仮想ホストの SSL 構成を変更します。このチュートリアルでは、デフォルトの Apache 仮想ホストの SSL 構成を例として使用します。
仮想ホスト SSL 構成を開きます:
$ sudo nano /etc/apache2/sites-available/default-ssl.conf
次のような構造のファイルが見つかります:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
メールアドレスを入力して ServerAdmin ディレクティブを正しく設定し、ServerName ディレクティブの後にドメインまたはサーバーの IP アドレスを追加します。
最後に、SSLCertificateFile ディレクティブと SSLCertificateKeyFile ディレクティブで示されるパスを変更し、証明書と秘密鍵のパスをそれぞれ入力します。
次のような結果が得られます:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName mydomain.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/certificate/certificate.crt
SSLCertificateKeyFile /etc/certificate/private.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
ファイルを保存して閉じます。
ファイアウォールの設定方法
システムにファイアウォールがある場合は、マシンへの HTTP トラフィックと HTTPS トラフィックを有効にするように設定してください。
UFW ファイアウォールを使用する場合、Apache 用のプリインストールされたプロファイルを利用できます。それでは、それらを有効にする方法を見てみましょう。
UFW ファイアウォールにインストールされている利用可能なプロファイルを確認するには、次のコマンドを実行します:
$ sudo ufw app list
次のようなリストが画面に表示されます:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
HTTP (ポート 80) および HTTPS (ポート 443) トラフィックを許可するには、「Apache Full」プロファイルを使用します。
次のようにプロフィール情報を確認してください:
$ sudo ufw app info "Apache Full"
スクリーン プロファイルの説明が表示されます:
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.
Ports:
80,443/tcp
プロファイルを確認したら、有効にします:
$ sudo ufw allow in "Apache Full"
Apache の設定方法
この時点で、Apache 構成を変更できます。
mod_ssl および mod_headers モジュールを有効にします:
$ sudo a2enmod ssl
$ sudo a2enmod headers
以前に作成した SSL 構成の読み取りを有効にします:
$ sudo a2enconf ssl-params
デフォルトの SSL 仮想ホストを有効にする:
$ sudo a2ensite default-ssl
Apache 構成ファイルに構文エラーがないことを確認してください:
$ sudo apache2ctl configtest
「Syntax OK」というメッセージが画面に表示された場合は、Apache を再起動して続行します。
$ sudo systemctl restart apache2
安全な接続を確認する方法
設定した仮想ホストのドメインまたは IP アドレスに接続してブラウザを開き、https プロトコルを使用していることを確認してください
https://mydomain.com