サーバーでファイヤーウォール(firewall)を有効にしている場合、 で確認した”public”ゾーンの接続許可サービスにHTTPSを追加します。追加は以下のように行います。, 「success」と表示されれば設定は完了です。設定を反映するためにファイアウォールの設定を読み込みます。, 「services」の項目に「https」が追加されていることが確認できれば、確認は完了です。 ここまででファイアウォールの接続許可は完了しました。, HTTPS通信を行うためには、Apache httpdにSSLモジュールのインストールが必要になります。本章ではSSL通信用モジュールである「mod_ssl」のインストールと確認を行います。, パッケージを検索する"yum search"コマンドで「mod_ssl」パッケージ名の確認を行います。, 上記の結果から、SSL通信用モジュールのパッケージ名が"mod_ssl"あることが確認できました。このパッケージをインストールします。, mod_sslパッケージのインストールを行います。以下のように"yum install"コマンドを実行します。, エラーの出力がなく「完了しました!」と表示されれば、mod_sslは正常にインストールされています。, CentOSに「mod_ssl」がインストールされたことを確認します。インストールされているパッケージは"yum"コマンドで確認できます。以下のようにyumを実行することで、mod_sslパッケージがインストールされていることを確認できます。, 続いてmod_sslがApache httpdのモジュールとして登録されていることを確認します。登録されているモジュールを確認するためには"httpd"コマンドを利用します。以下のように実行することでモジュールを確認できます。, 表示された結果に「ssl_module」が含まれれば、httpdへモジュールとして登録されています。, ここまででmod_sslのインストールと確認が完了しましたので、続いてインストールしたmod_sslを有効にするためにhttpdを再起動します。CentOSでは7系からsystemctlコマンドでサービスの起動・停止を行います。httpdは以下のようにsystemctlコマンドを実行することで再起動できます。, エラーが出力されなければ、httpdは正常に再起動しています。 systemctlコマンドにstatusオプションを付けて実行することで、起動したサービスの状態について、詳細な情報を取得することができます。以下が実行例です。, 上記では分かり難いかもしれませんが、丸(●)の部分が正常な起動状態の場合、緑色で表示されます。また、サービスの状態を示す「Active」の項目に「running」と表示されていることから、httpdが起動していることが確認できます。 ここまでの手順で「mod_ssl」のインストールと確認が完了しました。, 前章まででApache httpdへのSSLモジュールインストールまで完了しました。本章ではHTTP通信をHTTPSへ変更するためのサーバー証明書(サーバーの身分証明書だと思って下さい)発行に関する設定を行います。本環境では「Let's Encrypt」を利用してサーバー証明書を発行します。, Let's Encryptを利用するためのアプリケーションは「certbot」という名前でパッケージ化されています。まずはcertbotパッケージを導入する前の準備を行います。デフォルトの状態ではCentOS7の場合、certbotアプリケーションを探してみても見つかりません。, これはCentOSがデフォルト持っているアプリケーションの保存先リスト(通常、レポジトリと呼ばれます。)にはcertbotパッケージが含まれていないためです。certbotはEPEL(Extra Packages for Enterprise Linux)レポジトリに含まれています。EPELレポジトリを利用するためには、レポジトリのインストールと有効化が必要になります。, EPELレポジトリは通常のパッケージと同じく"yum install"コマンドでインストールできます。以下のように実行することでインストールが開始されます。, エラーの出力がなく「完了しました!」と表示されればEPELレポジトリは正常にインストールされています。, EPELレポジトリがインストールされたことを確認します。インストールされているパッケージは"yum list"コマンドで確認できます。以下のようにyumを実行することで、EPELレポジトリがインストールされていることを確認します。, 応答結果から、EPELレポジトリパッケージがインストールされていることが確認できました。 EPELがレポジトリリストに追加されていることを確認します。レポジトリのリストは"yum repolist"コマンドで確認できます。以下のように実行することで、利用が可能なレポジトリの一覧が表示されます。, 応答結果にepelが表示されればEPELレポジトリを利用する準備は完了しています。, 項目5-1. サービスとしてhttpsが許可されていない可能性があります。, 【CentOS7】ファイヤーウォール(firewall)にSSL通信を許可する方法. 【CentOS & Apache】Let’s Encryptの無料SSL証明書をインストールする, # yum -y install certbot python2-certbot-apache, Facebook で共有するにはクリックしてください (新しいウィンドウで開きます), 【Docker入門 】④ Dockerfileからイメージを作成する(Download), 【Docker入門 】③ Dockerコンテナからイメージ(Docker image)を作成する, 【PHP】session_set_cookie_params関数でセッションクッキーを安全な設定にする, 【Docker入門 】② Webサーバ構築 & ホストのディレクトリ共有(ボリュームマウント), (Y)es/(N)o:Let’s Encryptパートナーにメールアドレスを公開 (必要なければNを入力). オレオレ証明書を作る. Apacheの設定ファイルを編集する。 でサーバー証明書を作成するための「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. (Let’s Encryptの無料SSL証明書の有効期限は通常3ヶ月です), 「このサイトにアクセスできません」と出た場合 CentOS7 Apatch2.4.6. まででサーバー証明書の組み込みと動作確認までが完了しました。このままの状態で基本的な設定は完了していますが、サーバー証明書は有効期間というものがあります。 通常、サーバー証明書は1年から3年間ぐらいの有効期限で取得しますが「Let's Encrypt」の場合には有効期限が90日間と決まっています。90日が経過すると有効期限が切れてしまい、サーバー証明書が無効である警告がブラウザに表示されてしまいます。 これではHTTPSを設定した意味がなくなるため、有効期限を定期的に更新する設定を紹介していきます。, Let's Encryptでは証明書の更新手順は用意されています。具体的にはcertbotコマンドに"renew"オプションを付けて実行します。更新設定を行う前に更新が実行できるかをテストします。 テストは"--dry-run"オプションを付けることで行うことができます。以下のように実行します。, 更新テストで正常に更新できることが確認できると「Congratulations, all renewals succeeded.」と表示されます。これで証明書の更新確認は完了です。, 更新コマンドの実行が確認できましたので、定期的に実行するように"crontab"にコマンドを追記します。 crontabはrootユーザーで実行します。変更は"crontab"コマンドを以下のように実行します。, 実行するとエディタが起動します。以下をcrontabに追記します。 "--deploy-hook"オプションは、サーバー証明書の更新が行われた場合のみ実行するコマンドを指定できます。更新時にはApache httpdを再起動して、更新された証明書を読み込む必要があるためApache httpd再起動用のコマンドを指定します。, 毎日3:00と5:00に更新コマンドを実行する場合の記載です。(2回実行するように記載しているのは、1回目の実行が失敗した場合のため)もし他の時刻にしたい場合には、3と5の部分を変更したい数値にします。変更後にはファイルを保存します。 crontabの設定後に設定した内容を確認します。crontabに設定されている内容の確認は, HTTPS接続はウェブサイトの主流になりつつあります。以前のようにHTTPで通信されるサイトは信頼性に乏しいと判断されブラウザに警告まで表示されるようになりました。是非、ここでHTTPSの設定を試していただきサイトを信頼性のあるものへと変更してみて下さい。, レムシステムでは、ブログで紹介した設定ができない場合や、利用中のシステムについての相談を受け付けています。お困りの点がございましたら、お気軽にご相談ください。, SIerでIT系インフラの設計と構築を経験したのちに独立、「レムシステム株式会社」を設立する。インフラ系エンジニア歴20年の経験を活かしてITに関わる課題解決や効率化に取り組む日々を送っている。, 2019年版 Windows Server 2012 がパッチ適用後に再起動を繰り返す障害への対応, ウェブ系エンジニアには必須!CentOS 8のApache httpdにHTTP/2を設定, […] ・Rem System Techlog「常時SSL化待ったなし!CentOS 7 と Apacheに Let’s Encryptで信頼性の高いHTTPSを設定する」・CPIスタッフブログ「httpからhttpsにリダイレクト、www有無のリダイレクト方法(mod_re […], >8-2.更新コマンドの定期実行設定 ># crontbab -l crontab の誤記のように見えたので、コメントいたします。, AS様 コメント頂き、有難うございます。 参考になったというコメント、大変うれしく思います。 また、crontabの誤記についてもご指摘の通りになりますので、修正を行いました。, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。.