Lets Encryptを使用し、ウェブサイトのTLS(SSL)化を行う(CentOS7)

セキュリティ

0.前書き

公開ウェブサーバ用のTLS(SSL)化を行うことにした。

証明書はLets Encryptを使用し、Qualys SSL Labsのテストで高得点を

取ることを目標とする。

1.前提条件

・CentOS7であること

・ドメインを取得していること

・取得したドメインに紐づいた公開ウェブサーバがあり、
インターネット上での名前解決が可能であること

・httpがTCP/80、httpsがTCP/443で待ち受けている

・Apache/2.4.6でWordPressを使用している

2.証明書の発行

本来、TLS(SSL)サーバ証明書は秘密鍵とCSRを作成し、

そのCSRに認証局の署名をしてもらうことで発行される。

Lets Encryptでは、そのすべてが「certbot」というソフトで自動化されており、

証明書の自動更新もこのソフトで行う。

 

そのため、まず「certbot」のインストールが必要だが、

「certbot」のインストールは「EPELリポジトリ」から行うため、

EPELリポジトリのインストールが必要(すでにあれば無視してください。)

sudo yum -y install epel-release

続いて、「certbot」のインストール

sudo yum -y install certbot

Apacheのドキュメントルートを設定するため、ドキュメントルートのパスを調べる。

sudo cat /etc/httpd/conf/httpd.conf | grep DocumentRoot

以下コマンドで証明書を発行する。

それぞれ環境に合わせて、書き換えてください

sudo certbot certonly –webroot \
-w /home/www/html \
-d miyamo83.com \
-d www.miyamo83.com \
-m example@gmail.com \
–agree-tos -n

-w ドキュメントルート指定

-d ドメイン指定 今回はwww有り無し2パターン

-m 管理用メールアドレスの登録

–agree-tos 規約に承諾 利用規約は「https://letsencrypt.org/repository/」

-n 対話を表示させない 対話が必須の場合削除する必要あり

 

なお、以下のエラーが出る場合、指定ドメインの名前解決ができていない可能性あり。

Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA. You may need to use an authenticator plugin that can do challenges over DNS.

 

成功例

sudo certbot certonly –webroot \
> -w /home/www/html \
> -d miyamo83.com \
> -d www.miyamo83.com \
> -m example@gmail.com \
> –agree-tos -n
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Requesting a certificate for miyamo83.com and www.miyamo83.com
Performing the following challenges:
http-01 challenge for miyamo83.com
http-01 challenge for www.miyamo83.com
Using the webroot path /home/www/html for all unmatched domains.
Waiting for verification…
Cleaning up challenges

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/miyamo83.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/miyamo83.com/privkey.pem
Your certificate will expire on 2022-07-22. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run “certbot renew”
– If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF:

 

証明書のファルダを確認し、

4つのファイルが作成されていればOK

-rw-r–r– 1 root root 692 4月 23 15:38 README
lrwxrwxrwx 1 root root 36 4月 23 15:38 cert.pem -> ../../archive/miyamo83.com/cert1.pem
lrwxrwxrwx 1 root root 37 4月 23 15:38 chain.pem -> ../../archive/miyamo83.com/chain1.pem
lrwxrwxrwx 1 root root 41 4月 23 15:38 fullchain.pem -> ../../archive/miyamo83.com/fullchain1.pem
lrwxrwxrwx 1 root root 39 4月 23 15:38 privkey.pem -> ../../archive/miyamo83.com/privkey1.pem

3.Apacheでの設定

ApacheでTLS(SSL)化を行うにあたって、

「mod_ssl」というモジュールが必要になるため、インストールする。

sudo yum -y install mod_ssl

Apacheの構成定義ファイルでバーチャルホストの設定を行う。

バーチャルホストの設定は「ssl.conf」に記載する方法や、

バーチャルホストごとにファイルを分ける方法があるが、

今回は「httpd.conf」に集約する。

sudo vi /etc/httpd/conf/httpd.conf

編集内容

環境に合わせて、書き換えてください

変更箇所

Listen 443 → #Listen 443  (なければ無視)

#ServerName www.example.com:80 → ServerName miyamo83.com:443

 

最終行に以下を追記

#以下バーチャルホストの設定

<VirtualHost *:443>
#サーバ名
ServerName miyamo83.com:443
#ドキュメントルート指定
DocumentRoot “/home/www/html”
#SSL有効化
SSLEngine on
#サーバが提供する暗号化スイートを優先的に使用するようにする
SSLHonorCipherOrder on
#HTTPの代わりにHTTPSを使用させる。サブドメインにも適用
Header set Strict-Transport-Security “max-age=31536000; includeSubDomains”
#TLSv1.2以外を無効
SSLProtocol -All +TLSv1.2
#暗号化スイートの中からaNULL、MD5、SEED、IDEA、3DES、RC4、DHを無効
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH
#証明書の場所
SSLCertificateFile /etc/letsencrypt/live/miyamo83.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/miyamo83.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/miyamo83.com/chain.pem
#オプション設定
<Directory “/home/www/html/miyamo83.com”>
#フォルダ内のリダイレクト許可
Options FollowSymLinks
#.htaccess有効化
AllowOverride All
# ファイル一覧出力の禁止
Options -Indexes
</Directory>
#エラーログ出力
ErrorLog logs/error_log
#アクセスログ出力
CustomLog logs/access_log combined env=!nolog
</VirtualHost>

 

暗号スイートの説明は以下を参照

 

編集したファイルの構文チェックを行う。

sudo apachectl configtest

Syntax OKが表示されればOK

 

次に、先ほどインストールした「mod ssl」の構成定義ファイルを編集する。

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

編集内容

##
## SSL Virtual Host Context
##

この3行から下をすべて削除する。

 

最終行に下記を追加する。

#443の通信はhttpd.confのVirtualHostを参照
NameVirtualHost *:443

 

httpdサービスを再起動する。

sudo systemctl reload httpd

 

4.WordPressでサイトの設定

wordpressの管理画面で「設定」メニューの「一般設定」に

ある「サイトアドレス (URL)」をhttpsから始まるURLに変更する。

 

サイトにアクセスし、暗号化通信に成功しているか確認

うまくいった場合、以下のようになる。

5.Qualys SSL Labsでテスト

以下のサイトにアクセスし、自ドメインのセキュリティチェックを行う。

SSL Server Test (Powered by Qualys SSL Labs)
A comprehensive free SSL test for your public web servers.

 

評価はA+なので今回の目標としては達成とする。

TLSv1.3への対応は超えるハードルが多いため、今回は見送った。

 

6.証明書の自動更新

Lets Encryptは無料のサービスであるためか、

証明書の有効期限が90日となっている。

そのため、毎月1日の朝5時に証明書の自動更新を行う設定をする。

 

まず、以下のコマンドで証明書の手動更新が可能か確認する。

/bin/certbot renew –force-renewal && /bin/systemctl reload httpd

 

更新が完了したら証明書を見に行き、更新されているか確認する。

環境に合わせて、書き換えてください

ll /etc/letsencrypt/live/miyamo83.com/

ファイルの日時が更新されていればOK

 

クーロン設定を行う。

crontab -e

編集内容

0 5 1 * * /bin/certbot renew –force-renewal && /bin/systemctl reload httpd

 

これですべての作業が完了となります。

 

7.参考サイト

Let's Encrypt サーバー証明書の取得と自動更新設定メモ
Let's Encrypt は、自分が所有しているドメインのSSL/TLSサーバー証明書を、無料で発行してくれる認証局(CA)です。この認証局は、Mozilla、アカマイ、シスコなどが参加するISRGというカリフォルニア州の公益法
仮想ホスト環境でHTTPS化(SSLを有効)を行う場合の設定 - 初めてのVPS構築
ApacheでHTTPS化を行う場合、単一ドメインの場合はssl.confにSSL証明書を設定しますが、マルチドメイン(仮想ホスト)の場合、少し異なります。
CentOS 8のApacheにバーチャルホストを設定してサーバーを有効利用する
CentOS 8に用意されたApache httpdパッケージをインストールしてテストページが見えるところまでを前回の記事で紹介しました。今回は記事内でインストールした「Apache httpd」を利
VirtualHostとは?
今回は「VirtualHost」とは何か?ということについて、分かりやすく解説していきたいと思います。
ApacheのSSL設定を考えた | TECHSCORE BLOG
こんにちは!インフラエンジニアの射場です。趣味やお仕事でWebサイトを運用されている方はいらっしゃいますか?そのWebサイトはSSL証明書を使っていますか?SSL証明書を使っていると答えたアナタ!下記...
ApacheのTLS設定を2020年向けに更新する|TechRacho by BPS株式会社
BPSの福岡拠点として一緒にお仕事をさせていただいています、株式会社ウイングドアのモリヤマです。 今回のテーマはTLS対応(触れるのはHTTPS化の設定に関するお話)です! ネットワーク/インフラエンジニアの方々の領域に、ちょっとだけ学習の...

コメント

タイトルとURLをコピーしました