SSLによるSecureWWWサーバの構築(CentOS編)


ここでは、CentOS 標準の Apache を SSL 対応にします。 基本的には、RedHat と変わりありません。
後半のクライアント認証は、認証局で署名されたクライアント用証明書を持たない端末(ブラウザ)からのアクセス制限をするためのものなので、特別にセキュリティを確保するとき以外は不要です。
なお、Apache のインストールと基本的な設定は、こちらを参考に済ませて置いてください。

■SSL 関係の設定

CentOS の Apache の SSL 関係の設定は httpd.conf 内の「Include conf.d/*.conf」でIncludeされている /etc/httpd/conf.d/ssl.conf で行います。
おやじが、設定を変更した項目は以下のとおりです。ここでは、単純に通常のポート (80番) でサービスしているドキュメントを、そのまま SSL でアクセスできるイメージで設定していきます。おやじは、実際には バーチャルホストを動作させているので、若干設定が違いますが基本的に大きな差異はありません。(青字は削除、赤字は追加、緑字は変更したものです。)

  1. バーチャルサーバの設定

    サーバ名と管理者のメールアドレスをデフォルトサーバと同じように変更するとともに、アクセスログをデフォルトサーバと同様のカテゴリで収集するようにした。なお、ssl.confの一番最後に ssl_request_log があるので、不要ならコメントアウトする。

    # General setup for the virtual host, inherited from global configuration
    #DocumentRoot "/var/www/html"
    #ServerName www.example.com:443
    ServerName www.aconus.com:443
    ServerAdmin webmaster@mail.aconus.com

    # Use separate log files for the SSL virtual host; note that LogLevel
    # is not inherited from httpd.conf.
    ErrorLog logs/ssl_error_log
    #TransferLog logs/ssl_access_log
    LogLevel warn
    SetEnvIf Remote_Addr 192.168.1. homelog nolog
    SetEnvIf Request_URI "~akirin" akirinlog nolog
    SetEnvIf Request_URI "default.ida" wormlog nolog
    SetEnvIf Request_URI "root.exe" wormlog nolog
    SetEnvIf Request_URI "cmd.exe" wormlog nolog
    SetEnvIf Request_URI "Admin.dll" wormlog nolog
    CustomLog logs/ssl_home_log common env=homelog
    CustomLog logs/ssl_akirin_log combined env=akirinlog
    CustomLog logs/ssl_worm_log common env=wormlog
    CustomLog logs/ssl_access_log combined env=!nolog


  2. 証明書の指定

     こちらで作成するサーバ用証明書をここで指定します。

    #SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
    #SSLCertificateFile /etc/httpd/conf/ssl.crt/server-dsa.crt
    SSLCertificateFile /usr/local/certs/server.crt


  3. 秘密鍵の指定(同上)

    #SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
    #SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server-dsa.key
    SSLCertificateKeyFile /usr/local/certs/server.key


以上で、https://www.aconus.com/~oyaji/ と SSL でのアクセスが可能となります。アクセス時に SSL の alert が出るのは、他の自己認証サイトをアクセスした時と同じです。
クライアント側のこの警告に対する対策については、Internet Exploler と Netscape Navigator で異なります。こちらを参照願います。

■クライアント認証関係の設定

クライアント認証関係の設定は、単に通信を暗号化(httpsでのアクセス)するだけなら不要です。
このクライアント用証明書によるクライアント認証を導入すると、予め認証局で署名されたクライアント用証明書を持たない端末がアクセスしても、接続そのものが拒否されるのでセキュリティ的にかなり強固になります。反面、クライアント毎に証明書を発行することになるので、運用はかなり面倒になりますが、セキュリティとのバータなので止むを得ません。
このようなクライアント認証は、一般的に企業などで導入されており、具体例としてはwebを使用して外勤の営業マンが社外から社内システムにアクセスできるシステムや株取引のシステムなどに導入されています。このようなシステムの場合、不特定多数にアクセスされるとApacheの認証やアプリ認証だけではセキュリティが甘くなるため、アクセスレベルでセキュリティを強化するためにクライアント認証を導入します。
クライアント認証は、サーバ全体やバーチャルサーバ、ディレクトリ単位で行うことができますが、ここではバーチャルサーバで行うことを前提とします。従って、上記の ssl.conf に追加設定していきます。特定ディレクトリだけを対象にするなら、下記の2項目の SSLVerifyClient/SSLVerifyDepth を対象ディレクトリディレクティブ内に記述すればよい。

  1. CA証明書へのパスとファイル名の設定

    #SSLCACertificatePath /etc/httpd/conf/ssl.crt
    #SSLCACertificateFile /usr/share/ssl/certs/ca-bundle.crt
    SSLCACertificatePath /usr/local/certs/demoCA
    SSLCACertificateFile /usr/local/certs/demoCA/cacert.pem

  2. クライント認証の指定とルート認証局までの階層設定

    自己署名しており、CA によって直接署名された証明書だけを信用するので、SSLVerifyDepth は 1 に設定する。自己署名しており

    #SSLVerifyClient require
    #SSLVerifyDepth 10
    SSLVerifyClient require
    SSLVerifyDepth 1


Top Pageへ