kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

CentOS7.1 64bit Apache2.4.16 SSLを使用

CentOS7.1 64bitのApache2.4.16で、SSLを使用する方法を以下に示します。

※ここで使用しているApacheのインストールについては、当サイトのCentOS7 64bitにApache2.4をRPMからインストールのページをご覧ください。

※CentOS6 64bitをご使用の場合は、当サイトのCentOS6 64bit Apache2.4 SSLを使用のページをご覧ください。

以下の各コマンドで、プロンプトが「#」で開始しているものはrootユーザーでの実行、「$」で開始しているものは一般ユーザーでの実行となります。

Apache2.4.16でSSLを使用

Apache2.4.16でSSLを使用する場合の設定を以下に示します。

秘密鍵と証明書の作成

SSLを使用する際には、秘密鍵と証明書が必要となります。秘密鍵と証明書の作成方法については、当サイトのCentOS7 64bit OpenSSLを使用したSSL用の秘密鍵と証明書の作成のページをご覧ください。

mod_sslのインストール

ApacheでSSLを使用する際には、mod_sslが必要となります。

以下のコマンドを実行して、mod_sslのインストールを行います。

# rpm -Uvh mod_ssl-2.4.16-1.x86_64.rpm

CentOS7 64bitにApache2.4をRPMからインストールのページで作成したRPMを使用しています。

Apacheの設定ファイルの編集

ApacheでSSLが利用できるようにするには、Apacheの設定ファイル「/etc/httpd/conf/httpd.conf」で、mod_sslの有効化と、mod_sslのインストールファイルに含まれているSSLの設定ファイル「/etc/httpd/conf/extra/httpd-ssl.conf」の読み込みを行う必要があります。

mod_sslを有効化するには、以下の設定のコメントアウトを解除します。

#LoadModule ssl_module lib64/httpd/modules/mod_ssl.so
↓
LoadModule ssl_module lib64/httpd/modules/mod_ssl.so

「httpd-ssl.conf」の読み込みを行うには、以下の設定のコメントアウトを解除します。

#Include /etc/httpd/conf/extra/httpd-ssl.conf
↓
Include /etc/httpd/conf/extra/httpd-ssl.conf

Apacheのサービスの起動時に、以下のようなエラーになってしまう場合、

Starting httpd: AH00526: Syntax error on line 92 of /etc/httpd/conf/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).
[失敗]

「httpd-ssl.conf」では、セッションのキャッシュに関する設定があるのですが、デフォルトではその方法にshmcbというのを使用しており、それにはmod_socache_shmcbを有効化する必要があります。

「httpd-ssl.conf」では、以下のような設定が行われています。

SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"

mod_socache_shmcbを有効化するには、「httpd.conf」で以下の設定のコメントアウトを解除します。

#LoadModule socache_shmcb_module lib64/httpd/modules/mod_socache_shmcb.so
↓
LoadModule socache_shmcb_module lib64/httpd/modules/mod_socache_shmcb.so

尚、mod_socache_shmcb.soは、httpdに含まれています。

ApacheのSSLの設定ファイルの編集

ApacheのSSLの設定ファイル「/etc/httpd/conf/extra/httpd-ssl.conf」で、使用する秘密鍵と証明書を指定します。

秘密鍵を指定するには、以下の設定を変更します。

SSLCertificateKeyFile "/etc/httpd/conf/server.key"
↓実際の秘密鍵のパスを指定
SSLCertificateKeyFile "/xxxxx/server.key"

証明書を指定するには、以下の設定を変更します。

SSLCertificateFile "/etc/httpd/conf/server.crt"
↓実際の証明書のパスを指定
SSLCertificateFile "/xxxxx/server.crt"

尚、公的な認証局で証明書を作成した場合で、中間CA証明書等を使用する場合は、その認証局のホームページに設定方法が公開されているかと思いますので、そちらをご参照ください。

秘密鍵や証明書にはApacheからアクセスが可能な必要があるのですが、独自に作成したディレクトリに配置して、chownやchmodを使用してアクセス権の設定を行ってもアクセスが拒否されてしまうときは、SELinuxによるアクセス制御が有効になっていることが原因の可能性があります。

SELinuxによるアクセス制御については、当サイトのCentOS7 64bit SELinuxによるアクセス制御のページをご覧ください。

Apacheへの外部からのアクセスを許可

HTTPSでの外部からのアクセスは、iptablesによってデフォルトでは拒否されています。CentOS7になってiptablesの設定には、firewalldを使用するようになっています。

firewalldによるHTTPSでの外部アクセス許可の設定については、当サイトのCentOS7 64bit firewalldによるアクセス制御のページをご覧ください。

HTTPSでのアクセスのみを可能としたい場合

ある特定のディレクトリ配下へのアクセスはHTTPSのみとしたい場合、mod_rewriteを使用して制御することができます。

mod_rewriteによる制御は、以下のようにアクセスをHTTPSのみにしたいディレクトリに「.htaccess」ファイルを配置して、設定を記載することで行うことができます。

DocumentRoot
|- index.html ※サイトのトップページ
|- ssl ※HTTPSでのアクセスのみとしたいディレクトリ
   |- .htaccess
   |- aaa.html

まず、mod_rewriteを使用できるようにするため、Apacheの設定ファイル「/etc/httpd/conf/httpd.conf」で、以下の2つの設定を行います。

mod_rewriteを有効化するため、以下のコメントアウトを解除します。

#LoadModule rewrite_module lib64/httpd/modules/mod_rewrite.so
↓
LoadModule rewrite_module lib64/httpd/modules/mod_rewrite.so

「.htaccess」でmod_rewriteの設定を可能とするため、以下のような設定を行います。

<Directory "/xxxxx/html">
:(略)
    AllowOverride FileInfo
    #以下のように「.htaccess」で全ての設定を可能としてもよい。
    #AllowOverride All
:(略)
</Directory>

※「/xxxxx/html」は、設定対象のディレクトリになります。

mod_rewriteを使用可能にできたら、「.htaccess」に以下のように記載します。

RewriteEngine On

RewriteCond %{HTTPS} !=on

RewriteCond %{ENV:HTTPS} !=on

RewriteRule .* http://%{SERVER_NAME}/ [R=301,L]
  • 「RewriteEngine On」により、mod_rewriteによるURLの書き換えを有効化します。
  • 「RewriteCond %{HTTPS} !=on」により、HTTPS以外のアクセスをURLの書き換えの対象にします。
  • 「RewriteCond %{ENV:HTTPS} !=on」は、このサイトで使用しているレンタルサーバーで共有SSLを使用した場合、「%{HTTPS}」には「on」と設定されなくなっており、変わりに「%{ENV:HTTPS}」に「on」と設定されるため、合わせて指定するようにしているものになります。

    ※PHPを利用可能にし、phpinfo関数で確認してみたところ、このサイトで紹介している手順で構築した環境では、「Apache Environment」という区分に「HTTPS」が「on」となる表示がされ、レンタルサーバーでは、「Environment」という区分に「HTTPS」が「on」となる表示がされるようになっていました。

    ※尚、レンタルサーバーでは、「Apache Environment」という区分自体が存在せず、HTTPSでのアクセスはプロキシ経由となるようで、「Environment」の「SERVER_PORT」の値は「80」となっていました。

  • 「RewriteRule .* http://%{SERVER_NAME}/ [R=301,L]」により、HTTPS以外でのアクセスの場合は、サイトのトップページにHTTPでアクセスするようにリダイレクトします。

この設定により、例えばこのサイトでHTTPSのみでアクセスさせたい「https://www.kakiro-web.com/ssl/aaa.html」というページがあり、ここに「http://www.kakiro-web.com/ssl/aaa.html」とHTTPでアクセスされた場合は、「http://www.kakiro-web.com/」にリダイレクトされるようになります。

Apache2.4.16でSSLを使用については、以上です。

Apacheに関するおすすめの書籍

当サイトの書籍紹介ページで、Apacheに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

Webセキュリティに関するおすすめの書籍

当サイトの書籍紹介ページで、Webセキュリティに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。