Top / D / 2013-08-03

Apache2でSNI

1台のサーバーと1つのIPアドレスで複数のドメインをSSLで運用するにはSNIを使うと実現できます。Apache2+OpenSSLでSNIメモ

CentOSのyumはApache2.2.3までしか対応していないようなので自力インストールが必要でしたのでhttpd-2.2.25をインストール。

# apachectl configtest
Syntax error on line 437 of /usr/local/apache2/conf/httpd.conf:
SSLStrictSNIVHostCheck failed; OpenSSL is not built with support for TLS extensions and SNI
indication. Refer to the documentation, and build a compatible version of OpenSSL.

OpenSSLもYumでは0.9.8eまでしか入らない。SNIには0.9.8f以上が必要らしいのでこれも最新を自力インストールしました。

openssl-1.0.1e
# ./config shared

apache2を再コンパイル

./configure --prefix=/usr/local/apache2 --enable-dav --enable-proxy
 --enable-ssl --enable-suexec --enable-rewrite --with-included-apr
 --enable-so --with-ssl=/usr/local/ssl

起動してみると今度はこんなエラーが。

/usr/local/apache2/bin/apachectl configtest
/usr/local/apache2/bin/httpd: error while loading shared libraries:
 libssl.so.1.0.0: cannot open shared object file: No such file or directory

仮対処としてリンクだけ貼って逃げました。

# cd /usr/local/apache2/lib
# ln -s /usr/local/ssl/lib/libssl.so.1.0.0 
# ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 

apache2起動、失敗。まだエラー

error_log
Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)

SNIを使う場合、SSLのデフォルト値は効かない模様。これが出たら全てのバーチャルホストにSSLEngine行が入っているかチェックしましょう。

最終的にこんな風になって、無事に証明書の切替が実現できました。

Include conf/extra/httpd-ssl.conf
SSLStrictSNIVHostCheck off
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:443>
     ServerAdmin webmaster@localhost
     DocumentRoot <path>
     ServerName <domain A>
     SSLEngine on
     SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
     SSLCertificateFile      <crt A>
     SSLCertificateKeyFile   <key A>
     SSLCACertificateFile  <intermediate.crt>
</VirtualHost>
<VirtualHost *:443>
     ServerAdmin webmaster@localhost
     DocumentRoot <path>
     ServerName <domain B>
     SSLEngine on
     SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
     SSLCertificateFile      <crt B>
     SSLCertificateKeyFile   <key B>
     SSLCACertificateFile  <intermediate.crt>
</VirtualHost>


[ 編集 | 凍結 | 差分 | 添付 | 複製 | 名前変更 | リロード ]   [ 新規 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]
Last-modified: 2013-08-03 (土) 23:52:26 (1366d)