開発者ドキュメント

CentOS8でApacheの自己署名SSL証明書を作成する方法

序章

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

このガイドでは、CentOS8マシン上のApacheWebサーバーで自己署名SSL証明書を作成して使用する方法を示します。

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

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

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

前提条件

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

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

手順1—mod_sslをインストールする

まず、SSL暗号化をサポートするApacheモジュールであるmod_sslをインストールする必要があります。

dnfコマンドを使用してmod_sslをインストールします。

  1. sudo dnf install mod_ssl

パッケージングのバグのため、デフォルトのSSL証明書とキーを適切に生成するためにApacheを1回再起動する必要があります。そうしないと、'/etc/pki/tls/certs/localhost.crt' does not exist or is emptyの読み取りエラーが発生します。

  1. sudo systemctl restart httpd

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

ステップ2—SSL証明書を作成する

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

opensslコマンドを使用して、SSLキーと証明書ファイルを作成できます。

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

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

プロンプトに適切に記入します。 最も重要な行は、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 []:webmaster@example.com

作成した両方のファイルは、/etc/pki/tlsディレクトリの適切なサブディレクトリに配置されます。 これは、この目的のためにCentOSによって提供される標準ディレクトリです。

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

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

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

このチュートリアルでは、新しい最小構成ファイルを作成します。 すでにApache<Virtualhost>をセットアップしていて、SSLを追加するだけでよい場合は、SSLで始まる構成行をコピーして、[を切り替える必要があります。 80から443へのX183X]ポート。 次のステップでポート80を処理します。

/etc/httpd/conf.dディレクトリで新しいファイルを開きます。

  1. sudo vi /etc/httpd/conf.d/your_domain_or_ip.conf

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

/etc/httpd/conf.d/your_domain_or_ip.conf
<VirtualHost *:443>
    ServerName your_domain_or_ip
    DocumentRoot /var/www/ssl-test
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt
    SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key
</VirtualHost>

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

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

それでは、DocumentRootを作成し、テスト目的でHTMLファイルをその中に入れましょう。

  1. sudo mkdir /var/www/ssl-test

テキストエディタで新しいindex.htmlファイルを開きます。

  1. sudo vi /var/www/ssl-test/index.html

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

/var/www/ssl-test/index.html
<h1>it worked!</h1>

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

ファイルを保存して閉じ、次のように入力して、Apache構成の構文エラーを確認します。

  1. sudo apachectl configtest

警告が表示される場合がありますが、出力がSyntax OKで終わっている限り、続行しても問題ありません。 これが出力の一部でない場合は、ファイルの構文を確認して、再試行してください。

すべてが順調になったら、Apacheをリロードして、構成の変更を取得します。

  1. sudo systemctl reload httpd

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

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

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

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

  1. sudo firewall-cmd --permanent --add-service=http
  2. sudo firewall-cmd --permanent --add-service=https
  3. sudo firewall-cmd --reload

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

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

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

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

  1. sudo vi /etc/httpd/conf.d/your_domain_or_ip.conf

下部に、別のVirtualHostブロックを作成して、ポート80の要求に一致させます。 ServerNameディレクティブを使用して、ドメイン名またはIPアドレスを再度照合します。 次に、Redirectを使用してすべてのリクエストを照合し、SSLVirtualHostに送信します。 末尾のスラッシュを必ず含めてください。

/etc/httpd/conf.d/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 httpd

アドレスの前にプレーンなhttp://を付けてサイトにアクセスすると、新しいリダイレクト機能をテストできます。 https://に自動的にリダイレクトされます。

結論

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

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

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

モバイルバージョンを終了