お名前.com VPS (KVM) にて WordPress をはじめるまで(6)
第6回は、SSL 証明書の作成とバーチャルホストの設定についてです。
2012年5月から お名前.com VPS(KVM) の利用を始めています。
標準 OS にて、設定などを備忘録として残しておきたいと思います。
SSL 証明書の作成
SSL 証明書は、絶対に必要というわけではないのですが、セキュリティを考えたとき、用意した方が良いと思われます。
自己署名のものを使用することも考えられますが、年額990円(税抜)からの格安SSLサーバー証明書取得サービス、SSLボックス の認証局の署名のものを使用することにしました。個人でも利用できます。
SSLボックス のサポートマニュアルに従って手続きを進めていきます。
CSR の作成
秘密鍵を置くディレクトリに移動します。
$ cd /etc/httpd/conf
秘密鍵を作成します。パスフレーズは使用しないことにします。
$ sudo openssl genrsa -out wwwexamplejp.key 2048
CSR を作成します。作成した秘密鍵を使用します。
$ sudo openssl req -new -key wwwexamplejp.key -out wwwexamplejp.csr
識別名(ディスティングイッシュネーム)を入力します。以下は設定例です。個人なので Organization Name は個人名にしました。サイト運営者の正式英語名と解釈しました。Organizational Unit Name は空欄にしました。Common Name が最も重要で、www.example.jp のように FQDN で入力します。Email Address は空欄です。
Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Edogawa-ku Organization Name (eg, company) [Default Company Ltd]:(個人名) Organizational Unit Name (eg, section) []:(未入力) Common Name (eg, your name or your server's hostname) []:(SSL接続時のURLをFQDNで入力) Email Address []:(未入力)
上記の例では、wwwexamplejp.key と wwwexamplejp.csr が作成されます。
メールアドレスの用意
承認確認メールが受信できるように、admin@(申請するドメイン名) のメールアドレスを用意します。
証明書の新規取得
SSLボックス の管理ツールから手続きを進めます。
ジオトラストより英文の承認確認メールが届きます。メールに記載された URL から承認手続きを進めます。
承認が終わると証明書が発行され、メールにて送付されます。
証明書のインストール
送付された証明書を /etc/httpd/conf/wwwexamplejp.crt などとして保存します。
また、SSLボックス のサポートマニュアルの中間証明書のリンクなどから中間証明書を /etc/httpd/conf/inter.crt などのように保存します。
mod_ssl のインストール
HTTPS を利用するため、mod_ssl パッケージをインストールします。
$ sudo yum install mod_ssl --enablerepo=epel,CentALT,remi
httpd.conf の設定
それぞれの方のポリシーに従って /etc/httpd/conf/httpd.conf を見直していくのが良いと思います。よく見かける点を含めていくつかあげてみます。
#KeepAlive Off KeepAlive On #ServerName www.example.com:80 ServerName www.example.jp:80 #DocumentRoot 'var/www/html' DocumentRoot '/home/hoge/www' <Directory '/home/hoge/www'> #Options Indexes FollowSymLinks Options FollowSymLinks ExecCGI #ServerTokens OS ServerTokens Prod #ServerSignature On ServerSignature Off #AllowOverride None AllowOverride All
そのほか LoadModule などの記述で不要と判断できるものはコメントしていきます。
DocumentRoot のパーミッションを確認します。
$ chmod 755 /home/hoge/www
などとします。また上位の /home/hoge のパーミッションも確認しておきます。
$ chmod 755 /home/hoge
などとします。
次のバーチャルホストの設定前に、http://www.example.jp のアクセスを確認しておきます。
バーチャルホストの設定
バーチャルホストを設定して、http://www.example.jp、http://example.jp、https://www.example.jp、https://example.jp の4つに対応します。
/etc/httpd/conf/httpd.conf の NameVirtualHost を追加します。
NameVirtualHost *:80 NameVirtualHost *:443
/etc/httpd/conf.d/wwwexamplejp.conf、/etc/httpd/conf.d/examplejp.conf を作成することとし、/etc/httpd/conf.d/ssl.conf を修正します。
/etc/httpd/conf.d/wwwexamplejp.conf を作成します。
<VirtualHost *:80> ServerName www.example.jp:80 DocumentRoot /home/hoge/www <Directory /home/hoge/www> AllowOverride ALL Options FollowSymlinks ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost>
/etc/httpd/conf.d/examplejp.conf を作成します。
<VirtualHost *:80> ServerName example.jp:80 DocumentRoot /home/hoge/www <Directory /home/hoge/www> AllowOverride ALL Options FollowSymlinks ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost>
/etc/httpd/conf.d/ssl.conf を編集します。
~ 省略 ~ <VirtualHost *:443> DocumentRoot '/home/hoge/www' ServerName www.example.jp:443 ~ 省略 ~ SSLCertificateFile /etc/httpd/conf/wwwexamplejp.crt SSLCertificateKeyFile /etc/httpd/conf/wwwexamplejp.key SSLCACertificateFile /etc/httpd/conf/inter.crt ~ 省略 ~ <Directory /home/hoge/www> AllowOverride ALL Options FollowSymlinks ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost> ~ 以下追加 ~ <VirtualHost *:443> DocumentRoot '/home/hoge/www' ServerName example.jp:443 ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/httpd/conf/wwwexamplejp.crt SSLCertificateKeyFile /etc/httpd/conf/wwwexamplejp.key SSLCACertificateFile /etc/httpd/conf/inter.crt <Files ~ '\.(cgi|shtml|phtml|php3?)$'> SSLOptions +StdEnvVars </Files> SetEnvIf User-Agent '.*MSIE.*' \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ '%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \'%r\' %b' <Directory /home/hoge/www> AllowOverride ALL Options FollowSymlinks ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost>
再読み込みします。
$ sudo service httpd reload
iptables を設定します。/etc/sysconfig/iptables に追加します。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
iptables を再起動します。
$ sudo service iptables restart
補足
自己署名証明書の作成
参考として、以下は自己署名証明書を作成するコマンド例です。秘密鍵 server.key と自己署名証明書 server.crt を作成します。有効期間は、365 日です。証明書を作成するディレクトリで実行します。
$ sudo openssl req -newkey rsa:2048 -nodes -x509 -out server.crt -keyout server.key -days 365
モジュールの設定
/etc/httpd/conf/httpd.conf のモジュールの設定について、インストール直後ではすべてのモジュールが有効となっています。利用されないと思われるモジュールは設定からはずしていきます。無効にするモジュールはコメントにします。以下はその設定例です。
LoadModule auth_basic_module modules/mod_auth_basic.so #LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_alias_module modules/mod_authn_alias.so #LoadModule authn_anon_module modules/mod_authn_anon.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so #LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so #LoadModule authz_owner_module modules/mod_authz_owner.so #LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so #LoadModule authz_default_module modules/mod_authz_default.so #LoadModule ldap_module modules/mod_ldap.so #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so #LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule mime_magic_module modules/mod_mime_magic.so #LoadModule expires_module modules/mod_expires.so #LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so #LoadModule usertrack_module modules/mod_usertrack.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so #LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule info_module modules/mod_info.so #LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so #LoadModule actions_module modules/mod_actions.so #LoadModule speling_module modules/mod_speling.so LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule cache_module modules/mod_cache.so LoadModule suexec_module modules/mod_suexec.so #LoadModule disk_cache_module modules/mod_disk_cache.so #LoadModule file_cache_module modules/mod_file_cache.so #LoadModule mem_cache_module modules/mod_mem_cache.so LoadModule cgi_module modules/mod_cgi.so
SHA-2 (SHA256) へ移行
SHA-2 (SHA256) へ移行するにあたって、CentOS 6 の場合は CSR の作成に -sha256 オプションが必要です。
$ sudo openssl req -new -sha256 -key wwwexamplejp.key -out wwwexamplejp.csr