httpとhttpsについてとSSL証明書の設定と常時SSLする方法について調べてみた

http,httpsとは?

http(Hytertext Transfer Protocol)はWebサーバとWebブラウザの間で、Web情報をやりとりするためのプロトコルです。

https(Hytertext Transfer Protocol Secure)はhttpを暗号化して安全な通信を行うためのものになります。

httpのポート番号は80番でhttpsのポート番号は443番が割り当てられ、暗号化されているhttpsか暗号化されていないhttpかはWebサイトのURLを見ればわかります。

「http://」で始まるURLは暗号化されていない通信で、「https://」で始まるURLは暗号化されている通信です。

httpsは、SSL(Secure Sockets Layer)/TLS(Transport Layer Security)と呼ばれるプロトコルが作り出す、安全な接続を使って、その上でhttpによる通信を行います。

ウェブサーバーにSSL証明書をインストールし、適切に設定することでウェブサイトからhttpsとはみなされセキュアな通信を実現することができます。

SSL証明書(またはTLS証明書)はhttps通信で使用される暗号化キーを提供するデジタル証明書です。

証明書は、ウェブサーバーとクライアント(ブラウザ)の間で行われる通信のセキュリティを確保します。 証明書は信頼できる第三者機関(証明書発行局)によって署名され、公開鍵暗号化を使用して情報を保護します。 SSL証明書が適用されている場合、以下のような利点があります。

暗号化された通信: SSL証明書により、送信されるデータが暗号化されます。これにより、第三者がデータを傍受したり改ざんしたりすることが困難になります。センシティブな情報(パスワードやクレジットカード番号など)の送信時に重要です。
身元確認と信頼性: SSL証明書には、証明書発行局によって発行された署名が含まれています。これにより、ウェブサーバーの身元が確認され、ユーザーはサイトが信頼できると判断できます。ブラウザは、証明書の有効性を確認し、安全なサイトであることを示す緑色の鍵や鍵マークを表示します。

作業手順

今回は無料であるLet’s Encryptの証明書を取得・設定をします。

1.certbotのインストール

sudo yum install certbot

2.Let’s Encrypt証明書の取得とインストール

sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com

上記のコマンドで、example.comとwww.example.comに対して証明書を取得します。

-wオプションはドキュメントルートのパスを指定します。

3.httpsのバーチャルホストの設定

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    # その他の設定...

</VirtualHost>

上記の設定例では、ポート443でhttpsのバーチャルホストを定義しています。

ServerNameとServerAliasには対象のドメイン名を指定し、DocumentRootにはドキュメントルートのパスを指定します。

SSLEngine onとSSLCertificateFile、SSLCertificateKeyFileはLet’s Encryptから取得した証明書のパスを指定します。

4.httpからhttpsにリダイレクトする方法(常時SSL化)

SSL証明書のインストール、サーバーの設定が完了したらhttpをhttpsにリダイレクトさせるための設定をします。

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

    # その他の設定...

</VirtualHost>

上記の設定例では、ポート80でhttpのバーチャルホストを定義し、リダイレクト設定を追加しています。

ServerNameとServerAliasには対象のドメイン名を指定し、DocumentRootにはドキュメントルートのパスを指定します。

RewriteCondとRewriteRuleの行は、httpsへのリダイレクトを行うための設定です。

5.最後にApacheの再起動

sudo systemctl restart httpd

上記の手順に従ってLet’s Encryptをインストールし、httpsのバーチャルホストを設定することで、httpsでの通信が可能になります。

ただし、設定例ではexample.comとwww.example.comを使用していますので、実際のドメイン名に合わせて適切に設定してください。

また、必要に応じてその他の設定(ドキュメントルートのパーミッション、セキュリティ設定など)も行ってください。