CentOS & Apacheの環境へLet’s Encryptの無料SSL証明書をインストールし、SSL(https)通信を実現する手順をメモします。 環境:CentOS 7.8, Apache/2.4.6. 以前のCentOS環境構築に関する記事でCentOSのインストールと基本的な設定までが完了しました。折角、作成した環境。利用しない手はありません。本記事では、以前の記事で構築したCentOSの環境を利用してウェブサーバーであるApacheの ... 今回は、構築したウェブサーバーのHTTP通信を暗号化してセキュアな通信を行うための機能である「HTTPS」の導入までを紹介します。, HTTPSはウェブの通信で利用されているHTTP通信をSSLという機能を利用して暗号化を行います。現在、GoogleのブラウザであるchromeだとHTTPSに対応していないウェブサイトには警告が出力される他、信頼されないサイトとしてSEOにも影響があります。上記のような理由から、Apacheのインストール時にはHTTPS機能を有効にすることをオススメします。, HTTPS通信に利用するサーバー証明書は今まで、有償のものを利用することが一般的でしたが、2016年4月スタートしたSSL通信の普及を行う「Let's Encrypt」というプロジェクトで発行している無償の証明書を利用することもできます。本記事では「Let's Encrypt」を利用してのHTTPS設定を行っていきます。, Let's Encryptはシスコ(Cisco Systems)、Akamai、電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体がスポンサーとして支援していますので、信頼できるものです。, HTTPSを設定する環境は、Apache httpdをインストールする手順を紹介した以下の記事で詳しく紹介していますが、ここでもまとめておきます。, 基本的なOSとインストールされているApache httpdの環境は以下の通りです。, この環境を前提にApache httpdのHTTPS設定を進めていきます。この構築手順について詳細を確認したい場合には、上記の記事を参照して下さい。, Let's Encryptを利用するためにはホスト名(FQDN:ホスト名にドメイン名がついたもの、以下ホスト名と記載がある時はFQDN)が正引き(ホスト名からIPアドレスを参照)できる必要があります。本記事では、ホスト名として「www.testdom.com」を利用する前提としています。こちらはAレコードとしてDNSにIPを登録していますので、ホスト名の正引きができる状態になっています。, 設定を行う前に、ホスト名の正引きができることを確認します。Linux/Windows のどちらでも確認ができますので、利用している環境に合わせて行って下さい。, ホスト名の正引き設定はDNSサーバーやレジストラによって異なるため、本記事では割愛しています。, Linuxではhostコマンドによるホスト名の確認が可能です。使い方はhostコマンドにホスト名を付けて実行します。 以下が実行例になります。尚、hostコマンドはデフォルトでインストールされていないため、yumコマンドでbind-utilsをインストールします。, bind-utilsがインストールされると、hostコマンドが利用できるようになります。以下のように実行します。, 指定したホスト名に対して、IPアドレスが表示されれば、確認は完了です。ホスト名が見つからないという警告が表示された場合には、ご利用のDNS設定を見直して下さい。ここでは正常に確認ができたという前提で先へ進めていきます。, ホスト名の正引きはWindowsでも確認が出来ます。ウェブサーバーへbind-utilsをインストールしたくない場合などは、ご利用のWindowsから確認してください。Windowsの場合は、コマンドプロンプトを開いて、以下のように実行します。, HTTPS通信ではHTTPで利用している接続ポート80番とは異なる接続ポートである443番を利用します。以前の記事ではHTTPS用の接続ポートはオープンしていないため、事前に接続ポートをオープンする設定を行います。尚、ファイアウォールはCentOSのデフォルトであるfirewall-cmdを利用している前提となります。, 設定を行う前に、現状の設定を確認していきます。HTTPSは全て開放するため、インターフェイスに適用されている「public」ゾーンの設定を確認します。, 項目3-1. Your certificate and chain have been saved at: fullchain.pemはウェブサーバーとしてnginx、もしくはApache httpdのバージョンが2.4.8以降でないと利用できません。, CentOS 8 のApache HTTP Server環境にcertbotでLet's Encrypt SSLを利用する方法, CentOS 8にMySQL互換のデータベース MariaDB 10をインストールする, CentOS 8のApache環境にPHP 7.2をインストールして使えるようにする手順, CentOS 8をブラウザで管理するための「Cockpit」有効化と基本的な使い方, CentOS 7のvsftpdでセキュアなFTPSが利用できるFTPサーバーを構築する, CentOS 7のSamba4でライセンス不要 Windows向けファイルサーバーを構築, サーバー構築の基本 CentOS Linux 8のインストール後に設定する12の項目, サーバー構築の基本 CentOS Linux 8をインストールしてベース環境を構築する, VirtualBoxをWindows10にインストールしてCentOS 7の仮想マシンを作成する, サーバー構築の基本 CentOS 7系最終バージョンのCentOS 7.7をインストールする, python2-certbot-apache.noarch : The apache plugin for certbot, certbot.noarch : A free, automated certificate authority client. でEPELレポジトリが有効になりましたので、再度「certbot」パッケージを確認します。, 今度は上記のようにcertbotに関するパッケージが表示されました。この中でサーバー証明書の発行に必要なパッケージは以下の2つになります。, この2つのパッケージをインストールします。先ずはcertbotからインストールを行います。 "yum install"コマンドでcertbotパッケージをインストールします。, エラーの出力がなく「完了しました!」と表示されれば、certbotパッケージは正常にインストールされています。, つづいてcertbotのapache用プラグインである「python2-certbot-apache」をインストールします。"yum install"コマンドでpython2-certbot-apacheパッケージをインストールします。, エラーの出力がなく「完了しました!」と表示されれば「python2-certbot-apache」パッケージはインストールされています。, システムにcertbotパッケージがインストールされたことを確認します。インストールされているパッケージは"yum list"コマンドで確認できます, 結果として上記のように「certbot」「python2-certbot-apache」が表示されればパッケージはインストールされています。 続いてcertbotがインストールされた場所を確認します。インストールされた場所(パス)を確認するためには"which"コマンドを利用します。以下のように実行することでインストールパスを確認できます。, この結果からcertbotが「/usr/bin」以下にインストールされたことが確認できます。これでcertbotのインストールが正常に終了したことが確認できました。, 項目5. 必要なものをインストール # yum install openssl # yum install mod_ssl OpenSSLとmod_sslをインストール。 既にインストールされている場合はスキップ. CentOS & Apacheの環境へLet’s Encryptの無料SSL証明書をインストールし、SSL(https)通信を実現する手順をメモします。, viインサートモードでファイルの任意の箇所へ以下の内容を追記する。 CentOS7へのapacheのインストールと初期設定 . Congratulations! でサーバー証明書を作成するための「certbot」パッケージインストールまで終わりましたので、本章ではcertbotを利用してサーバー証明書を作成する手順を紹介していきます。, Let's Encryptによるサーバー証明書はcertbotコマンドで作成します。httpdに設定したドキュメントルートが”/home/www/html/”でFQDNのホスト名が”www.testdom.com”の場合、以下のように実行します。, もしwwwのホスト部分が無い「testdom.com」でもアクセスを行う場合は、以下のようにtestdom.comも追加します。, コマンドを実行すると、以下のように対話型のウィザードが起動します。 幾つかの質問がありますので、回答します。, 「Congratulations!」と表示されればサーバー証明書の作成は完了です。サーバー証明書の保存場所は上記にも記載されているように"/etc/letsencrypt/live/www.testdom.com/"ディレクトリになります。(FQDN名のディレクトリは自動的に作成されます。), 実際に作成されたサーバー証明書ファイルを確認してみます。作成ディレクトリへ移動します。, このファイルのうち、今回の環境で利用するものは「cert.pem」「chain.pem」「privkey.pem」の3ファイルになります。fullchain.pemはウェブサーバーとしてnginx、もしくはApache httpdのバージョンが2.4.8以降でないと利用できません。本環境ではApache httpdのバージョンが2.4.6のため利用しません。これでサーバー証明書の作成は完了です。, 項目6.でサーバー証明書ファイルの作成まで完了しましたので、ウェブサーバーであるApache httpdへSSLの設定を行います。, HTTPS通信に関する設定は”/etc/httpd/conf.d”ディレクトリに含まれる ssl.confに行います。先ずはこのファイルをバックアップします。 ディレクトリに移動して、ファイルを確認します。, ファイルのバックアップが完了しましたので、ssl.confを編集していきます。セキュリティなどを考えると、幾つかの設定変更が必要になりますが、その辺りは別の記事に纏めてありますので、そちらを参照してください。 本記事では、HTTPS通信を行うために必要な最低限の設定のみを行う前提としています。変更点は3点で、それぞれサーバー証明書ファイル、秘密鍵ファイル、中間証明書のパスを変更します。 テキストエディタで、ssl.confを開きます。, に変更します。 上記3点のパラメータを変更後に、ファイルを保存します。変更した設定ファイルに誤りが無いかを"httpd"コマンドで確認します。 確認は以下のように実行します。, 「Syntax OK」と表示されれば、設定ファイルには問題ありません。 これでssl.confファイルの編集は完了です。, エラーが出力されなければ、httpdは正常に再起動しています。 再起動後にstatusを確認します。, 出力結果から、httpdは正常に起動していることが確認できます。これで設定は完了です。引き続き、HTTPS通信の動作確認を行います。, 項目7.