序章

TLS 、または「トランスポート層セキュリティ」(およびその前身の SSL )は、保護された暗号化されたラッパーで通常のトラフィックをラップするために使用されるプロトコルです。 このテクノロジーを使用すると、サーバーは、メッセージが外部の第三者によって傍受されたり読み取られたりすることなく、クライアントに安全に情報を送信できます。

このガイドでは、Ubuntu22.04上のApacheWebサーバーで自己署名TLS証明書を作成して使用します。 を使用します openssl コマンドラインツールを使用して証明書を作成し、それを使用するようにApacheを構成します。

注:自己署名証明書は、サーバーとクライアント間の通信を暗号化します。 ただし、Webブラウザやオペレーティングシステムに含まれている信頼できる認証局によって署名されていないため、ユーザーは証明書を使用してサーバーのIDを自動的に検証することはできません。 その結果、ユーザーはサイトにアクセスしたときにセキュリティエラーが表示されます。

この制限のため、自己署名証明書は、一般にサービスを提供する実稼働環境には適していません。 これらは通常、テスト、または代替通信チャネルを介して証明書の有効性の信頼を確立できる単一のユーザーまたは少数のユーザーグループが使用する重要ではないサービスを保護するために使用されます。

より本番環境に対応した証明書ソリューションについては、無料の認証局である Let’sEncryptを確認してください。 Let’s Encrypt証明書をダウンロードして構成する方法については、 Ubuntu22.04チュートリアルでLet’sEncryptを使用してApacheを保護する方法をご覧ください。

前提条件

このチュートリアルを開始する前に、次のものが必要です。

  • root以外のsudo対応ユーザーによるUbuntu22.04サーバーへのアクセス。 Ubuntu 22.04を使用したサーバーの初期設定ガイドでは、このアカウントの作成方法を説明しています。

  • また、Apacheをインストールする必要があります。 Apacheを使用してインストールできます apt. まず、ローカルパッケージインデックスを更新して、最新のアップストリームの変更を反映します。

    1. sudo apt update

    次に、をインストールします apache2 パッケージ:

    1. sudo apt install apache2

    そして最後に、 ufw ファイアウォールを設定し、 httphttps ポート:

    1. sudo ufw allow "Apache Full"

これらの手順が完了したら、 root 以外のユーザーとしてログインしていることを確認し、チュートリアルを続行してください。

ステップ1—有効化 mod_ssl

any TLS証明書を使用する前に、まず有効にする必要があります mod_ssl、SSL暗号化のサポートを提供するApacheモジュール。

有効 mod_ssl とともに a2enmod 指図:

  1. sudo a2enmod ssl

Apacheを再起動して、モジュールをアクティブ化します。

  1. sudo systemctl restart apache2

The mod_ssl これでモジュールが有効になり、使用できるようになります。

ステップ2–TLS証明書の作成

Apacheで暗号化を使用する準備ができたので、新しいTLS証明書の生成に進むことができます。 証明書には、サイトに関するいくつかの基本情報が格納され、サーバーが暗号化されたデータを安全に処理できるようにするキーファイルが付属しています。

TLSキーと証明書ファイルを作成できます openssl 指図:

  1. sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

コマンドを入力すると、Webサイトに関する情報を入力できるプロンプトが表示されます。 それを説明する前に、発行しているコマンドで何が起こっているかを見てみましょう。

  • openssl:これは、OpenSSL証明書、キー、およびその他のファイルを作成および管理するためのコマンドラインツールです。
  • req -x509:これは、X.509証明書署名要求(CSR)管理を使用することを指定します。 X.509は、TLSがキーおよび証明書の管理に準拠する公開キーインフラストラクチャ標準です。
  • -nodes:これは、パスフレーズで証明書を保護するオプションをスキップするようにOpenSSLに指示します。 サーバーの起動時に、ユーザーの介入なしにファイルを読み取れるようにするには、Apacheが必要です。 パスフレーズは、再起動するたびに入力する必要があるため、これが発生するのを防ぎます。
  • -days 365:このオプションは、証明書が有効であると見なされる時間の長さを設定します。 ここで1年間設定しました。 最近のブラウザの多くは、1年以上有効な証明書を拒否します。
  • -newkey rsa:2048:これは、新しい証明書と新しいキーを同時に生成することを指定します。 前の手順で証明書に署名するために必要なキーを作成しなかったため、証明書と一緒に作成する必要があります。 The rsa:2048 部分は、2048ビット長のRSAキーを作成するように指示します。
  • -keyout:この行は、作成している生成された秘密鍵ファイルを配置する場所をOpenSSLに指示します。
  • -out:これは、作成する証明書を配置する場所をOpenSSLに指示します。

プロンプトに適切に記入します。 最も重要な行は、 Common Name. サーバーへのアクセスに使用するホスト名、またはサーバーのパブリックIPのいずれかを入力する必要があります。 このフィールドは、サイトにアクセスするためにブラウザのアドレスバーに入力するものと一致することが重要です。一致しないと、セキュリティエラーが増えるためです。

プロンプトの完全なリストは次のようになります。

Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Example
Locality Name (eg, city) [Default City]:Example 
Organization Name (eg, company) [Default Company Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Example Dept
Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
Email Address []:[email protected]

作成した両方のファイルは、下の適切なサブディレクトリに配置されます /etc/ssl.

次に、新しい証明書とキーを使用するようにApache構成を更新します。

ステップ3–TLSを使用するようにApacheを構成する

自己署名証明書とキーが利用可能になったので、それらを使用するためにApache構成を更新する必要があります。 Ubuntuでは、新しいApache構成ファイルを配置できます(これらはで終わる必要があります .conf) の中へ /etc/apache2/sites-available/次回Apacheプロセスがリロードまたは再起動されたときにロードされます。

このチュートリアルでは、新しい最小限の構成ファイルを作成します。 (すでにApacheをお持ちの場合 <Virtualhost> セットアップしてTLSを追加するだけでよい場合は、で始まる構成行をコピーする必要があります。 SSL、およびを切り替えます VirtualHost からのポート 80443. 港の世話をします 80 次のステップで。)

/ etc / apache2/sites-availableディレクトリにある新しいファイルを開きます。

  1. sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

次の最小限のVirtualHost構成を貼り付けます。

/etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:443>
   ServerName your_domain_or_ip
   DocumentRoot /var/www/your_domain_or_ip

   SSLEngine on
   SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
   SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>

必ず更新してください ServerName ただし、サーバーのアドレスを指定する予定です。 これは、ホスト名、完全なドメイン名、またはIPアドレスにすることができます。 選択したものが一致することを確認してください Common Name 証明書を作成するときに選択しました。

残りの行は DocumentRoot ファイルを提供するディレクトリ、およびApacheが新しく作成された証明書とキーを指すために必要なTLSオプション。

それでは、 DocumentRoot テスト目的でHTMLファイルを挿入します。

  1. sudo mkdir /var/www/your_domain_or_ip

新しいを開く index.html テキストエディタでファイル:

  1. sudo nano /var/www/your_domain_or_ip/index.html

以下を空のファイルに貼り付けます。

/var/www/your_domain_or_ip/index.html
<h1>it worked!</h1>

もちろん、これは完全なHTMLファイルではありませんが、ブラウザーは寛大であり、構成を確認するのに十分です。

ファイルを保存して閉じる次に、構成ファイルを有効にする必要があります。 a2ensite 道具:

  1. sudo a2ensite your_domain_or_ip.conf

次に、構成エラーをテストしましょう。

  1. sudo apache2ctl configtest

すべてが成功すると、次のような結果が得られます。

Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

最初の行は、 ServerName ディレクティブはグローバルに設定されていません。 そのメッセージを取り除きたい場合は、 ServerName サーバーのドメイン名またはIPアドレスに /etc/apache2/apache2.conf. メッセージは害を及ぼさないため、これはオプションです。

出力に Syntax OK その中で、構成ファイルには構文エラーはありません。 Apacheを安全にリロードして、変更を実装できます。

  1. sudo systemctl reload apache2

次に、サイトをブラウザにロードします。必ず使用してください。 https:// 最初に。

エラーが表示されるはずです。 これは自己署名証明書では正常です。 ブラウザは、サーバーのIDを確認できないことを警告しています。これは、証明書が既知の認証局によって署名されていないためです。 テスト目的および個人的な使用の場合、これは問題ない場合があります。 詳細または詳細情報をクリックして、続行することを選択できるはずです。

そうすると、ブラウザは it worked! メッセージ。

注:ブラウザがサーバーにまったく接続しない場合は、接続がファイアウォールによってブロックされていないことを確認してください。 使用している場合 ufw、次のコマンドはポートを開きます 80443:

  1. sudo ufw allow "Apache Full"

次に、別のものを追加します VirtualHost プレーンHTTPリクエストを処理し、HTTPSにリダイレクトするための構成のセクション。

ステップ4—HTTPをHTTPSにリダイレクトする

現在、この構成はポートでのHTTPS要求にのみ応答します 443. ポートでも応答することをお勧めします 80、すべてのトラフィックを強制的に暗号化する場合でも。 を設定しましょう VirtualHost これらの暗号化されていないリクエストに応答し、HTTPSにリダイレクトします。

前の手順で開始したのと同じApache構成ファイルを開きます。

  1. sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

下部に、別のを作成します VirtualHost ポートのリクエストに一致するようにブロックする 80. 使用 ServerName ドメイン名またはIPアドレスと再度一致するように指示します。 次に、 Redirect リクエストを照合してTLSに送信します VirtualHost. 末尾のスラッシュを必ず含めてください。

/etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:80>
	ServerName your_domain_or_ip
	Redirect / https://your_domain_or_ip/
</VirtualHost>

終了したら、このファイルを保存して閉じ、構成構文を再度テストして、Apacheをリロードします。

  1. sudo apachectl configtest
  2. sudo systemctl reload apache2

プレーンでサイトにアクセスすると、新しいリダイレクト機能をテストできます http:// 住所の前。 にリダイレクトする必要があります https:// 自動的。

結論

これで、自己署名TLS証明書を使用して暗号化された要求を処理し、暗号化されていないHTTP要求をHTTPSにリダイレクトするようにApacheを構成しました。

公開WebサイトにTLSを使用することを計画している場合は、ドメイン名を購入し、 Let’sEncryptなどの広くサポートされている認証局を使用することを検討する必要があります。

Let’s Encrypt with Apacheの使用の詳細については、 Ubuntu22.04チュートリアルでLet’sEncryptを使用してApacheを保護する方法をお読みください。