www.smiyasaka.com は、 2019 年2月から SSL 化し 通信を暗号化した方式で発信をしています。
●   httpd-2.4.6 の httpd.conf 編集・設定・起動   ●
(  「  ベーシック Web サーバー  」  を選択した時の設定  )
アクセス数 昨日 26 今日 18
  累計 21,146   


ここでのサーバ構築は、ファイアウォール有効( SELinux = enforcing  )を前提にして行っ
ています。
mod_ssl パッケージをインストールして apache2 の SSL 化も行ってみました。
SSL は、http・https 共用と http のアクセスを https にリダイレクトする自動変換の設定
もしています。
認証鍵の証明書の取得は、無償の Let's Encrypt を使用します。
無償の Let's Encrypt 関しての詳細は、[ CentOS-7-x86_64-DVD-1810 のインストー
ルとサーバ構築 ]の[ 10-3. apache2 の SSL 化の手順と httpd.conf、httpd_ssl.conf の
設定 ]を参照してください。
SSL のプロトコル HTTP/2.0 は、httpd-2.4.6 では、サポートされていませんので、
HTTP/2.0 にする場合は、httpd-2.4.41 をインストールします。
その詳細は、[ここをクリック]して確認してください。
      ( "コピペ" で簡単にサーバ構築が出来るよう心掛けた作りにしています。)
=================================================================================
	目	次
[○○○○]のクリックで、その内容が目次の下に表示、再度クリックで非表示になります。
本文を総て先読み非表示(折り畳み方式)し、目次のクリックで表紙する方式を採用しています。
                
---------------------------------------------------------------------------------
1. [ httpd-2.4.6 の httpd.conf 編集・設定・起動 ] [ httpd-2.4.6 の httpd.conf 編集・設定・起動 非表示 ]
2. [ SELinux を有効( enforcing )にした時のホームページへのポリシーの設定 ] [ SELinux を有効( enforcing )にした時のホームページへのポリシーの設定 非表示 ]
3. [ apache2 の SSL 化の手順と httpd.conf、ssl.conf の設定 ] [ apache2 の SSL 化の手順と httpd.conf、ssl.conf の設定 非表示 ]
---------------------------------------------------------------------------------
=================================================================================
  1. httpd-2.4.6 の httpd.conf 編集・設定・起動
=================================================================================
「ベーシックWebサーバー」の選択では、httpd-2.4.6-XX のバージョンが標準仕様になっ
ています。
XX は、2018年7月現在 80 に成っています。
apache の関連ディレクトリは、Red Hat と同じになっています。但し、ソースファイル
(tar)でインストールした時とは、保存先が異なっていますので注意してください。

      apacheの設定ファイル   : /etc/httpd/conf
      ssl.confの設定ファイル : /etc/httpd/conf.d
      apacheの実行ファイル   : /usr/sbin
      apacheのログファイル   : /var/log/httpd
      Webページ用HTMLファイル : /var/www/html
      Webで利用するCGI,SSIファイル : /var/www/cgi-bin

httpd-2.4.6 の httpd.conf には、LoadModule の行が有りませんが、LoadModule は、
56行目 Include conf.modules.d/*.conf の設定で、
                                     /etc/httpd/conf.modules.d/00-base.conf とそ
の他の conf の設定ファイルを読込む設定になっています。

その他の conf ファイル名

00-dav.conf, 00-lua.conf, 00-mpm.conf, 00-proxy.conf
00-ssl.conf, 00-systemd.conf, 01-cgi.conf, 10-fcgid.conf

下記は、基本機能のモジュール設定 00-base.conf の内容です。 不要な Module は、コメ
ントアウトして下さい。
00-base.confには、SSIのモジュールmod_cgid.soがありませんが、このモジュールは、
01-cgi.conf 内にあります。

[ httpd-2.4.6 基本機能 modules の設定ファイル ] の詳細は、
                                   [ここをクリック]してください。

下記は、sed コマンドで作成したモジュール設定 00-base.conf の編集コマンドです。
---------------------------------------------------------------------------------
モジュール名を指定してコメントアウトしています。( \. は、正規表現 )

sed -i -e "/mod_allowmethods\.so/s/^/#/
/mod_auth_digest\.so/s/^/#/
/mod_authn_anon\.so/s/^/#/
/mod_authn_dbd\.so/s/^/#/
/mod_authn_dbm\.so/s/^/#/
/mod_authn_socache\.so/s/^/#/
/mod_authz_dbd\.so/s/^/#/
/mod_authz_dbm\.so/s/^/#/
/mod_authz_owner\.so/s/^/#/
/mod_cache\.so/s/^/#/
/mod_cache_disk\.so/s/^/#/
/mod_dbd\.so/s/^/#/
/mod_dumpio\.so/s/^/#/
/mod_ext_filter\.so/s/^/#/
/mod_info\.so/s/^/#/
/mod_logio\.so/s/^/#/
/mod_rewrite\.so/s/^/#/
/mod_socache_dbm\.so/s/^/#/
/mod_socache_memcache\.so/s/^/#/
/mod_socache_shmcb\.so/s/^/#/
/mod_substitute\.so/s/^/#/
/mod_unique_id\.so/s/^/#/
/mod_userdir\.so/s/^/#/
/mod_vhost_alias\.so/s/^/#/" /etc/httpd/conf.modules.d/00-base.conf

---------------------------------------------------------------------------------

@ httpd.conf の編集

設定は、html, CGI, SSI をすべて同一の DocumentRoot で動作させるようにしています。
ログの出力フォーマットに関しては、任意に設定をしてください。

vi /etc/httpd/conf/httpd.conf

66行目あたり     ここは、apache のままでも、良いと思います。
                 apache で行くときには、apache としユーザーを作成してください。
User apache         グループの追加      groupadd apache
Group apache        ユーザーの追加      useradd -g apache apache
    ↓   ↓ 
User ○○○○    ○○○○は、ユーザー名
Group ○○○○   ( 私は、CentOS7 の登録ユーザー名を使用しています。)

    ※ 注意 ※   但し、DocumentRoot 内の User の名前をここに合わせてください。
                 合わせないと正しく動作しません。

86行目あたり

#ServerAdmin root@localhost           ○○○○@○○○○は、あなたのメールアドレス
ServerAdmin ○○○○@○○○○

95行目あたり

#ServerName www.example.com:80         ○○○○は、サーバ構築時に設定したホスト名
ServerName ○○○○:80          ここは、設定しないとエラーになります。

102〜105行目あたり この位置では不要なのでコメントアウトします。

#<Directory />
#    AllowOverride none
#    Require all denied
#</Directory>

119行目あたり

DocumentRoot "/var/www/html/"          ホームページプログラム保存先の指定
    ↓   ↓   ↓
DocumentRoot "/var/www/html/www.smiyasaka.com"
         www.smiyasaka.com は、私のサーバ機の場合です。貴方の環境に合わせてください。

124〜125行目あたりと127〜128行目あたり この位置では不要なのでコメントアウトします。

#<Directory "/var/www"/>
#    AllowOverride None
    # Allow open access:
#    Require all granted
#</Directory>

131行目あたりの<Directory "/var/www/html">は、そのままにして置きます。
       ここは、html 以下のディレクトリ内でSSIとCGIを有効にする為です。

145行目あたり Indexesを削除してSSIとCGIを有効にする。 
         Includes : SSI の利用を許可する。
         ExecCGI :  CGI の利用を許可する。
         -Indexes : インデックス表示を無効にする。
         MultiViews : 多言語対応のホームページでない時には不要です。

Options Indexes FollowSymLinks
    ↓   ↓   ↓
Options Includes FollowSymLinks ExecCGI
Options -Indexes

152行目あたり   htaccessの使用が出来る様に成ります。

#AllowOverride None
AllowOverride All

165行目あたり インデックスファイルを設定 index.cgi を追加する
               トップページが index.cgi でも実行する様にします。

   DirectoryIndex index.html
    ↓   ↓   ↓
   DirectoryIndex index.html index.cgi


172〜174行目あたり  

 ForceType text/html : HTML文書の拡張子 .htm .html をMIMEタイプの拡張子 text/html
                       として扱われます。
 SetOutputFilter INCLUDES : SSI処理のための mod_include モジュールで提供される
       INCLUDES フィルタを 出力フィルタとして挿入、拡張子 .html で SSI を有効にし
       ます。

<Files ".ht*">
    Require all denied
</Files>
    ↓   ↓   ↓
<Files *.html>
  ForceType text/html
  SetOutputFilter INCLUDES
</Files>


294行目あたり      #を取り perl の拡張子 .pl を追加する

AddHandler cgi-script .cgi
    ↓   ↓   ↓
AddHandler cgi-script .cgi .pl

305〜306行目あたり #を取り .htmlの追加  SSI の実行ファイルを .html をOKにします。

   AddType text/html .shtml
   AddOutputFilter INCLUDES .shtml
    ↓   ↓   ↓
   AddType text/html .shtml .html
   AddOutputFilter INCLUDES .shtml .html

316行目あたりコメントアウト これを忘れると、ホームページの表示で文字化けが発生します。
       ( 一般的に、ホームページのヘッダー部分で文字コードを指定している為です。)

AddDefaultCharset UTF-8
    ↓   ↓   ↓
#AddDefaultCharset UTF-8
AddDefaultCharset Off

353行目あたりコメントアウト  外部の conf は、読み込ませない。
   SSL を起動する時には、コメントアウトしない。
   コメントアウトしないと
   autoindex.conf, fcgid.conf, manual.conf, ssl.conf, userdir.conf, welcome.conf
   の各 .conf ファイルが読込されます。

#IncludeOptional conf.d/*.conf

以下は、最終行(354)に追加する。 

#--------------------------------------------------
# セキュリティ対策のため、最終行に追加しておきます。
# サーバ情報(バージョン)の非表示
ServerTokens Prod
# サーバ署名(バージョンとサーバ名)のOFF
ServerSignature Off

上記の設定では、SSIとCGI の使用がドキュメントルート /var/www/cgi-bin/ で有効にな
ります。
この場合、(ドキュメントルート)/cgi-bin/〇〇〇〇 は、ドキュメントルートは、すべて
 CGI プログラムとして /var/www/cgi-bin/〇〇〇〇 のパスで実行されます。

私のサーバ機では、.html と SSI, CGI のプログラムを保存実行させるドキュメントルート
を同じにしているのでコメントアウトしています。

250行目あたり コメントアウトする。

#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

258〜262行目あたり コメントアウトする。

#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Require all granted
#</Directory>

にしています。

---------------------------------------------------------------------------------
下記は、上記の各設定変更を sed コマンドで作成した httpd.conf の一括編集コマンドです。
編集時の行指定は、タイトル部を除いて一切していません。
---------------------------------------------------------------------------------
赤字部分は、貴方の環境に合わせてください。 先頭行は、conf のバックアップです。

cp  /etc/httpd/conf/httpd.conf /home/miyasaka/httpd.conf.bak; \
sed -i -e "1s/^#/# *** CentOS7\.4 httpd-2\.4\.6 Edited httpd\.conf  ***/g
#
s/User apache/User miyasaka/g
s/Group apache/Group miyasaka/g
s/ServerAdmin root@localhost/ServerAdmin sample@hotmail.co.jp/g
s/#ServerName www\.example\.com:80/ServerName Sample:80/g
#
#     102,104s/^/#/
/# <Directory> blocks below/,/# below/s/<Directory \/>/#<Directory \/>/g
/# <Directory> blocks below/,/# below/s/\    AllowOverride/#    AllowOverride/g
/# <Directory> blocks below/,/# below/s/\    Require/#    Require/g
/# <Directory> blocks below/,/# below/s/<\/Directory/#<\/Directory/g
#
#------------------------------------------------------------------
#   DocumentRoot の設定 ( ここは、コメントです。)
#------------------------------------------------------------------
s/DocumentRoot \"\/var\/www\/html\"/DocumentRoot\
 \"\/var\/www\/html\/www.sample.com\"/g

#    124,128s/^/#/
/<Directory \"\/var\/www\">/,/# Further relax access/s/^/#/
#------------------------------------------------------------------
#  /var/www/html以下 SSI,CGI の許可 ( ここは、コメントです。)
#------------------------------------------------------------------
#
/# for more information/,/# Controls who can/s/Options Indexes\
 FollowSymLinks/Options Includes FollowSymLinks ExecCGI/g
/# for more information/,/# Controls who can/s/AllowOverride\
 None/AllowOverride All\n\
    Options -Indexes/g
#
/DirectoryIndex index\.html/s/$/ index\.cgi/
#
s/<Files \"\.ht\*\">/<Files \*\.html>/g
/<Files \*\.html>/,/<\/Files>\/html/s/Require all\
 denied/ForceType text\/html\n\
\    SetOutputFilter INCLUDES/g
#-----------------------------------------------------
#   ここは、不要な場合は、削除して下さい。
#-----------------------------------------------------
s/# Alias \/webpath \/full\/filesystem\/path/Alias \/home\/\
 \"\/home\/miyasaka\/www\/\n\
    # \.cgi \.pl を有効にする。ここに書込まないと無効になる。\n\
    <Directory \"\/home\/miyasaka\/www\">\n\
        AllowOverride None\n\
        Options Includes FollowSymLinks ExecCGI\n\
        AddHandler cgi-script \.cgi \.pl\n\
        Require all granted\n\
    <\/Directory>/g
#-----------------------------------------------------
#   ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#   247s/^/#/
/ScriptAlias \/cgi-bin/s/^/#/
#   <Directory "/var/www/cgi-bin"> 〜 </Directory>
/<Directory \"\/var\/www\/cgi-bin\">/,/<\/Directory>/s/^/#/
#
#   削除する時は、ここまでして下さい。
#-----------------------------------------------------
s/#AddHandler cgi-script \.cgi/AddHandler cgi-script \.cgi \.pl/g
#  .shtml ---> .shtml .html
/shtml/s/$/ \.html/
#
#  AddDefaultCharset UTF-8
s/UTF-8/Off/g
/IncludeOptional conf\.d/s/^/#/" /etc/httpd/conf/httpd.conf

---------------------------------------------------------------------------------

A ホームページの書き込み先のフォルダを作成・所有者の変更・属性変更をします。
   ( /var/www/html/www.smiyasaka.com は、私の場合の DocumentRoot です。)

   mkdir -p /var/www/html/www.smiyasaka.com; \
   chown -R miyasaka:miyasaka /var/www/; \
   chmod 777 /var/www/html/www.smiyasaka.com

B 設定ファイル( httpd.conf )の文法エラーチェックコマンド

   httpd -t

   Syntax OKで終われば、OKです。

C  httpd を systemctl コマンドで起動する。

 ファイアウォールの有効状態では、この操作だけホームページを見ることは、できません。
 
    systemctl start httpd.service

    # が表示すれば、OKです。

D システム起動後も、有効にする。

   systemctl enable httpd.service

E http をサービス一覧に追加してファイアウォールの有効状態でホームページを見られる
   ようにします。この操作で、80番ポートも開放されます。

    firewall-cmd --zone=public --add-service=http  --permanent
    success が表示すれば OK

    firewall-cmd --reload
    success が表示すれば OK

    追加されたかの確認
    firewall-cmd --list-services

    下記の様に http が追加されていれば、OK
    dhcpv6-client ftp http ssh

F sendmail, fswebcam 等のインストールでパッケージ不足が指摘された時の処置

   yum -y groupinstall "Base" だけのインストールでは、「インストールまたは更新に
   利用できるいくつかの要求されたグループにパッケージがありません」のエラーが出
   ますので ベースだけでなく[その他の開発システム]も追加して下記の様に 
   yum  groupinstall を実行して下さい。
   yum -y groupinstall "Base" "Additional Development"

G httpd.service を起動した時に下記のようなエラーが出た時の対処方法

  1.  systemctl start httpd.service          <---- httpd.service を起動

  Job for httpd.service failed because the control process exited with error code.
  See "systemctl status httpd.service" and "journalctl -xe" for details.

  systemctl status httpd.service
  * httpd.service - The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; …………… )
    Active: failed (Result: exit-code) since ………………


  2.  httpd -t    <---- シンタックスエラーがあるか調べる。
    Syntax OK

  3.  systemctl stop httpd.service            <---- とりあえず httpd を止めます。

    これは、apacheデーモン停止が失敗したからなので、kill コマンドで強制的に該当プロ
    セスを停止する。

  4.  /usr/sbin/lsof -i | grep http          <---- 該当プロセスを調べます。

    ( 表示例 )
    httpd    1859     root    4u  IPv6  21597      0t0  TCP *:http (LISTEN)
    httpd    1861 miyasaka    4u  IPv6  21597      0t0  TCP *:http (LISTEN)
    httpd    1863 miyasaka    4u  IPv6  21597      0t0  TCP *:http (LISTEN)
    httpd    1864 miyasaka    4u  IPv6  21597      0t0  TCP *:http (LISTEN)
    httpd    1865 miyasaka    4u  IPv6  21597      0t0  TCP *:http (LISTEN)

  5.  kill -9 で該当プロセスをすべて強制停止します。

    kill -9 1859 1861 1863 1864 1865

  6. httpd.service を起動します。

    systemctl start httpd.service; \
    systemctl enable httpd.service

H Apache のバージョンを知るには。

   コマンド httpd -v を入りする。

   Server version: Apache/2.4.6 (CentOS)
   Server built:   Apr 12 2017 21:03:28


=================================================================================
  2. SELinux を有効( enforcing )にした時のホームページへのポリシーの設定
=================================================================================

※※※ 参考情報 ※※※
以下の設定が面倒な時は、ブール値 httpd_unified を on してみてください。
[ httpd_t に対して httpd の全タイプへの完全アクセスが許可されます (実行、 読み込み
書き込み)。]        私のこのホームページで試したら、ほぼ動作しました。
動作しない SSI・CGI プログラムは、ポリシーを httpd_unconfined_script_exec_t に設定
したら動作しました。
ちなみに動作しないプログラムには、OS のコマンドが入っていました。 
 [ 私のサーバ機で検証 ]

@ SELinux 有効化でポリシーの設定

私のホームページは、SELinux 有効化で httpd-2.4.6 を動作させ時、CGI, SSI が 100%
動作しませんでした。
試行錯誤の結果、以下の様にポリシーの許可設定等を行ったら、私のホームページの
 CGI, SSI は、100% 動作するようになりました。 

---------------------------------------------------------------------------------
※※※ 参考情報 ※※※

SELinux を有効( enforcing )で httpdー2.4.XX と httpdー2.4.6 の動作の仕方は、かなり違
いがあるようです。
httpd.conf の SSI・CGI 関係の設定は同じようにしていますが、SSI・CGI プログラムでか
なり動作しないプログラムがあり、その全てを ポリシー  httpd_unconfined_script_exec_t
にして対処しました。
httpdー2.4.XX の方が、SELinux を有効( enforcing )では、SSI・CGI プログラムは動作す
るようです。
これらは、私のスキルの範囲での感想です。
---------------------------------------------------------------------------------

1. httpd のブール値・ポリシーの設定
   httpd_ssi_exec[Web ページ内の SSI (server side include) 要素を実行可能にするか
   どうかを
   定義] は、SSI プログラムの動作結果を見て on / off してみてください。私個人として
   は、off のまますることを勧めます。  但し、ポリシーの設定は、忘れないように設定し
   てください。
   on にした時、私が試した環境ではどうしても動作しない SSI( perl プログラム )があり
   ました。
   off にしたら問題なく動作しました。

〇 httpd のブール値は、下記を on にしています。

 httpd_enable_cgi --> on        ← cgi の動作を有効にする。
 httpd_enable_homedirs --> on   ← ホームディレクトリへのアクセスを有効にする。
 httpd_sys_script_anon_write --> on  ← pubuic_content_rw_t タイプのラベルが付い
                              たファイルへの書き込みアクセスを HTTPスクリプトに許
                              可するかどうかを定義

   ブール値の設定コマンド例

   setsebool -P httpd_enable_homedirs 1   <----- ./home/へのジャンプをOKにする。

〇 設定したポリシー値

   ホームページ本体は、設定不要( 初期値 : httpd_sys_content_t )
   SSI・CGI プログラム         ---> httpd_sys_script_exec_t
   Read・Write するデータ      ---> httpd_sys_rw_content_t
   sh プログラム               ---> httpd_unconfined_script_exec_t
   SSI・CGI プログラム等で
       動作しないプログラム    ---> httpd_unconfined_script_exec_t

2. sh の起動は、パスを #!/bin/sh から #!/usr/bin/sh にすると動作します。
    Linux のコマンド等もフルパスを設定する必要があります。フルパスの確認は、コマ
    ンド which を使用して確認できます。
       ( 例 )
    which sensors
       /bin/sensors    <---  sensors のフルパスになります。

※※ 参考情報 ※※  semanage fcontext コマンドでのポリシーの設定順序について。
 ポリシーは、パスの上位から、下位に向かって行いましょう。 つまり、上位のディレク
 トリをまとめて設定し、次に下位のディレクトリ又はファイル単位でポリシーを設定して
 いきます。

A コマンド semanage fcontext と restorecon で恒久的にポリシーを設定する。

個別にポリシー設定をするのは、面倒なので私のホームページでは、SELinux を有効にす
るにあたってプログラムの配置を変更して SELinux のポリシーの設定を明確にし、極力一
括設定をできるようにしました。

変更点 1. perl のブログラムをすべて1つのホルダー内( ex. SSI, CGI )に格納。
       プログラムは、すべて CGI 及び SSI実行可能なポリシー httpd_sys_script_exec_t
       に設定。
       一部プログラム内で Linux のコマンドを実行しているプログラムは、SELinux 保護
       無効のポリシー  httpd_unconfined_script_exec_t に設定。

( 設定例 )
   フォルダ毎ポリシーを設定
semanage fcontext -a -t httpd_sys_script_exec_t\
 "/var/www/html/www.smiyasaka.com/SSI(/.*)?"
restorecon -R -vF /var/www/html/www.smiyasaka.com/SSI/
    ファイルを指定してポリシーを設定
semanage fcontext -a -t httpd_unconfined_script_exec_t\
   /var/www/html/www.smiyasaka.com/SSI/cgi_test.cgi
restorecon -vF /var/www/html/www.smiyasaka.com/SSI/cgi_test.cgi

変更点 2. テキストファイル(.txt)を> すべて1つのホルダー内( ex. TXT )に格納。
ファイルは、すべてホームページからの読み書き有効なポリシー httpd_sys_rw_content_t 
に設定。

( 設定例 )
semanage fcontext -a -t httpd_sys_rw_content_t\
 "/var/www/html/www.smiyasaka.com/TXT(/.*)?"
estorecon -R -vF /var/www/html/www.smiyasaka.com/TXT/

※※※ 参考情報 ※※※ 2018.10.10 追加

  特定のファイルの自分で作ったルールを全て削除したい場合は -d を使います。
  semanage fcontext -d -t [削除したいポリシー] /[ファイルのフルパス]
  semanage fcontext -E

  もしくは --deleteall で自作ルール全てを削除することもできます。
  semanage fcontext --deleteall
  semanage fcontext -E

  ポリシーの設定内容は、コマンド semanage fcontext -l -C、個別毎は、ls -lZ [ファ
  イルのフルパス] で確認できます。
=================================================================================
  3. apache2 の SSL 化の手順と httpd.conf、ssl.conf の設定
=================================================================================

  ※※※ 注意事項 ※※※ 

  下記の設定で使用している www.smiyasaka.comsmiyasaka.com は、私のドメイン名
  です。
  コマンドをコピーする時には、あなたのドメインに変更して使用してください。

  ※※※ 設定の基本方針 ※※※

  1. http:// のアクセスを https:// に自動変換させる。
  2. 秘密鍵は、無償の Let's Encrypt を使用する。
  3. SELinux は、有効( Enforcing )にしたまま使用する。

  ※※※ 設定の前提条件 ※※※

  1. 現在 http://(ドメイン) でホームページが公開されている事。
  2. httpd-2.4.6 のバージョンの apache2 を使用している事。
  3. epelレポジトリのインストールが完了している事。
  4. モデムのポート 80 と 443 が解放されている事。

=================================================================================

1. 無償の Let's Encrypt を使用して認証鍵の証明書を取得に関しての詳細( インストー
 ル・証明書の取得 )は、[ CentOS-7-x86_64-DVD-1810 のインストールとサーバ構築 ]の
 [ 10-3. apache2 の SSL 化の手順と httpd.conf、 httpd_ssl.conf の設定 ]を参照して
 ください。
 なお、この章での[ 認証鍵の証明書 ]の使用は、現用サーバ機のデータをコピーして使用
 しています。

---------------------------------------------------------------------------------
2. mod_ssl パッケージ と ssl.conf ファイルのインストール

  yum -y install mod_ssl

  インストール:
  mod_ssl.x86_64 1:2.4.6-88.el7.centos

  完了しました!

  インストールされた ssl.conf バスの確認

  find / -name *ssl.conf

  /etc/httpd/conf.d/ssl.conf
  /etc/httpd/conf.modules.d/00-ssl.conf

  ※ 参考 ※ ファイル 00-ssl.conf の内容は、下記の通りです。

  LoadModule ssl_module modules/mod_ssl.so

---------------------------------------------------------------------------------
3. Apache の SSLの設定 ssl.confファイルの編集

   DocumentRoot、ServerName、ErrorLog、CustomLog 等は、httpd.conf と同じ設定をし
   ます。

   原本は、保存しておきます。

   cp /etc/httpd/conf.d/ssl.conf /home/miyasaka/ssl.conf.bak

   vi /etc/httpd/conf.d/ssl.conf

---------------------------------------------------------------------------------
※※ 注意 ※※ 
    CustomLog logs、ErrorLog logs の設定は、httpd.conf で設定したと同じに設定して
    ください。
    ここでは、単に動作確認だけなので logs の設定を省略しています。
    設定は、httpd-2.4.38 の httpd-ssl.conf と同じにしています。

    59  #DocumentRoot "/var/www/html"
           ↓    ↓
        DocumentRoot "/var/www/html/www.smiyasaka.com"

    60  #ServerName www.example.com:443
           ↓    ↓
        ServerName 〇○○○○:443 

    71行目に以下を追加する

      Header set Strict-Transport-Security "max-age=315360000;includeSubDomains"

     上記の設定は、HSTS (HTTP Strict Transport Security) の導入になります。
                   
     これは、HTTPで接続した際に、強制的にHTTPSへリダイレクトし、以降のそのドメイ
     ンへの接続はすべてHTTPSとする機能です。  
                             315,360,000 秒 というのは 3,650 日間 (10年間)


    76行目に以下を追加する

        SSLProxyProtocol all -SSLv2 -SSLv3

    80  SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
           ↓    ↓
        SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!DH

   100  SSLCertificateFile /etc/pki/tls/certs/localhost.crt
            ↓    ↓
        #  証明書を指定する
    SSLCertificateFile "/etc/letsencrypt/live/www.smiyasaka.com/cert.pem"
  
   107  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
           ↓    ↓
        #  秘密鍵を指定する
    SSLCertificateKeyFile "/etc/letsencrypt/live/www.smiyasaka.com/privkey.pem"

   116  #SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
           ↓    ↓
        # 取得した中間証明書を指定
    SSLCertificateChainFile "/etc/letsencrypt/live/www.smiyasaka.com/chain.pem"
   
   175  <Files ~ "\.(cgi|shtml|phtml|php3?)$">
           ↓    ↓
    <FilesMatch "\.(cgi|shtml|html)$">

   178  <Directory "/var/www/cgi-bin">
           ↓    ↓
    <Directory "/var/www/html/www.smiyasaka.com">

        
   213  CustomLog logs/ssl_request_log \
   214            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b
           ↓    ↓
      コメントアウトして下記を追加します。 
                        ( 設定が長いので別 conf ファイルにしています。)
        Include conf/httpd-log.conf

        ※※     ここからは、SSL でも圧縮処理をしたい時に追加してください。※※

        #---------------------------------------------------------------
        # 転送データの圧縮設定(画像以外全て圧縮する)
        #            実際の圧縮率は、1 も 3 も大差ありません
        #---------------------------------------------------------------
        #
        Include conf/httpd-zgip.conf

   下記を追加します。

        #---------------------------------------------------------------
        # セキュリティ対策のため、最終行に追加しておきます
        # サーバ署名\(バージョンとサーバ名\)のOFF\n\
        ServerSignature Off

--------------------------------------------------------------------------

    〇 httpd-log.conf の新規作成

       空の httpd-log.conf ファイルを作成します。

       touch /etc/httpd/conf/httpd-log.conf

       vi コマンドで下記モジュール( log_config_module )の設定条件を書き込みます。

       vi /etc/httpd/conf/httpd-zgip.conf

       下記を貼り付け(コピペ)ます。
---------------------------------------------------------------------------
<IfModule log_config_module>
#
#==========================================================================
#       不要なログの記録をさせない設定
#==========================================================================
#
#      拡張子による制限
SetEnvIf Request_URI ".(gif)|(jpg)|(jpeg)|(png)|(bmp)|(ico)|(css)|(swf)$"\
 no-logfile
#
#内部からのアクセスをログに記録しない対策
# IPアドレスによる制限 ローカル
SetEnvIf Remote_Addr "192.168.0." no-logfile

# サーチエンジンのログは取らない。
SetEnvIf User-Agent "Gigabot" no-logfile
SetEnvIf User-Agent "Googlebot" no-logfile
SetEnvIf User-Agent "MJ12bot" no-logfile
SetEnvIf User-Agent "msnbot" no-logfile
SetEnvIf User-Agent "psbot" no-logfile
SetEnvIf User-Agent "TurnitinBot" no-logfile
SetEnvIf User-Agent "Yahoo! Slurp" no-logfile
SetEnvIf User-Agent "Zealbot" no-logfile

# ワームによる制限のログは取らない。
SetEnvIf Request_URI "default\.ida" no-logfile
SetEnvIf Request_URI "null\.ida" no-logfile
SetEnvIf Request_URI "NULL\.IDA" no-logfile
SetEnvIf Request_URI "cmd\.exe" no-logfile
SetEnvIf Request_URI "root\.exe" no-logfile
SetEnvIf Request_URI "Admin\.dll" no-logfile
SetEnvIf Request_URI "^/_mem_bin/" no-logfile
SetEnvIf Request_URI "^/_vti_bin/" no-logfile
SetEnvIf Request_URI "^/c/" no-logfile
SetEnvIf Request_URI "^/d/" no-logfile
SetEnvIf Request_URI "^/msadc/" no-logfile
SetEnvIf Request_URI "^/scripts/" no-logfile

# CGIディレクトリ
SetEnvIf Request_URI "^/cgi-bin/" no-logfile

# 巡回ロボットがアクセスする robots.txt
SetEnvIf Request_URI "robots\.txt" no-logfile

# 長いURLへの対処
SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" logfile
SetEnvIf Request_Method "(OPTIONS)" no-logfile
CustomLog "| /usr/local/apache2/bin/rotatelogs /usr/local/apache2/\
logs/www.smiyasaka.com_access_log_%Y%m%d 86400 540" combined env=!no-logfile
#
</IfModule>

---------------------------------------------------------------------------
    〇 httpd-zgip.conf の新規作成

       空の httpd-zgip.conf ファイルを作成します。

       touch /etc/httpd/conf/httpd-zgip.conf

       vi コマンドで下記モジュール( mod_deflate )の設定条件を書き込みます。

       vi /etc/httpd/conf/httpd-zgip.conf

       下記を貼り付け(コピペ)ます。
---------------------------------------------------------------------------
<IfModule mod_deflate.c>
     #---------------------------------------------------------------
     # 転送データの圧縮設定(画像以外全て圧縮する)
     #            実際の圧縮率は、1 も 3 も大差ありません
     #---------------------------------------------------------------
     # 圧縮レベル 1 に設定
             DeflateCompressionLevel 1
     #
            # 全てを圧縮する設定
            SetOutputFilter DEFLATE
            #
            # gzip圧縮に対応していない古いブラウザを除外
            # Netscape 4.x has some problems...
     # 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮
            BrowserMatch ^Mozilla/4 gzip-only-text/html
            # Netscape 4.06-4.08 have some more problems
     # 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない
            BrowserMatch ^Mozilla/4\.0[678] no-gzip
            # MSIE masquerades as Netscape, but it is fine
     # 送信先ブラウザがMSIEの場合は全て圧縮する
            BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
            #
            # 画像以外全て圧縮する
            # Don't compress images
            SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
            #
            # Make sure proxies don't deliver the wrong content
     # プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しないようにする
            Header append Vary User-Agent env=!dont-vary
     # html や css, js, javescript などは個別指定
            AddOutputFilterByType DEFLATE text/plain
            AddOutputFilterByType DEFLATE text/html
            AddOutputFilterByType DEFLATE text/xml
            AddOutputFilterByType DEFLATE text/css
            AddOutputFilterByType DEFLATE text/js
            AddOutputFilterByType DEFLATE text/javascript
            AddOutputFilterByType DEFLATE application/xhtml+xml
            AddOutputFilterByType DEFLATE application/xml
            AddOutputFilterByType DEFLATE application/rss+xml
            AddOutputFilterByType DEFLATE application/atom_xml
            AddOutputFilterByType DEFLATE application/js
            AddOutputFilterByType DEFLATE application/javascript
            AddOutputFilterByType DEFLATE application/x-javascript
            AddOutputFilterByType DEFLATE application/x-httpd-php
        #
        # 圧縮率の確認用ログ設定
        # 不要になったら、# で無効にしておく事。
        # Deflateが有効になっているか確認するログの出力
        #
 DeflateFilterNote Input instream
 DeflateFilterNote Output outstream
 DeflateFilterNote Ratio ratio
 LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate
 CustomLog logs/deflate_log deflate
</IfModule>
---------------------------------------------------------------------------------
4. conf.modules.d/00-base.conf ファイルの編集

   以下 2カ所コメントを解除します。

   vi /etc/httpd/conf.modules.d/00-base.conf

  〇 https:// のアクセスを https:// に変換させる処理の追加の為、mod_rewrite.so を
     有効にします。

  48 #LoadModule rewrite_module modules/mod_rewrite.so
           ↓    ↓
     LoadModule rewrite_module modules/mod_rewrite.so

  〇 mod_socache_shmcbを有効化

  54 #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
           ↓    ↓
     LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

---------------------------------------------------------------------------------
5. Apache の SSL の設定 httpd.conf ファイルの編集

   下記1ヶ所を変更します。

   〇 Include で「ssl.conf」の読み込みを行わせる設定を追加します。。

   #IncludeOptional conf.d/*.conf
           ↓    ↓
   Include /etc/httpd/conf.d/ssl.conf

---------------------------------------------------------------------------------
6. http:// のアクセスを https:// に自動変換させる処理( 301リダイレクト )の追加

   .htaccess ファイルを作成し、下記コマンドを書込み、ドキュメントルート上に書込み
   ます。

   ( LAN 内 IP アドレスでのサーバ機へのアクセスも可能になります。)

   --------------------------------------------------------------
   <IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTPS} off
   RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
   </IfModule>
   --------------------------------------------------------------

  ※※※参考情報 ※※※ 
       上記の設定をしなかった時には、http:// と https:// 共用になります。

---------------------------------------------------------------------------------
7. エラーのチェック

   httpd -t

  「 Syntax OK 」と表示されればOKです。

---------------------------------------------------------------------------------
8. SELinux 対策  httpd からの秘密鍵のR/Wを有効にする。

semanage fcontext -a -t httpd_sys_rw_content_t\
 "/etc/letsencrypt/live/www.smiyasaka.com(/.*)?"; \
restorecon -R -vF /etc/letsencrypt/live/www.smiyasaka.com/

           上記設定の確認

   ls -Z /etc/letsencrypt/live/www.smiyasaka.com/

---------------------------------------------------------------------------------
9. apache2 を起動して https://(サーバ機の LAN 内 IP アドレス)でアクセス

   systemctl start httpd

   Windows PC の Web で、サーバ機の LAN 内 IP アドレスを使いアクセスする。

   (サーバ機の LAN 内 IP アドレス)
   
   この結果、セキュリティの警告が表示すれば OK です。
   アクセス先の URL が、 https://(サーバ機の LAN 内 IP アドレス)に成っている事を
   確認してください。
---------------------------------------------------------------------------------
10. httpd.conf と ssl.conf の編集用 sed コマンド
    ただし、各ドキュメントルートは、私のサーバ機の場合なので、使用するときには、
    変更してください。
 ※ 注意 ※ 
  表示の都合で二行表示にしている箇所がありますので注意してください。 使用時には、
    一行にしてください。
    下記コマンドは、httpd-2.4.XX と HTML データ、SSL鍵データ等を共用したサーバ機の
    設定です。
    httpd-2.4.6 の起動は、systemctl start httpd で httpd-2.4.XX の起動は、
    systemctl start apache2 で行っています。
    -----------------------------------------------------------------------------

   (1) ssl.conf の編集コマンド

sed -i -e "1s/^#/# *** CentOS7\.7 httpd-2\.4\.6 SSL Edited ssl\.conf  ***/
s/#DocumentRoot \"\/var\/www\/html\"/DocumentRoot\
 \"\/var\/www\/html\/www\.smiyasaka\.com\"/
s/#ServerName www\.example\.com:443/ServerName 〇〇〇〇:443/
#
s/ErrorLog logs\/ssl_error_log/ErrorLog \"|\
 \/usr\/local\/apache2\/bin\/rotatelogs \/usr\/local\/apache2\/\
logs\/www\.smiyasaka\.com_error_log_\%Y\%m\%d 86400 540\"/
#
/SSLEngine on/aHeader set Strict-Transport-Security\
 \"max-age=315360000;includeSubDomains\"
#
/SSLProtocol/a\SSLProxyProtocol all -SSLv2 -SSLv3
/SSLCipherSuite HIGH/s/^/#/
/SSLCipherSuite HIGH/a\SSLCipherSuite HIGH:MEDIUM:\!MD5:\!RC4:\!3DES:\!DH
s/SSLCertificateFile \/etc\/pki\/tls\/certs\/localhost\.crt/\
#  証明書を指定する\n\
SSLCertificateFile\
 \"\/etc\/letsencrypt\/live\/www\.smiyasaka\.com\/cert\.pem\"/g
#
s/SSLCertificateKeyFile \/etc\/pki\/tls\/private\/localhost\.key/\
#  秘密鍵を指定する\n\
SSLCertificateKeyFile\
 \"\/etc\/letsencrypt\/live\/www\.smiyasaka\.com\/privkey\.pem\"/g
#
s/#SSLCertificateChainFile \/etc\/pki\/tls\/certs\/server-chain\.crt/\
# 取得した中間証明書を指定\n\
SSLCertificateChainFile\
 \"\/etc\/letsencrypt\/live\/www\.smiyasaka\.com\/chain\.pem\"/g
#
s/cgi|shtml|phtml|/cgi|shtml|html|/
#
s/\/var\/www\/cgi-bin/\/var\/www\/html\/www\.smiyasaka\.com/g
#
/CustomLog/s/^/#/
s/<\/VirtualHost>/#\n\
#==========================================================================\n\
#       不要なログの記録をさせない設定\n\
#==========================================================================\n\
#\n\
Include conf\/httpd-log\.conf\n\
\n\
#------------------------------------------------------------------\n\
#   転送データの圧縮設定 ( ここは、コメントです。)\n\
#------------------------------------------------------------------\n\
# 転送データの圧縮設定(画像以外全て圧縮する)\n\
# 圧縮レベル 1\n\
#\n\
Include conf\/httpd-zgip\.conf\n\
#---------------------------------------------------\n\
# セキュリティ対策のため、最終行に追加しておきます。\n\
# サーバ署名\(バージョンとサーバ名\)のOFF\n\
ServerSignature Off\n\
#\n\
<\/VirtualHost>/" /etc/httpd/conf.d/ssl.conf

   (2) SSL 有効時の httpd.conf の編集コマンド

sed -i -e "1s/^#/# *** CentOS7\.7 httpd-2\.4\.6 SSL Edited httpd\.conf  ***/
s/User apache/User 〇〇〇〇/g
s/Group apache/Group 〇〇〇〇/g
s/ServerAdmin root@localhost/ServerAdmin 〇〇〇〇@hotmail.co.jp/g
s/#ServerName www\.example\.com:80/ServerName 〇〇〇〇:80/g
#     102,104s/^/#/
/# <Directory> blocks below/,/# below/s/<Directory \/>/#<Directory \/>/g
/# <Directory> blocks below/,/# below/s/\    AllowOverride/#    AllowOverride/g
/# <Directory> blocks below/,/# below/s/\    Require/#    Require/g
/# <Directory> blocks below/,/# below/s/<\/Directory/#<\/Directory>/g
#
#------------------------------------------------------------------
#   DocumentRoot の設定 ( ここは、コメントです。)
#------------------------------------------------------------------
#
s/DocumentRoot \"\/var\/www\/html\"/DocumentRoot\
 \"\/var\/www\/html\/www.smiyasaka.com\"/g

#    124,128s/^/#/
/<Directory \"\/var\/www\">/,/# Further relax access/s/^/#/
#------------------------------------------------------------------
#   SSI, CGI の設定 ( ここは、コメントです。)
#------------------------------------------------------------------
#
/# for more information/,/# Controls who can/s/Options Indexes\
 FollowSymLinks/Options Includes FollowSymLinks ExecCGI/g
/# for more information/,/# Controls who can/s/AllowOverride\
 None/AllowOverride All\n    Options -Indexes/g
#
/DirectoryIndex index\.html/s/$/ index\.cgi/
#
s/<Files \"\.ht\*\">/<Files \*\.html>/g
/<Files \*\.html>/,/<\/Files>\/html/s/Require all\
 denied/ForceType text\/html\n\
\    SetOutputFilter INCLUDES/g
#
#------------------------------------------------------------------
#   Alias が不要な場合は、削除して下さい。( ここは、コメントです。)
#------------------------------------------------------------------
#
s/# Alias \/webpath \/full\/filesystem\/path/Alias \/home\/\
 \"\/home\/miyasaka\/www\/\"\n\
    # \.cgi \.pl を有効にする。ここに書込まないと無効になる。\n\
#    <Directory \"\/home\/miyasaka\">\n\
    <Directory \"\/home\/miyasaka\/www\">\n\
        AllowOverride None\n\
        Options Includes FollowSymLinks ExecCGI\n\
        AddHandler cgi-script \.cgi \.pl\n\
        Require all granted\n\
    <\/Directory>/
#-------------------------------------------------------------------
/ScriptAlias \/cgi-bin/s/^/#/
#
#     351,355s/^/#/
/<Directory \"\/var\/www\/cgi-bin\">/,/<\/Directory>/s/^/#/
#
s/#AddHandler cgi-script \.cgi/AddHandler cgi-script \.cgi \.pl/g
#
/\.shtml/s/$/ \.html/
#
#  AddDefaultCharset UTF-8 --> Off
s/UTF-8/Off/
#
s/#IncludeOptional conf\.d\/*\.conf/Include \/etc\/httpd\/conf\.d\/ssl\.conf/
#------------------------------------------------------------------
\$a#---------------------------------------------------\n\
# セキュリティ対策のため、最終行に追加しておきます。\n\
# サーバ署名\(バージョンとサーバ名\)のOFF\n\
ServerSignature Off" /etc/httpd/conf/httpd.conf

---------------------------------------------------------------------------------

TOPへ戻る