2013-11-25 13 views
6

これら2つの回答(1)(2)によれば、サーバ名表示(SNI)を使用して同じtomcatserverから2つのssl証明書を提供することができます。SNIを使用して2つのSSL証明書を提供するTomcatを設定するには?

私の質問はどのように設定するのですか? 私は2つの仮想ホストをセットアップできましたが、クライアントに指定されたSSL証明書を提示するコネクタは1つだけです。コネクタでは、証明書に使用するキーストアとエイリアスを指定できますが、このコネクタがどの仮想ホストであるか、使用されているドメインに従ってクライアントに提示する必要がある証明書はありません。

SNIの使用中にどのssl証明書を使用する必要がありますか(またはどのキーストアが正しいか)をtomcatに伝えるにはどうすればよいですか?

(1)https://stackoverflow.com/a/10173447 (2)https://stackoverflow.com/a/6343059

答えて

14

あなたはこれらの質問に対する答えを再読み込みする必要があります。 SNIはJava 8までサーバー側ではサポートされていません。Tomcat 8がサポートしなければならないJavaバージョンはJava 7です。現時点ではTomcatでSNIサポートはありません。

TomcatがJava 8以降で動作している場合はSNIをオプションでサポートすることは可能ですが、現在は計画がないTomcatでコードを変更する必要があります。 2014年12月のよう

更新:

SNIのサポートを追加するTODOリストが非常に長く、SNIがリストの一番上に現在されていないことにTomcat 9. TODOリストに載っています。いつものようにパッチは大歓迎です。

SNIがTomcat 9に実装されると、SNIサポートがTomcat 7とTomcat 8にバックポートされる可能性があります。 2015年6月のよう

更新:

SNIは、それは3つのすべてのHTTPコネクタの実装(NIO、NIO2および4月/ネイティブ)によってサポートされているTomcatの9のために実装されています。 NIOまたはNIO2でSNIを使用するには、ソースからTomcat 9(a.k.a. trunk)をコンパイルする必要があります。 SNIをAPR /ネイティブで使用するには、tc-nativeトランク()をコンパイルする必要があります(現在、Tomcatリリースで使用されている1.1.xブランチではありません)。

SNIをサポートするために、TLS設定が大幅に変更されました。あなたは2016年11月のようにTomcat 9.

アップデートを構築したら詳細は、ドキュメントのWebアプリケーションになります。

SNIのサポートは、Tomcatの8.5.x.に含まれている これ以上バックポートされない可能性はあります。つまり、8.0.xまたは7.0.xにすることはまずありません。

+0

これに進展はありましたか、それともあなたの答えは今日のようにまだですか? – stepanian

+0

回答が更新されました。 –

+0

更新いただきありがとうございます。 SSLを必要とするサイトごとに新しいAWSサーバーインスタンスを作成するにはあまりにも貧弱な人にとっては、GoogleがSSLを推進し続ける場合、これはより重要になります:) – stepanian

1

nginx/haproxy(どちらもSNIをサポート)をtomcatの前にインストールすると、プロキシとして動作します。

+0

実際には、http://arstechnica.com/information-technology/2015/のhaproxyでそうすることに関する合理的に良いチュートリアルがあります。 05/web-served-how-to-make-your-site-all-https-all-for-everyone/ – idarwin

3

あなたは以下の構成を使用してセットアップ複数のSSL証明書ができます

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
       maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="domain1"> 
     <SSLHostConfig hostName="domain1" > 
      <Certificate certificateKeystoreFile="conf/domain1-keystore.jks" certificateKeystorePassword="dom1keystorepwd" 
         certificateKeyPassword="dom1keypwd" 
         type="RSA" /> 
     </SSLHostConfig> 
     <SSLHostConfig hostName="domain2" > 
      <Certificate certificateKeystoreFile="conf/domain2-keystore.jks" certificateKeystorePassword="dom2keystorepwd" 
         certificateKeyPassword="dom2keypwd" 
         type="RSA" /> 
     </SSLHostConfig> 
    </Connector> 

は、あなたの必要に応じてプロトコルを微調整。 jsseではなくopensslを使用して構成することもできます。詳細については、 https://tomcat.apache.org/tomcat-8.5-doc/config/http.html#SSL_Support_-_SSLHostConfigを参照してください。

また、defaultSSLHostConfigNameは非常に重要です。そうでないと動作しません。任意のドメインをデフォルトとして選択します。

+0

ヒントのおかげでdefaultSSLHostConfigNameなしでは動作しません – MitchBroadhead

関連する問題