バーチャルホスト+SSL

Apacheのバーチャルホストを使うと1つのIPでhttp://sanya.sweetduet.info/http://eila.sweetduet.info/という2つのサイトを動かせる。ブラウザがホスト名を送る前に証明書が送られるので、これをHTTPSにしようとすると*.sweetduet.infoというワイルドカード証明書を使うしかない。さらに、https://example.com/というサイトを動かすのは無理。という話だと思っていたけど、Server Name Indication(SNI)という仕組みがあるらしい。設定も特に複雑なことはなくて、普通にバーチャルホストを書いてそれぞれに証明書を設定するだけ。XPは対応していないけど自分か身内しか使わないサイトだから構うまい。

こんな感じ
https://sanya.sweetduet.info/
https://eila.sweetduet.info/

おすすめはしないけど、↓を「信頼されたルート証明機関」にインストールすれば、エラーも無くなるはず。
https://sanya.sweetduet.info/kusano.crt


証明書作成

# cd /etc/pki/tls/certs/
# make kusano.crt  ←オレオレルート証明書を作成

# make sanya.sweetduet.info.csr  ←証明書発行要求を作成
# openssl x509 -CA kusano.crt -CAkey kusano.key -CAcreateserial -req -days 3650 -in sanya.sweetduet.info.csr -out sanya.sweetduet.info.crt  ←署名
# openssl rsa -in sanya.sweetduet.info.key -out sanya.sweetduet.info.key  ←秘密鍵からパスワードを削除

# make eila.sweetduet.info.csr
# openssl x509 -CA kusano.crt -CAkey kusano.key -CAcreateserial -req -days 3650 -in eila.sweetduet.info.csr -out eila.sweetduet.info.crt
# openssl rsa -in eila.sweetduet.info.key -out eila.sweetduet.info.key

httpd.conf

(略)

NameVirtualHost *:80

<VirtualHost *:80>
    Include conf/sanya.conf
    ErrorLog logs/sanya/error_log
    CustomLog logs/sanya/access_log combined
</VirtualHost>

<VirtualHost *:80>
    Include conf/eila.conf
    ErrorLog logs/eila/error_log
    CustomLog logs/eila/access_log combined
</VirtualHost>

NameVirtualHost *:443

<VirtualHost *:443>
    Include conf/sanya.conf
    Include conf/sslhost.conf
    SSLCertificateFile /etc/pki/tls/certs/sanya.sweetduet.info.crt
    SSLCertificateKeyFile /etc/pki/tls/certs/sanya.sweetduet.info.key
    SSLCertificateChainFile /etc/pki/tls/certs/kusano.crt
    ErrorLog logs/sanya/ssl_error_log
    TransferLog logs/sanya/ssl_access_log
    CustomLog logs/sanya/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

<VirtualHost *:443>
    Include conf/eila.conf
    Include conf/sslhost.conf
    SSLCertificateFile /etc/pki/tls/certs/eila.sweetduet.info.crt
    SSLCertificateKeyFile /etc/pki/tls/certs/eila.sweetduet.info.key
    SSLCertificateChainFile /etc/pki/tls/certs/kusano.crt
    ErrorLog logs/eila/ssl_error_log
    TransferLog logs/eila/ssl_access_log
    CustomLog logs/eila/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

conf.d/ssl.confからをconf/sslconf.confに移動

sslhost.conf

LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

sanya.conf

ServerName sanya.sweetduet.info
DocumentRoot "/var/www/html/sanya"

eila.conf

ServerName eila.sweetduet.info
DocumentRoot "/var/www/html/eila"

Apacheの設定とか良くわからないので、変なことをしていたら、クラックする前に教えてください。