** Apache2でSNI [#d6360d52]
> 1台のサーバーと1つのIPアドレスで複数のドメインをSSLで運用するには[[SNI:http://ja.wikipedia.org/wiki/Server_Name_Indication]]を使うと実現できます。Apache2+OpenSSLでSNIメモ

> CentOSの[[yumはApache2.2.3までしか対応していない:http://serverfault.com/questions/97125/yum-doesnt-update-httpd-past-version-2-2-3-on-centos]]ようなので自力インストールが必要でしたので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>


----
#comment(nodate);

[ 編集 | 差分 | 添付 | 複製 | 名前変更 | リロード ]   [ 新規 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]