Let's Encryptを使ったHTTPS (SSL/TLS) 設定
1. この講義は何についてなのか、そしてなぜ必要なのか
現代の世界では、HTTPSはすべてのサイトにとって標準になってるね。ユーザーが安全だと感じ、Googleが検索ランキングでサイトを下げないようにしたいなら(そう、HTTPSはSEOにも影響するんだ)、SSL/TLSを設定する必要があるよね。HTTPSプロトコルは、ユーザーとサーバー間のデータを暗号化して保護し、悪意のある人がデータを傍受する可能性を排除する仕組み。
この講義では、Let's Encryptを使って、無料でウェブサーバーにHTTPSを導入する方法をステップバイステップで学ぶよ。Let's Encryptは信頼できる認証局(CA)で、無料の証明書とそのインストール用ツールを提供してくれるんだ。それに、証明書の期限切れのストレスを避けるために、自動更新の方法も学ぶよ。
HTTPとHTTPSの違い
HTTP (Hypertext Transfer Protocol) はデータ転送プロトコルだよ。猫のミームを見るにはいいんだけど、だけど...!例えばカフェで誰かがWi-Fiに接続すると、サーバーに送ったデータ(ひえぇ、君のパスワードが「彼らのパスワード」になっちゃうかも)を傍受できちゃうかもしれない。
HTTPS (Hypertext Transfer Protocol Secure) は、暗号化を追加したHTTPのバージョンだよ。クライアントとサーバー間で送信されるデータは、SSL/TLS (Secure Sockets Layer / Transport Layer Security) を使って保護されるんだ。悪意のある人がデータパケットを傍受できたとしても、中身を見ることはできなくなるよ。
2. Let's EncryptとCertbotのインストール
CertbotはLet's Encryptの開発者たちによるツールで、ウェブサーバー用のSSL証明書を簡単に取得・設定できるものだよ。NginxやApacheとも連携して、面倒な作業を自動的に処理してくれる。まずはインストールから始めよう。
Certbotのインストール
サーバーが最新であることを確認してね:
sudo apt-get update
sudo apt-get upgrade
次にCertbotとそのプラグインをインストールするよ:
Nginxの場合:
sudo apt-get install certbot python3-certbot-nginx
Apacheの場合:
sudo apt-get install certbot python3-certbot-apache
Certbot自体はPythonで書かれたコードなんだよ。コミュニティによって積極的にサポートされていて、ほとんどのサーバーに簡単に統合できるんだ。
3. Certbotを使ったSSL証明書の取得
Nginxの場合
Certbotは、Nginxを使用している場合、自動的にサイト向けのHTTPSを設定することができます。以下を入力してください:
sudo certbot --nginx
Certbotは現在の仮想ホスト (server
ブロック) をスキャンします。そしてHTTPSを設定したいドメインを尋ねます。ドメインがDNS(例えばAレコードを使って)を通じてサーバーを指していることを確認してください。
出力の例:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ドメインを選択してください(例えば、1)。
Certbotは自動的にNginxの設定を行い、それを検証します。成功した場合、次のようなメッセージが表示されます:
Congratulations! Your certificate and chain have been saved ...
これであなたのサイトはHTTPSでアクセス可能になります。https://example.com をブラウザで開くことで確認できます。
Apacheの場合
Apacheを使用している場合、コマンドは少し異なります:
sudo certbot --apache
Certbotはまた、仮想ホスト (<VirtualHost>
ブロック) をスキャンし、選択したドメイン向けのHTTPSを設定することを提案します。必要なものを選択すると、Certbotがすべてを行います。
プロセスが完了すると、再びお祝いのメッセージが表示され、HTTPSを通じたサイトのアクセスを確認できます。
4. 証明書の自動更新
Let's Encryptの証明書は90日間しか有効ではないから、定期的に更新する必要があるね。Certbotはこれを自動でやってくれるけど、ちゃんと設定ができていることを確認しないとね。
証明書の有効期限を確認する
自分の証明書の有効期限を確認するには、こんな感じでやるよ:
sudo certbot certificates
このコマンドの出力には、ドメインと証明書の有効期限が表示されるよ。
自動更新の設定
Certbotをインストールすると、CronやSystemd Timerに更新チェックのタスクが自動的に追加されるよ。ちゃんと動いているか確認したいなら、Cronにテストタスクを追加しよう:
sudo crontab -e
こんな行を追加してね:
0 0 * * * certbot renew --quiet
このコマンドは毎日深夜0時に証明書をチェックして更新するよ。--quiet
オプションは余計な情報を出力しないようにするものだよ。
手動での更新
テストとかで証明書を手動で更新したい場合は、これを使おう:
sudo certbot renew
5. HTTP → HTTPS自動リダイレクトの有効化
あなたのサイトはまだHTTPでアクセス可能かもしれませんが、それは安全ではないです。全てのリクエストをHTTPSにリダイレクトするように設定しましょう。
Nginxの場合
Certbotは証明書を発行する際に自動的にリダイレクトを設定できます。もし以前この設定を有効にしなかった場合は、仮想ホストの設定ファイルにリダイレクトを手動で追加してください:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
変更を適用するにはNginxを再起動してください:
sudo systemctl restart nginx
Apacheの場合
Certbotはリダイレクトを自動的に有効にすることもできます。もしこのステップをスキップした場合は、仮想ホストファイルに以下を追加してください:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
Apacheを再起動してください:
sudo systemctl restart apache2
6. エラーのデバッグ
何か問題が起きたら、まずログを確認するところから始めよう:
Nginxの場合
sudo tail -f /var/log/nginx/error.log
Apacheの場合
sudo tail -f /var/log/apache2/error.log
設定のテスト
また、Webサーバーの設定を確認しよう:
Nginxの場合:
sudo nginx -t
Apacheの場合:
sudo apachectl configtest
HTTPSの確認
サイトがHTTPSでアクセス可能か確認して:
curl -I https://example.com
200 OK
ステータスとStrict-Transport-Security
という行が表示されれば、HTTPSが動作していることを示しているよ。
これで、安全でセキュアなHTTPSサイトを作成する準備が整ったね。ユーザーも満足して、Googleも喜ぶし、データがインターネットの悪者から守られていると分かって安心して眠れるね。
GO TO FULL VERSION