スマートフォン・タブレットからインターネットサーバーオペレーション 2012

APPW.jp 2012

お名前.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

【補足】 SHA-2 (SHA256) へ移行

識別名(ディスティングイッシュネーム)を入力します。以下は設定例です。個人なので 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

via IPv4

アーカイブ

カテゴリー