目的
目的は、ディストリビューションに同梱されているパッケージを使用して、RedHatLinuxでSSL/TLSをサポートするApacheWebサーバーをセットアップすることです。
オペレーティングシステムとソフトウェアのバージョン
- オペレーティングシステム: Red Hat Enterprise Linux 7.5
- ソフトウェア: Apache httpd、mod_ssl
要件
Webサーバーへの特権アクセス。
難易度
簡単
規約
- # –指定されたLinuxコマンドは、rootユーザーとして直接、または
sudo
を使用して、root権限で実行する必要があります。 コマンド - $ –通常の非特権ユーザーとして実行されるLinuxコマンドを指定
はじめに
Webサーバーのユースケースは非常に一般的であるため、すべてではないにしてもほとんどのディストリビューションがリポジトリにパッケージを提供するため、Webサーバーのインストールは最新のディストリビューションでは非常に簡単です。 Apache httpdは、インターネットの大部分で使用されている信頼性の高いWebサーバーであり、その機能を拡張するために多くのモジュールを利用できます。
最近の技術ニュースは、セキュリティ違反、データの盗難/漏洩、および可能な場合は暗号化を使用したいという衝動の高まりに満ちています。
HTTPSを使用すると、サーバー側とクライアント側の両方で一定のコンピューティングオーバーヘッドが発生しますが、使用しない場合は、双方向に送信されるすべてのデータがクリアテキストであり、ネットワークを通過するときにトラフィックを読み取ることができるすべての人が読み取ることができます。
クライアントがユーザー名とパスワード(一般的な認証方法)を使用してログインし、サイトの管理者を含む自分のデータにアクセスできるWebサービスがあるとします。このサービスをhttp経由で提供すると、このすべての情報を記録できるため、誰かがすべてのログイン資格情報を取得し、サイトの管理者としてログインし、実際の管理者をロックアウトしたり、訪問者に有害なコンテンツを公開したりする可能性があります。
ブラウジング中に暗号化を使用する機能は、すべての主要な最新のブラウザに長い間組み込まれており、同じ方法で暗号化をWebサーバーで長年利用できます。
SSL/TLSをサポートするApacheWebサーバーをインストールします
必要なパッケージをインストールするには、rootとして実行するだけです:
# yum install httpd mod_ssl -y
サーバーにすでにhttpdがインストールされている場合は、mod_ssl
をインストールするだけで済みます。 、必要なすべての構成はインストーラーによって
行われます。ただし、この場合はhttpdを再起動する必要があるため、sslモジュールをロードできることに注意してください。ディストリビューションに同梱されているパッケージを使用することで、Red HatはオペレーティングシステムとWebサーバーの両方に対して適切にテストされたアップデートを提供するため、私たちの生活をはるかに楽にすることができます。もちろん、アップデートを受け取るにはサブスクリプションが必要です–ただし、オペレーティングシステムを最新の状態に保つには、更新が必要です。
httpdサーバーを有効にして起動します
systemdを使用すると、次のコマンドでWebサーバーを有効にして起動できます。
# systemctl enable httpd && systemctl start httpd
このようにして、httpdサービスは起動のたびにsystemdによって自動的に開始されます。
インストールとステータスを確認する
systemdを使用してWebサーバーのステータスを確認できます:
# systemctl status httpd -l
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2018-07-07 21:35:33 CEST; 1 weeks 4 days ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 1292 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
Tasks: 9
CGroup: /system.slice/httpd.service
├─ 1292 /usr/sbin/httpd -DFOREGROUND
├─13271 /usr/sbin/httpd -DFOREGROUND
├─13272 /usr/sbin/httpd -DFOREGROUND
├─13273 /usr/sbin/httpd -DFOREGROUND
├─27508 /usr/sbin/httpd -DFOREGROUND
├─27509 /usr/sbin/httpd -DFOREGROUND
├─27510 /usr/sbin/httpd -DFOREGROUND
├─27511 /usr/sbin/httpd -DFOREGROUND
└─27512 /usr/sbin/httpd -DFOREGROUND
Jul 07 21:35:32 web.foobar.com systemd[1]: Starting The Apache HTTP Server...
Jul 07 21:35:33 web.foobar.com systemd[1]: Started The Apache HTTP Server.
mod_sslが正しくインストールされていることを確認するには:
# rpm -q mod_ssl
mod_ssl-2.4.6-80.el7.x86_64
そして、モジュールとしてhttpdサーバーにロードされます:
# apachectl -M | grep ssl
ssl_module (shared)
証明書の使用法
mod_sslパッケージをインストールすると、モジュールはそれ自体をhttpdサーバーに追加するため、次回の起動時にロードされます。
デフォルトでは、ブラウザとの暗号化された接続を確立するために使用される自己署名証明書が生成されます。
ブラウザを開き、https経由でサーバーをポイントします:
今のところこれを無視して、セキュリティ例外を追加し(「この例外を永続的に保存する」を設定しないでください)、続行します。デフォルトのページが表示されます。 Red Hatの場合、これは次のようになります。
RedHatLinuxにインストールされたhttpdWebサーバーのデフォルトのホームページURLの横にある感嘆符に注意してください(他のブラウザでは異なる警告が表示される場合があります)。
これで、自己署名証明書を使用してWebサーバーがhttps上で稼働し、
/var/www/html
で公開されたコンテンツを提供する準備が整いました。 、RedHat上のWebサーバーのデフォルトのコンテンツルート。
Webサーバーとブラウザ間の接続が暗号化されるようになったため、トラフィックのなりすましが困難になりました(
これは、ログイン資格情報の盗用などに使用できます)。終わりましたか?ある意味、目標を達成しました。
ブラウザがサーバー証明書を有効であると識別できないという事実は、この証明書を信頼することを明示的に決定した場合、サーバーとの暗号化通信の使用を妨げるものではありません。これは、少数のユーザーと少数のWebサーバーしかない小規模な(ホーム)システムに適している場合があります。Webサーバーのクライアントである必要があるブラウザーやその他のブラウザーで自己署名証明書を受け入れる必要があります。世界中のブラウザは、これらのサーバーによって提供されるコンテンツを決して見るべきではありません。
ただし、この自己署名証明書は(他の証明書と同様に)期限が切れ、
使用するには更新する必要があることに注意してください。期限切れの証明書は、ブラウザによって無効と見なされます。これは、その上の有効な証明書チェーンによって有効であることが証明できない証明書と同じです。
自己署名(またはその他の)証明書の有効期限が切れる時期を確認するには、SSLモジュールの構成ファイルを参照してファイルシステムで証明書を見つける必要があります。
# grep SSLCertificateFile /etc/httpd/conf.d/ssl.conf | grep -v "#"
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
次に、opensslを使用して有効期限を取得します:
# openssl x509 -enddate -noout -in /etc/pki/tls/certs/localhost.crt
notAfter=Jul 10 07:06:17 2019 GMT
証明書の有効期限が切れた後(またはその前に)、証明書を更新するか、クライアントが信頼する証明書に置き換える必要があります。
自己署名証明書とは対照的に、より洗練されたアプローチは、クライアントがすでに信頼しているCA(認証局)からの証明書を要求して使用することです。
その上の信頼されたルートCA)、またはグローバルに信頼されたCAから直接。
取得した証明書をデフォルトの代わりに使用するには、以下のパラメーターが、証明書ファイル、
証明書キー、およびSSL証明書に署名したCAの証明書をそれぞれ指している必要があります。ファイルはウェブサーバーにコピーする必要があり、
ウェブサーバーを実行しているオペレーティングシステムユーザー(Red Hatのデフォルトインストールの場合はapacheユーザー)が読み取り可能である必要があります。これらのパラメーターは、上記のssl.conf
にあります。 。
SSLCertificateFile /etc/httpd/custom-cert/server-ssl.crt SSLCertificateKeyFile /etc/httpd/custom-cert/server-ssl.key SSLCACertificateFile /etc/httpd/custom-cert/ca.crt
httpトラフィックをhttpsにリダイレクトする
httpsを介してサービスを提供するようになったため、コンテンツの全部または一部を提供しながら、httpsの使用を強制できます。
例では、非常に安全であり、着信クライアントをhttpsにリダイレクトするためにのみhttpを使用します。
httpsのみを話したいのに、なぜhttpだけを聞くのか、という疑問が生じる可能性があります。私たちのサイトのことを聞いたばかりのエンドユーザーが、プロトコルを含まない友人からURLを取得したとします。今日まで、明示的に指定されていない場合、ほとんどのブラウザはデフォルトでhttpプロトコルを使用しています。 http経由での配信を停止した場合、ブラウザがhttp経由でサーバーにアクセスしようとすると、httpsなしでURLを入力するとエラーメッセージが表示されます。
すべての着信httpリクエストをhttpsにリダイレクトするには、/etc/httpd/conf.d
の下にファイルを作成します。 わかりやすい名前で、たとえばredirect_http.conf
次のコンテンツ(web.foobar.comはサイトのDNS名):
<VirtualHost _default_:80> Servername web.foobar.com Redirect permanent / https://web.foobar.com/ </VirtualHost>
そして、Webサーバーを再起動します。コマンドラインからwgetを使用して(WebサーバーのSSL証明書を信頼するホストから)リダイレクトが正しく機能するかどうかをテストできます:
$ wget http://web.foobar.com/
--2018-07-19 16:13:01-- http://web.foobar.com/
Resolving web.foobar.com (web.foobar.com)... 10.9.8.7
Connecting to web.foobar.com (web.foobar.com)|10.9.8.7|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://web.foobar.com/ [following]
--2018-07-19 16:13:01-- https://web.foobar.com/
Connecting to web.foobar.com (web.foobar.com)|10.9.8.7|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 240 [text/html]
Saving to: ‘index.html’
100%[====================================================================================>] 240 --.-K/s in 0s
2018-07-19 16:13:01 (7.04 MB/s) - ‘index.html’ saved [240/240]
出力にはhttp301応答が表示され、wgetクライアントがリダイレクトに従ってhttpsプロトコルを使用して接続する方法を確認できます。デフォルトでは、sslトラフィックはhttpトラフィックとは異なるログファイルに記録されます。上記の
リクエストは/var/log/httpd/ssl_access_log
に記録されています。 :
10.9.8.8 - - [19/Jul/2018:16:13:01 +0200] "GET / HTTP/1.1" 200 240
結論
これで目的は達成され、httpsを使用してクライアントと通信するWebサーバーをセットアップし、着信httpリクエストもhttpsにリダイレクトします。