2008年12月03日

バーチャルドメインのSSL

通常のSSLの設定は何度か経験があり、苦労した記憶は特に無い。

しかし、今回はバーチャルドメイン環境の片方のドメインのみSSLの適用というタスクがあった。

まあ、今までと変わらないだろうという何気ない気持ちだったのだが、ちょっと勝手が違ったのでメモ。

せっかくなので、バーチャルドメインの設定から記録しよう。

まず、バーチャルドメインとは

1台のサーバ(もしくは1つのIPアドレス)に複数のドメインを割り当て、同時に異なるサービスを提供すること。

今回の設定例は以下

WEBサーバー: Apache2.2.8
IPアドレス:192.168.0.XX
ドメイン1:www.aaa.jp
ドメイン2:www.bbb.jp

で、www.aaa.jp は、動的ページでTomcatと連携。www.bbb.jp は、静的ページ。

では、早速バーチャルドメインの設定。

1、apacheの配置ファイルの修正(httpd.conf)

  ・ServerAdminをコメントにする。

  # ServerAdmin: Your address, where problems with the server should be
  # e-mailed. This address appears on some server-generated pages, such
  # as error documents. e.g. admin@your-domain.com
  #
  ServerAdmin you@example.com
     ↓↓↓↓↓↓↓↓↓
  #ServerAdmin you@example.com


  ・ServerNameをコメントにする。

  # ServerName gives the name and port that the server uses to identify itself.
  # This can often be determined automatically, but we recommend you specify
  # it explicitly to prevent problems during startup.
  #
  # If your host doesn't have a registered DNS name, enter its IP address here.
  #
  ServerName www.example.com:80
     ↓↓↓↓↓↓↓↓↓
  #ServerName www.example.com:80


  ・DocumentRoot再配置。

  # DocumentRoot: The directory out of which you will serve your
  # documents. By default, all requests are taken from this directory, but
  # symbolic links and aliases may be used to point to other locations.
  #
  DocumentRoot "/usr/local/apache2/htdocs"
     ↓↓↓↓↓↓↓↓↓
  #DocumentRoot "/usr/local/apache2/htdocs"
  DocumentRoot "/usr/local/apache2/hoge" ←好きなフォルダーを指定


  ・Directory "/usr/local/apache2/htdocs"部をすべてコメントにする。
  <Directory "/usr/local/apache2/htdocs">
  ……
  </Directory>
     ↓↓↓↓↓↓↓↓↓
  #<Directory "/usr/local/apache2/htdocs">
  #……
  #</Directory>


  ・Directory部を再配置

  # 以下を追加する
  # 基本ホームパージ「http://127.0.0.1/」を表示されないようにするには以下dumyを追加する
  <Directory "/usr/local/apache2/hoge/dummy">
   Options FollowSymLinks Includes
   AllowOverride None
   Order allow,deny
   Allow from all
  </Directory>

  # 基本ドメインのフォルダー設定
  <Directory "/usr/local/apache2/hoge/web1">
   Options FollowSymLinks Includes ExecCGI MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all
  </Directory>

  # 第2ドメインのフォルダー設定
  <Directory "/usr/local/apache2/hoge/web2">
   Options FollowSymLinks Includes ExecCGI MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all
  </Directory>


  ・HostnameLookupsを有効にする。

  # 以下を追加する
  # ログファイルのIPアドレス部をホストの名前で保存する為
  HostnameLookups On


  ・ScriptAliasをコメントにする。

  # ScriptAlias: This controls which directories contain server scripts.
  # ScriptAliases are essentially the same as Aliases, except that
  # documents in the target directory are treated as applications and
  # run by the server when requested rather than as documents sent to the
  # client. The same rules about trailing "/" apply to ScriptAlias
  # directives as to Alias.
  #
  ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
   ↓↓↓↓↓↓↓↓↓
  #ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"


  ・Directory "/usr/local/apache2/cgi-bin"部をすべてコメントにする。

  <Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
  </Directory>
     ↓↓↓↓↓↓↓↓↓
  #<Directory "/usr/local/apache2/cgi-bin">
  #  AllowOverride None
  #  Options None
  #  Order allow,deny
  #  Allow from all
  #</Directory>


  ・LanguagePriorityを配置する

  # 文字化け防止にjaを先頭に移動する
  # LanguagePriorityが配置されていない場合は、下記内容を追加。
  LanguagePriority ja en da nl et fr de el it ko no pl pt pt-br ltz ca es sv tw
  
  
  ・AddDefaultCharsetをコメントにする。

  #文字化け対策でコメントにする
  #AddDefaultCharset ISO-8859-1
  
  
  ・AddHandlerを再配置

  #コメントを解除し .pl を追加する
  # これを解除する事によりcgiプログラムが使用出来る様になる
  #AddHandler cgi-script .cgi
   ↓↓↓↓↓↓
  AddHandler cgi-script .cgi .pl
  
  
  ・NameVirtualHostを再配置

  # IPアドレスを記入する
  # NameVirtualHostが配置されていない場合は、下記内容を追加。
  NameVirtualHost 192.168.0.XXX:80
  
  
  ・VirtualHostを配置

  # 以下を追加する
  <VirtualHost 192.168.0.XXX:80>
    ServerAdmin root@dummy.com
    DocumentRoot /usr/local/apache2/hoge/dummy
    ServerName www.dummy.com
    ErrorLog logs/dummy-error_log
    CustomLog logs/dummy-access_log common
  </VirtualHost>

  # 動的ページのサービス部(Tomcatと連携している)
  <VirtualHost 192.168.0.XXX:80>
    ServerAdmin you@aaa.jp
    ServerName www.aaa.jp
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/
    ServerAlias www.aaa.jp
    ServerAlias aaa.jp
    ErrorLog logs/aaa.jp-error_log
    CustomLog logs/aaa.jp-access_log common
  </VirtualHost>

  <VirtualHost 192.168.0.XXX:80>
    ServerAdmin you@bbb.jp
    DocumentRoot /usr/local/apache2/hoge/web2
    ServerName www.bbb.jp
    ServerAlias www.bbb.jp
    ServerAlias bbb.jp
    ErrorLog logs/bbb.jp-error_log
    CustomLog logs/bbb.jp-access_log common
  </VirtualHost>
  
  
2、フォルダー、htmlファイルを用意する。

[root@localhost /]# cd /usr/local/apache2/
[root@localhost apache2]# mkdir hoge
[root@localhost apache2]# cd hoge
[root@localhost e-shop]# mkdir dummy
[root@localhost e-shop]# mkdir web1
[root@localhost e-shop]# mkdir web2

dummyには、空のindex.htmlを、web2には静的ページを配置


3、apacheの配置ファイルのチェック(httpd.conf)

[root@localhost /]# /usr/local/apache2/bin/apachectl configtest
Syntax OK            ←この様に表示すればOK


以上で、バーチャルホストの設定は完了!!
不要な設定も多々あるかもしれないが、今回はこのような設定で実現出来た。


ここからが、表題の設定。ちょっと、長くなったな。。。


4、SSLの設定

今回の目的は、www.aaa.jpのみSSLを適用すること。

  ・NameVirtualHostの追記

  # IPアドレスを記入する
  # NameVirtualHostが配置されていない場合は、下記内容を追加。
  NameVirtualHost 192.168.0.XXX:80
  NameVirtualHost 192.168.0.XXX:443    ←追記


  ・URLを判定して自動的にSSLを適用する設定
   動的ページのサービス部にmod_rewriteの設定追記。
   (LoadModule rewrite_module modules/mod_rewrite.soを有効にしておくこと)

  # 動的ページのサービス部(Tomcatと連携している)
  <VirtualHost 192.168.0.XXX:80>
    ServerAdmin you@aaa.jp
    ServerName www.aaa.jp
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/
    ServerAlias www.aaa.jp
    ServerAlias aaa.jp
    ErrorLog logs/aaa.jp-error_log
    CustomLog logs/aaa.jp-access_log common

    <IfModule mod_rewrite.c>           ←追記
      RewriteEngine On
      RewriteLog "logs/rewrite_log"
      RewriteLogLevel 0

      ## URLにsslが含まれていれば、通信プロトコルを変更する。
      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule ^/(.*)/ssl/(.*)$ https://%{HTTP_HOST}/$1/ssl/$2 [L,R]
    </IfModule>
    
  </VirtualHost>


  ・SSL設定ファイルを有効にする

  # Secure (SSL/TLS) connections
  Include conf/extra/httpd-ssl.conf
  
  
  ・httpd-ssl.confにてデフォルト値をNameVirtualHostの設定値に変更する。
   サーバー名、プロキシパスなどを適したものに変更。

  #<VirtualHost _default_:443>
  <VirtualHost 192.168.0.XXX:443>
    ServerName www.aaa.jp:443
    ServerAdmin you@aaa.jp
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/
    ServerAlias www.aaa.jp
    ServerAlias aaa.jp
    ErrorLog "/usr/local/apache2/logs/aaa.jp-error_log"
    TransferLog "/usr/local/apache2/logs/aaa.jp-access_log"
    ……
  
  
  ・作成した、key , crt などを設定する。key, crtは指定パスに配置してあること。

  # Server Certificate:
  # Point SSLCertificateFile at a PEM encoded certificate. If
  # the certificate is encrypted, then you will be prompted for a
  # pass phrase. Note that a kill -HUP will prompt again. Keep
  # in mind that if you have both an RSA and a DSA certificate you
  # can configure both in parallel (to also allow the use of DSA
  # ciphers, etc.)
  SSLCertificateFile "/usr/local/apache2/conf/aaa.jp.crt"
  #SSLCertificateFile "/usr/local/apache2/conf/server-dsa.crt"


  # Server Private Key:
  # If the key is not combined with the certificate, use this
  # directive to point at the key file. Keep in mind that if
  # you've both a RSA and a DSA private key you can configure
  # both in parallel (to also allow the use of DSA ciphers, etc.)
  SSLCertificateKeyFile "/usr/local/apache2/conf/aaa.jp.key"
  #SSLCertificateKeyFile "/usr/local/apache2/conf/server-dsa.key"
  
  
以上の設定で、aaa.jpのみSSLの適用が無事に行えた。
posted by hana at 00:10| Comment(0) | TrackBack(0) | SSL | このブログの読者になる | 更新情報をチェックする