web-dev-qa-db-ja.com

tomcat 7 + sslが機能しない-ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Ubuntu 14、Tomcat 7、Java 7

godaddyから提供されるour.crt、our.keyおよびGd_bundle-g2-g1.crt。バンドルには3つの証明書が含まれています(ファイルをviで表示すると確認できます)。

注、キーとcrtは問題なくnode.jsで使用されました。

したがって、既存のcrtからキーストアを作成しました。

cd /etc/ssl
openssl pkcs12 -export -in our.crt -inkey our.key -out our.p12 -name Tomcat -CAfile Gd_bundle-g2-g1.crt -caname root -chain

Server.xmlは次のとおりです。

<Server port="8005" shutdown="SHUTDOWN">

<Listener className="org.Apache.catalina.core.JasperListener" />
<Listener className="org.Apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.Apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.Apache.catalina.core.ThreadLocalLeakPreventionListener" />



<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
          type="org.Apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.Apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/Tomcat-users.xml" />
</GlobalNamingResources>


<Service name="Catalina">

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="200" scheme="https" secure="true"
           keystoreType="PKCS12"
           keystoreFile="/etc/ssl/our.p12" keystorePass=""
           clientAuth="false" sslProtocol="TLS" />
  • Tomcatはエラーなしで起動します。
  • Webappはポート80で正常に動作します。
  • サーバーでfwが実行されていません。

ローカルリダイレクトを443から8443に設定します。

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443

次に https://www.ourserver.com/ourapp を試してください

Chromeが提供するもの:ERR_SSL_VERSION_OR_CIPHER_MISMATCH

ローカルマシンで実行されているcurlの例:

curl -Iv https://www.ourserver.com:8443
* Rebuilt URL to: https://www.ourserver.com:8443/
* Hostname was NOT found in DNS cache
*   Trying 1xxxxxxxx...
* Connected to www.ourserver.com (1xxxx) port 8443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Server hello (2):
* error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

何か案は?

アップデート1

新しいサーバーに新しいTomcat 7をセットアップしようとし、証明書の新しいコピーをインストールしましたが、同じエラーが発生しました。

14
John Little

ciphers属性をコネクタタグに追加してみてください

ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
   TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,
   TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,
   TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"

これで問題が解決しない場合は、プロトコル属性をprotocol="HTTP/1.1"からprotocol="org.Apache.coyote.http11.Http11Protocol"に変更してみてください

詳細については see

18
Naman

最近、ガイドに従っているときに同じエラーが発生しました SSLを使用してTomcatでBitbucket Serverを保護する 見つかったとき この解決策

pkcs12からJava keystore形式に変換する必要があります:

keytool -importkeystore \
        -deststorepass changeit -destkeypass changeit \
        -destkeystore /path/to/my/keystore.jks \
        -srckeystore our.p12 -srcstoretype PKCS12

tomcatでは、次のように設定します。

<Connector ...
          keystoreFile="/path/to/my/keystore.jks" />
3

SslProtocolを「TLSv1、TLSv1.1、TLSv1.2」に切り替えてみてください。 openssl/curlテストケースの場合は、SSLv2Helloを先頭に追加することをお勧めします。これは、一部の古いライブラリがアップネゴシエーションの前に古いhelloを送信するためです。

2
Sean Baker

Ubuntu 14、Tomcat 7、Java 7

TomcatおよびJava 7の正確なバージョンは何ですか?

https://wiki.Apache.org/Tomcat/FAQ/Linux_Unix#Q5

Server.xmlは次のとおりです。

使用しているコネクタ実装については言及していませんが、AprLifecycleListenerがserver.xmlから削除されているため、「Http11Protocol」(別名「BIO」)実装を使用していることを意味します。良い。起動ログから確認できるはずです。 (「APR」の実装を使用した場合、構成はまったく異なる必要があります)。

curl -Iv https://www.ourserver.com/ourapp:844

奇妙なURL。ポート番号は、サーバー名https://www.ourserver.com:8443/ourappの後に続く必要があります。

ただし、curlからのメッセージ「* Rebuilded URL to: https://www.ourserver.com:8443/ "は、それに対処する方法を知っているようです。

エラー:14077410:SSLルーチン:SSL23_GET_SERVER_HELLO:sslv3アラートハンドシェイクエラー

Tomcat 7.0.57以降では、公開されているSSLの脆弱性(CVE-2014-3566 POODLE)のため、SSLv3プロトコルがデフォルトで無効になっています。 SSLプロトコルのフィルタリングにより、SSLv2Helloを含め、名前に「SSL」が含まれるすべてのプロトコルが無効になります。どうやらcurlはここでSSLv2Helloハンドシェイク(メッセージの「SSL23」)に接続しようとしています。

TLSプロトコル(TLS 1.0、1.1、または1.2)をサポートするクライアントが必要です。

https://wiki.Apache.org/Tomcat/Security/POODLE
https://wiki.Apache.org/Tomcat/Security/Ciphers

SslProtocolを「TLSv1、TLSv1.1、TLSv1.2」に切り替えてみてください。 openssl/curlテストケースの場合、SSLv2Helloをその前に追加することをお勧めします。古いライブラリの一部は、アップネゴシエーションの前に古いhelloを送信する必要があるためです。

良いですが、1つの修正があります。上記はsslEnabledProtocols属性の値です(sslProtocolではありません)。

OpenSSLで接続してみてください。

openssl s_client -connect hostname:8443

openssl s_client -connect hostname:8443 -tls1

OpenSSLドキュメント: https://openssl.org/docs/apps/s_client.html

Tomcat 7構成リファレンス: http://Tomcat.Apache.org/Tomcat-7.0-doc/config/http.html#SSL_Support_-_BIO_and_NIO

1

同じ問題があり、解決しました。

キーストアにパスワードを追加してください-機能します!

0
TimeO84