Let's EncryptSSL証明書をインストールしてRHEL / CentOS7 / 6でApacheを保護する方法


SSL/TLS無料証明書に関する前回のLet'sEncryptチュートリアルを拡張して、この記事では、CentOS/RHEL7/6およびFedora上のApacheWebサーバー用のLet'sEncrypt認証局によって発行された無料SSL/TLS証明書を取得してインストールする方法を示します。ディストリビューションも。

Let’s Encrypt for ApacheをDebianとUbuntuにインストールする場合は、以下のガイドに従ってください。

  1. A registered domain name with valid A records to point back to your server public IP Address.
  2. Apache server installed with SSL module enabled and Virtual Hosting enabled in case you’re hosting multiple domains or subdomains.

ステップ1:ApacheWebサーバーをインストールする

1.まだインストールされていない場合は、次のコマンドを発行してhttpdデーモンをインストールできます。

# yum install httpd

2. Let's EncryptionソフトウェアがApacheで動作するようにするには、次のコマンドを発行してSSL/TLSモジュールがインストールされていることを確認します。

# yum -y install mod_ssl

3.最後に、次のコマンドを使用してApacheサーバーを起動します。

# systemctl start httpd.service          [On RHEL/CentOS 7]
# service httpd start                    [On RHEL/CentOS 6]

ステップ2:Let's EncryptSSL証明書をインストールする

4. Let’s Encryptクライアントをインストールする最も簡単な方法は、ファイルシステムにgithubリポジトリのクローンを作成することです。システムにgitをインストールするには、次のコマンドでEpelリポジトリを有効にする必要があります。

# yum install epel-release

5. Epelリポジトリがシステムに追加されたら、以下のコマンドを実行してgitclientをインストールします。

# yum install git

6.ここで、Let's Encryptを処理するために必要なすべての依存関係をインストールしたら、/usr/local/ディレクトリに移動し、Let'sEncryptクライアントを公式のgithubリポジトリから次のようにプルし始めます。コマンド:

# cd /usr/local/
# git clone https://github.com/letsencrypt/letsencrypt

ステップ3:Apache用の無料のLet's EncryptSSL証明書を取得する

7. Apacheプラグインのおかげで、Apache用の無料のLet’sEncrypt証明書を取得するプロセスがCentOS/RHEL用に自動化されています。

SSL証明書を取得するために、Let'sEncryptスクリプトコマンドを実行してみましょう。 /usr/local/letsencrypt からLet'sEncryptのインストールディレクトリに移動し、 -apache オプションとを指定して letsencrypt-auto コマンドを実行します。証明書が必要なすべてのサブドメインのcode> -d フラグ。

# cd /usr/local/letsencrypt
# ./letsencrypt-auto --apache -d your_domain.tld 

8. Let’s Encryptが紛失したキーを回復するため、または緊急の通知に使用するメールアドレスを入力し、Enterキーを押して続行します。

9. Enterキーを押して、ライセンスの条件に同意します。

10. CentOS/RHELでは、デフォルトで、Apacheサーバーは、Debianベースのディストリビューションのように、有効なホストのディレクトリを使用可能な(非アクティブな)ホストから分離するという概念を使用しません。

また、仮想ホスティングはデフォルトで無効になっています。 SSL構成ファイルに存在しないサーバーの名前(ServerName)を指定するApacheステートメント。

このディレクティブをアクティブにするには、Let’sEncryptで仮想ホストを選択するように求められます。使用可能なVhostが見つからないため、Let’sEncryptクライアントによって自動的に変更される ssl.conf ファイルを選択し、Enterキーを押して続行します。

11.次に、HTTPリクエストのEasyメソッドを選択し、Enterキーを押して先に進みます。

12.最後に、すべてが順調に進んだ場合は、おめでとうメッセージが画面に表示されます。 Enterキーを押して、プロンプトを解放します。

それでおしまい!ドメインのSSL/TLS証明書が正常に発行されました。これで、HTTPSプロトコルを使用してWebサイトの閲覧を開始できます。

ステップ4:ドメインで無料のLet'sEncrypt暗号化をテストする

13.ドメインのSSL/TLSハンドシェイクの真直度をテストするには、以下のリンクにアクセスして、ドメインで証明書をテストしてください。

https://www.ssllabs.com/ssltest/analyze.html

14.実施したテストでドメインの脆弱性に関する一連のレポートを受け取った場合は、それらのセキュリティホールを早急に修正する必要があります。

Cクラスの全体的な評価により、ドメインは非常に安全ではなくなります。これらのセキュリティ問題を修正するには、Apache SSL構成ファイルを開き、次の変更を加えます。

# vi /etc/httpd/conf.d/ssl.conf

SSLProtocol ステートメントで行を検索し、行の最後に -SSLv3 を追加します。

ファイルをさらに深く掘り下げ、その前にを配置して、 SSLCipherSuite で行を検索してコメントし、この行の下に次のコンテンツを追加します。

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire

15.上記の変更をすべて行ったら、ファイルを保存して閉じ、Apacheデーモンを再起動して変更を適用します。

# systemctl restart httpd.service          [On RHEL/CentOS 7]
# service httpd restart                    [On RHEL/CentOS 6]

16.ここで、上記と同じリンクにアクセスして、ドメイン暗号化のステータスを再度テストします。再テストを実行するには、Webサイトの[キャッシュをクリア]リンクをクリックします。

https://www.ssllabs.com/ssltest/analyze.html 

これで、クラスAの総合評価を取得する必要があります。これは、ドメインが高度に保護されていることを意味します。

ステップ4:自動更新Let's Encrypt Certificates on Apache

17. Let’s Encryptソフトウェアのこのベータ版は、有効期限が90日後の証明書をリリースします。したがって、SSL証明書を更新するには、最初の証明書の取得に使用したのと同じオプションとフラグを使用して、有効期限の前に letsencrypt-auto コマンドを再度実行する必要があります。

証明書を手動で更新する方法の例を以下に示します。

# cd /usr/local/letsencrypt
# ./letsencrypt-auto certonly --apache --renew-by-default  -d your_domain.tld

18.このプロセスを自動化するには、githuberikaheidiが提供する次のbashスクリプトを/usr/local/bin/ディレクトリに次の内容で作成します。 (スクリプトは、letsencryptインストールディレクトリを反映するようにわずかに変更されています)。

# vi /usr/local/bin/le-renew-centos

次のコンテンツを le-renew-centos ファイルに追加します。

!/bin/bash

domain=$1
le_path='/usr/local/letsencrypt'
le_conf='/etc/letsencrypt'
exp_limit=30;

get_domain_list(){
        certdomain=$1
        config_file="$le_conf/renewal/$certdomain.conf"

        if [ ! -f $config_file ] ; then
                echo "[ERROR] The config file for the certificate $certdomain was not found."
                exit 1;
        fi

        domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
        last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')

        if [ "${last_char}" = "," ]; then
                domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
        fi

        echo $domains;
}

if [ -z "$domain" ] ; then
        echo "[ERROR] you must provide the domain name for the certificate renewal."
        exit 1;
fi

cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"

if [ ! -f $cert_file ]; then
        echo "[ERROR] certificate file not found for domain $domain."
        exit 1;
fi

exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)

echo "Checking expiration date for $domain..."

if [ "$days_exp" -gt "$exp_limit" ] ; then
        echo "The certificate is up to date, no need for renewal ($days_exp days left)."
        exit 0;
else
        echo "The certificate for $domain is about to expire soon. Starting renewal request..."
        domain_list=$( get_domain_list $domain )
        "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
        echo "Restarting Apache..."
        /usr/bin/systemctl restart httpd
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

19.スクリプトの実行権限を付与し、bcパッケージをインストールして、スクリプトを実行してテストします。スクリプトの位置パラメータとしてドメイン名を使用します。この手順を実行するには、以下のコマンドを発行します。

# yum install bc
# chmod +x /usr/local/bin/le-renew-centos
# /usr/local/bin/le-renew-centos your_domain.tld

20.最後に、Linuxスケジューリングを使用して、2か月ごとにスクリプトを実行するために新しいcronジョブを追加し、有効期限が切れる前に証明書が更新されるようにします。

# crontab -e

ファイルの最後に次の行を追加します。

0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

それでおしまい! CentOS/RHELシステム上で実行されているApacheサーバーは、無料のLet’s EncryptSSL証明書を使用してSSLコンテンツを提供しています。