必要な分だけ秘密鍵(server.key)とサーバー証明書(server.crt)が作成できたら、次はXAMPPにSSL、 バーチャルホストの設定をする。
SSL + バーチャルホストを構築する環境は以下の通り。
OS :Windows 8 (x64)
XAMPP 1.8.1 (Installation Directory: C:\xampp)
Win64 OpenSSL v1.0.1e
設定で編集するファイルは下記3点のファイル。
- httpd-ssl.conf (Directory: C:\xampp\apache\conf\extra\httpd-ssl.conf)
- httpd-vhosts.conf (Directory: C:\xampp\apache\conf\extra\httpd-vhosts.conf)
- hostsファイル (Directory: C:\WINDOWS\System32\drivers\etc\hosts)
1.httpd-ssl.conf を編集する
75行目からSSLバーチャルホストの設定となるが、まず先頭に「NameVirtualHost *:443 」を追記する。
次にデフォルトの設定は要らないので、
続けて
DocumentRoot "E:/Mysite" ←ドキュメントルートを指定
(Cドライブでも別ドライブでも任意の場所でOK)
ServerName example.com:443 ←「ドメイン名:443」
ServerAdmin webmaster@example.com ←「webmaster@ドメイン名」
ErrorLog "logs/example/error.log" ←「logs/ドメイン名/error.log」
< IfModule log_config_module>
CustomLog "logs/example/access.log" combined
← 「logs/ドメイン名/access.log」
< /IfModule>
※ ServerNameにはドキュメントルートを開くドメイン名を指定。
※ logsフォルダ(C:\xampp\apache\logs)に新規フォルダを作成し、ドメイン名で名付ける。
(logsのサブフォルダ名はここではドメイン名にしてあるが、判りやすい名前であればなんでもOK)
更にサーバー証明書、秘密鍵、CustomLog (logsのサブフォルダ名を追記)を修正していく。
102行目 SSLCertificateFile "conf/ssl.crt/example.com.crt" (サーバー証明書 server.crt) 110行目 SSLCertificateKeyFile "conf/ssl.key/example.com.key" (秘密鍵 server.key) 228行目 CustomLog "logs/example/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
## ## SSL Virtual Host Context ## NameVirtualHost *:443 <VirtualHost *:443> DocumentRoot "E:/Mysite" ServerName example.com:443 ServerAdmin webmaster@example.com ErrorLog "logs/example/error.log" <IfModule log_config_module> CustomLog "logs/example/access.log" combined </IfModule> # SSL Engine Switch: SSLEngine on # SSL Cipher Suite: SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL # Server Certificate: SSLCertificateFile "conf/ssl.crt/example.com.crt" # Server Private Key: SSLCertificateKeyFile "conf/ssl.key/example.com.key" # SSL Engine Options: <FilesMatch "\.(cgi|shtml|pl|asp|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "C:/xampp/cgi-bin"> SSLOptions +StdEnvVars </Directory> # SSL Protocol Adjustments: BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 # Per-Server Logging: CustomLog "logs/example/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> <VirtualHost *:443> DocumentRoot "E:/Myweb/blog" ServerName blog.example.com:443 ServerAdmin webmaster@example.com ErrorLog "logs/blog/error.log" <IfModule log_config_module> CustomLog "logs/blog/access.log" combined </IfModule> # SSL Engine Switch: SSLEngine on # SSL Cipher Suite: SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL # Server Certificate: SSLCertificateFile "conf/ssl.crt/blog.example.com.crt" # Server Private Key: SSLCertificateKeyFile "conf/ssl.key/blog.example.com.key" # SSL Engine Options: <FilesMatch "\.(cgi|shtml|pl|asp|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "C:/xampp/cgi-bin"> SSLOptions +StdEnvVars </Directory> # SSL Protocol Adjustments: BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 # Per-Server Logging: CustomLog "logs/blog/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
2.httpd-vhosts.conf の編集
http でも接続できるように、httpd-vhost.conf も編集しておく。
19行目 「#NameVirtualHost *:80」のコメントアウトを外す。
次に localhost の設定を追記。
複数のバーチャルホストの設定をする場合、ServerName に一致しないドメインのアクセスがあると、一番最初に設定してあるバーチャルホストの設定が適応されるため、先頭にデフォルトの localhost の設定を記述しておく。
< VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs"
ServerName localhost
< /VirtualHost>
続いて下記を編集。
ServerAdmin postmaster@example.com ←「postmaster@ドメイン名」 DocumentRoot "E:/Mysite" ←ドキュメントルートを指定。 ServerName example.com ←「ドメイン名」 ErrorLog "logs/example/example.com-error.log" ←「logs/ドメイン名/ドメイン名-error.log」 CustomLog "logs/example/example.com-access.log" combined ←「logs/ドメイン名/ドメイン名-access.log」
最後にアクセス制限の設定する。
< Directory "E:/Mysite"> ←ドキュメントルートを指定。
Options FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
< /Directory>
NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot "C:/xampp/htdocs" ServerName localhost </VirtualHost> <VirtualHost *:80> ServerAdmin postmaster@example.com DocumentRoot "E:/Mysite" ServerName example.com ErrorLog "logs/example/example.com-error.log" CustomLog "logs/example/example.com-access.log" combined </VirtualHost> <Directory "E:/Mysite"> Options FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> <VirtualHost *:80> ServerAdmin postmaster@example.com DocumentRoot "E:/Myweb/blog" ServerName blog.example.com ErrorLog "logs/blog/example.com-error.log" CustomLog "logs/blog/example.com-access.log" combined </VirtualHost> <Directory "E:/Myweb/blog"> Options FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory>
3.hostsファイルの編集
hostsファイルに、上記で追加したホストを追記して設定する。
hostsファイル(拡張子なし)は、「C:\WINDOWS\System32\Drivers\etc\」にあり、管理者権限で「メモ帳」を使用して編集する。
Windows 8 の場合は、スタート画面 >検索 >メモ帳 >メモ帳を右クリック >管理者として実行。
(hostsファイルは拡張子がないため、開く際にはファイルタイプを「すべてのファイル」を変更しないと表示されないので注意)
既に記述されている localhost の下に追記する。
# localhost name resolution is handled within DNS itself. 127.0.0.1 localhost 127.0.0.1 example.com 127.0.0.1 blog.example.com # ::1 localhost
4.Apacheを再起動
全ての設定が完了したら、Apacheを再起動する (起動させていなかった場合は、Apacheを起動する)
5.ブラウザで設定したホストにアクセスし動作確認をする
アドレス欄に設定したホストのURLを入力し、表示を確認する (事前に表示確認用のindex.htmlを用意しておくこと)
◆参考サイト