GNU/Linux >> Linux の 問題 >  >> Linux

Ubuntu 18.04 で Apache との SSL 接続を保護する方法

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

Linux
  1. Ubuntu20.04でLetsencryptを使用してNginxを保護する方法

  2. SSL/TLSでvsFTPdを保護する方法

  3. Ubuntu18.04でLetsEncryptを使用してApacheを保護する方法

  1. Ubuntu20.04でApache2を使用してHTTPSプロトコルを有効にする方法

  2. UbuntuにApacheをインストールするにはどうすればいいですか?

  3. Ubuntu 22.04 で Apache を使用して PHP-FPM をインストールする方法

  1. Ubuntu18.04でApacheを使用してphpMyAdminをインストールして保護する方法

  2. Ubuntu20.04でLetsEncryptを使用してApacheを保護する

  3. SSL を使用して Ubuntu 22.04 に Elasticsearch をインストールする方法