このチュートリアルでは、UbuntuでLet’sEncryptを使用してApacheでHTTPSを適切に有効にする方法を説明します。 Google ChromeとFirefoxは、暗号化されていないWebページにパスワード入力ボックスを安全でないものとしてマークし始めています。最終的に、すべてのHTTPWebページは安全でないものとしてマークされます。 HTTPSはすべてのWebサイトのデフォルトになります。 HTTP/2プロトコルを利用してウェブサイトを高速化する場合にも必要です。
ご存知かもしれませんが、Let’s Encryptは、無料の自動化されたオープンな認証局です。公式ドキュメントには、Let’s EncryptでHTTPSを有効にするための簡単な手順が記載されていますが、それだけではありません。公式ドキュメントに従うと、 Aを獲得できます SSLLabsテストで。私の手順に従うと、A+スコアが得られます 。以前にLet’s Encrypt証明書を展開したことがある場合でも、このチュートリアルに従って、既存の証明書を更新および置換できます。
Let’s EncryptでHTTPSを有効にする手順を説明する前に、まずCAAレコードについて説明します。 セキュリティヘッダー およびOCSPステープリング 。これらはあなたがA+を得るのを助けることができるものです。このチュートリアルの最後に、CloudFlareCDNサービスの扱い方も紹介します。
注:このチュートリアルは、ApacheおよびUbuntuの現在のすべてのバージョン(16.04、18.04、および20.04を含む)で機能します。
ドメイン名のCAAレコードの作成
認証局承認(CAA)は、特定のドメイン名の証明書の発行を許可される認証局(CA)を指定するDNSリソースレコードです。 2017年9月以降、すべてのCAは、特定のドメイン名の証明書を発行する前にCAAレコードを確認することが義務付けられています。ドメイン名のCAAレコードが見つからない場合、どのCAもそのドメイン名の証明書を発行できます。 CAがCAAレコードにリストされていない場合、そのCAはドメイン名の証明書を発行できません。
Let’s Encryptがドメイン名の証明書を発行できるようにするCAAレコードを作成するには、DNSサーバーまたはDNSマネージャーに次のエントリを追加します。
example.com. IN CAA 0 issue "letsencrypt.org"
iodefを使用することもできます CAに悪意のある証明書の発行要求を電子メールアドレスに報告させるため。
example.com. IN CAA 0 iodef "mailto:your-email-address"
上記のレコードの形式はゾーンファイル用です。以下はあなたのためのいくつかのヒントです。
- SSLMate CAA Record Helperを使用して、ドメイン名のCCAレコードを生成できます。
- GoDaddy DNSを使用している場合は、この投稿に従ってCAAレコードを追加してください。
次のdigコマンドを使用して、CAAレコードを確認できます。
dig example.com CAA
WebブラウザはCAAレコードをチェックしないことに注意してください。
セキュリティヘッダー
セキュリティヘッダーはHTTPSと同じくらい重要ですが、HTTPS対応サイトのごく一部だけがセキュリティヘッダーに注意を払っています。セキュリティヘッダーについての完全な説明はこのチュートリアルの範囲を超えていますが、 upgrade-insecure-requestsについて話したいと思います。 およびHSTS Let's Encryptを使用してヘッダーを簡単に有効にして、サイトのセキュリティを強化できるためです。
安全でないリクエストのアップグレード
サイトでHTTPSが有効になっている場合もありますが、一部のCSS、画像、またはJavaScriptは引き続きHTTP経由で提供されます。この場合、ブラウザのアドレスバーの先頭にある緑色の錠前が消えます。 Google Chromeでは、情報アイコンに置き換えられています。 Firefoxでは、黄色の三角形が付いた灰色の南京錠に置き換えられています。サイトの訪問者にできるだけ緑色の南京錠を見せることをお勧めします。この問題を解決する簡単な方法は、 upgrade-insecure-requestsを有効にすることです。 ヘッダー。これにより、Webブラウザは https://を使用するようになります。 すべてのhttp:// リソース。
このヘッダーを有効にするには、--uir
を追加するだけです。 certbotを発行するときにフラグを立てる 指図。このヘッダーは、独自のドメインでホストされているリソースと、HTTPSをサポートするサードパーティドメインのリソースで機能することに注意してください。 WebページにHTTPS経由で利用できないサードパーティサーバー上のリソースが含まれている場合、それらのリソースはWebブラウザによってブロックされますが、このヘッダーを使用すると、Webページに常に緑色の錠がかかります。
HSTS(HTTP Strict Transport Security)
HSTSヘッダーは、Webサイトとのすべての通信をHTTPS経由で行う必要があることをWebブラウザーに通知します。 HTTPSからHTTPにダウングレードする攻撃であるSSLストライピングから防御します。このヘッダーを有効にするには、--hsts
を追加するだけです。 certbotを発行するときにフラグを立てる コマンド。
OCSPステープリング
WebブラウザがHTTPSWebサイトに接続すると、WebサイトのSSL証明書の失効ステータスを照会するために、OCSP(オンライン証明書ステータスプロトコル)要求が認証局(CA)に送信されます。 Firefoxのテレメトリデータによると、これによりページの読み込みが1〜3秒遅れる可能性があります。
パフォーマンスを向上させるために、Webサイトの所有者はOCSPステープリングを有効にできます。この場合、Webサーバー自体がCAによって署名されたOCSP応答を定期的にフェッチし、Webブラウザーに送信するため、WebブラウザーがOCSPサーバーに接続する必要がなくなります。
OCSPステープルを有効にするには、--staple-ocsp
を追加するだけです。 certbotを発行するときにフラグを立てる コマンド。
OCSPはステープルで留める必要があります
ハッカーが偽の複製Webサイトを作成し、OCSPステープルをオフにし、WebブラウザによるOCSPサーバーへのアクセスをブロックした場合、Webブラウザは問題がないと見なして悪意のあるWebサイトに進みます。この問題を解決するには、OCSPがWebサイトでステープルで留める必要があることを有効にします。これにより、HTTPS接続中にOCSPステープル応答がWebサイトで提示される必要があることがWebブラウザーに通知されます。そのため、WebブラウザがOCSPステープルのない偽のWebサイトに接続すると、接続が停止します。
OCSPを有効にするには、ステープルで留める必要があります。--must-staple
を追加します。 certbotを発行するときにフラグを立てる コマンド。
UbuntuにLet’s Encrypt Client(Certbot)をインストールする
さあ、手を汚しましょう。 Ubuntu 16.04以降、Let’s Encryptクライアント(Certbot)はUbuntuリポジトリに含まれているため、次のコマンドでインストールできます。 Python3-certbot-apache CertbotApacheプラグインです。
sudo apt install certbot python3-certbot-apache
バージョン番号を確認するには、
を実行しますcertbot --version
サンプル出力:
certbot 0.31.0
最新バージョンを使用する場合は、SnapストアからCertbotをインストールできます。
sudo apt install snapd sudo snap install --classic certbot
注 :Snapバージョンを使用する場合は、完全なバイナリパスを使用する必要があります:/snap/bin/certbot
。
Apacheプラグインを使用してHTTPSを有効にする
WebサイトでCDNサービスを使用していない場合は、Apacheプラグインを使用してApache WebサーバーでHTTPSを有効にすることをお勧めします。これにより、SSL/TLS証明書を自動的に取得して構成できるようになります。 Ubuntuサーバーで次のコマンドを実行します。
sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]
説明:
-
--apache
:Apacheオーセンティケーターとインストーラーを使用する -
--agree-tos
:Let'sEncryptの利用規約に同意する --redirect
:すべてのHTTPトラフィックをHTTPSに自動的にリダイレクトします-
--uir
:すべてのHTTP応答に「Content-Security-Policy:upgrade-insecure-requests」ヘッダーを追加します。 -
--hsts
:すべてのHTTP応答にStrict-Transport-Securityヘッダーを追加します。 -
--staple-ocsp
:OCSPステープリングを有効にします。 -
--must-staple
:OCSPMustStaple拡張機能を証明書に追加します。 -
-d
フラグの後には、コンマで区切られたドメイン名のリストが続きます。最大100個のドメイン名を追加できます。 --email
:登録と復旧の連絡に使用されるメール。
EFF(Electronic Frontier Foundation)からのメールを受信するかどうかを尋ねられます。 YまたはNを選択すると、SSL証明書が自動的に取得および構成されます。これは、以下のメッセージで示されます。
これで、Webサイトにアクセスすると、HTTPがHTTPS接続に自動的にリダイレクトされることがわかります。 certbotクライアントが/etc/apache2/sites-enabled/example.com-le-ssl.confを作成することに注意してください WebサイトのSSLを構成するときのSSL仮想ホスト。
SSL証明書のテスト
ssllabs.comにアクセスして、SSL証明書と構成をテストします。私が約束したように、あなたは A +を手に入れます 。ドメイン名でCAAレコードが有効になっているかどうか、サーバーでHSTSが有効になっているかどうか、OCSPステープリング、およびOCSPがステープリングする必要があるかどうかを確認することもできます。
WWWを非WWWにリダイレクトする(またはその逆)
HTTPからHTTPSへのリダイレクトはすでに有効になっています。あとは、wwwをwww以外にリダイレクトするか、その逆を行う必要があります。 WordPressを使用している場合は、非常に簡単です。 WordPressダッシュボードに移動するだけです>設定>一般 WordPressアドレスでお好みのバージョン(wwwまたはwww以外)を設定します およびサイトアドレス 。
そのルートに行くと、ダブル301リダイレクトと呼ばれるものになります。まず、ApacheサーバーがHTTPをHTTPSにリダイレクトし、次にWordPressがwwwまたはwww以外のドメインにリダイレクトします。
ダブル301リダイレクトを行うとSEOリンクジュースを失う可能性があると主張する人もいるかもしれません。それが心配な場合は、以下の方法を使用して、すべてのドメインバージョンを最終的な宛先に直接移動させることができます。
仮想ホストファイルを編集します。 (SSL仮想ホストではありません)
sudo nano /etc/apache2/sites-enabled/example.com.conf
CertBotクライアントは、HTTPをHTTPSにリダイレクトするために、ファイルに次の行を追加しました。
RewriteEngine on RewriteCond %{SERVER_NAME} =example.com [OR] RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
wwwまたはwww以外のドメインにリダイレクトするには、最後の行を変更する必要があります。 %{SERVER_NAME}
を置き換えます 以下のようなご希望のドメインバージョンで。 (wwwドメイン)
RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]
www以外のドメインを使用する場合は、次のように変更してください。
RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]
次に、ファイルを保存して閉じます。 SSL仮想ホストも編集する必要があります。
sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf
www以外のドメインをwwwドメインにリダイレクトするには、終了タグの上に次の行を追加します。
RewriteEngine on RewriteCond %{SERVER_NAME} =example.com RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]
wwwをwww以外のドメインにリダイレクトする場合は、代わりに次の行を追加してください。
RewriteEngine on RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]
ファイルを保存して閉じます。変更を有効にするには、Apacheサービスをリロードします。
sudo systemctl reload apache2
より明確にするために、以下は、www以外のドメインをwwwドメインにリダイレクトするためのApache仮想ホストファイルとSSL仮想ホストファイルのスクリーンショットです。

Apache仮想ホストファイル

ApacheSSL仮想ホストファイル
WordPressを使用している場合は、 WoredPress Addressで優先ドメインバージョンを設定してください。 およびサイトアドレス Apache仮想ホストファイルを編集する前。 WordPressの設定がApacheの構成と矛盾する場合、サイトはリダイレクトループになります。
TLSv1およびTLSv1.1を無効にする方法
TLSv1およびTLSv1.1は安全とは見なされなくなりました。それらを無効にするには、Let’sEncryptSSLオプション構成ファイルを編集します。
sudo nano /etc/letsencrypt/options-ssl-apache.conf
次の行を見つけます。これにより、SSLv2とSSLv3がデフォルトで無効になります。
SSLProtocol all -SSLv2 -SSLv3
TLSv1.0とTLSv1.1も無効にするには、次のように変更します。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
ファイルを保存して閉じます。次に、Apacheを再起動します。
sudo systemctl restart apache2
証明書の自動更新
Let's Encrypt証明書を自動的に更新するには、rootユーザーのcrontabファイルを編集するだけです。
sudo crontab -e
次に、下部に次の行を追加します。
@daily certbot renew --quiet && systemctl reload apache2
--quiet
フラグは通常のメッセージを抑制します。エラーメッセージを受け取りたい場合は、crontabファイルの先頭に次の行を追加してください。
MAILTO=your-email-address
新しい証明書をクライアントに提示するには、Apacheをリロードする必要があります。
CloudFlare CDN
最初に知っておく必要があるのは、Let’s Encrypt証明書をサーバーにインストールし、同時にCloudFlareのCDNサービスを使用する場合は、サイトでCloudFlareのユニバーサルSSLを有効にする必要があるということです。つまり
- サイト訪問者とCloudFlareエッジサーバー間の接続は、CloudFlareユニバーサルSSL証明書を使用して暗号化されます。
- オリジンサーバーとCloudFlareエッジサーバー間の通信は、Let’sEncryptが発行した証明書を使用して暗号化されます。
Let’s Encrypt証明書をオリジンサーバーにインストールし、HTTPをHTTPSにリダイレクトし、CloudFlare Universal SSLをオフにすると、CloudFlareがHTTPSをHTTPにリダイレクトするため、WebブラウザーはWebサイトが無限リダイレクトループにあると文句を言います。
次に知っておく必要があるのは、CloudFlareユニバーサルSSLの使用中にCAAレコードを有効にする場合は、次のCAAレコードも作成する必要があるということです。
example.com. IN CAA 0 issue "comodoca.com" example.com. IN CAA 0 issue "digicert.com" example.com. IN CAA 0 issue "globalsign.com
この投稿に従って、CloudFlareユニバーサルSSL証明書のCAAレコードを追加してください。
では、CloudFlareでLet’sEncrypt証明書をインストールするにはどうすればよいでしょうか。ええと、2つのシナリオがあります。
- 上記の手順を使用してLet'sEncrypt証明書を既にインストールしているので、CloudFlareCDNサービスを有効にします。
- あなたのウェブサイトはCloudFlareCDNサービスを使用しています。次に、Let’sEncrypt証明書をオリジンサーバーにインストールします。
最初のシナリオ
最初のシナリオの場合は、先に進んでCloudFlare CDNサービスを有効にし、暗号化に移動して、CloudFlareダッシュボードでCloudFlareユニバーサルSSLを有効にすることもできます。> SSL フル(厳密)を選択します 。サイトは問題なく正常に機能します。
2番目のシナリオ
CloudFlare CDNを使用していて、Let’s Encryptをオリジンサーバーにインストールする場合は、次のコマンドを実行してLet’sEncryptTLS証明書を取得してインストールします。
sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]
証明書を取得してサーバーにインストールしたら、Cloudflareダッシュボードに移動してCloudFlareユニバーサルSSLを有効にします。
次のステップ
このチュートリアルが、 UbuntuでLet’sEncryptを使用してApache仮想ホストでHTTPSを有効にするのに役立つことを願っています。 。また、サイトをハッキングから保護するためにModSecurityWebアプリケーションファイアウォールを設定することもできます。
- Debian/UbuntuでApacheを使用してModSecurityを設定する方法
Webサイトを高速化するために、ApacheでHTTP/2プロトコルを有効にすることができます。
- UbuntuでApacheを使用してHTTP/2プロトコルを有効にする方法
いつものように、この投稿が役に立った場合は、無料のニュースレターを購読して、さらにチュートリアルを入手してください。