開始時jetty-distribution-9.3.0.v20150612
とopenjdk 1.8.0_51
EC2 Amazon Linuxマシンで実行すると、構成されたすべてのECDHEスイートがサポートされていないことが表示されます。
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA not supported
これらはjetty/etc/jetty-ssl-context.xml
-
<Set name="IncludeCipherSuites">
<Array type="Java.lang.String">
<!-- TLS 1.2 AEAD only (all are SHA-2 as well) -->
<Item>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</Item>
<Item>TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</Item>
<Item>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</Item>
...
私はOracleを読みましたJava 8 これらのプロトコルをサポートする必要があります ですが、OpenJDKでサポートされていないのでしょうか?それとも有効にする必要がありますか?
更新
OracleのJCE暗号化プロバイダーはjre/lib/security/
、しかしそれは助けにはならなかった。
したがって、私はopenjdk-1.8.0.51を実行しているAWSボックスで同様のセットアップを実行しています。私にとってそれを解決したのは、そのようにプロバイダーとしてbouncycastleを追加することです:
bcprov-<verion>.jar
を/usr/lib/jvm/jre/lib/ext
に追加
/usr/lib/jvm/jre/lib/security/Java.security
を編集して、プロバイダーのリストに次の行を追加します。
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
(6番目のエントリとして追加しましたが、必要に応じて順序を高くすることができます)
アプリケーションを再起動し、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
などのECベースの暗号スイートを使用できました。
根本的な原因は、OpenJDKがインストールされたCentOS/RHEL/Amazon Linux上のOpenJDKに、ECをサポートするために必要なネイティブライブラリが同梱されていないことです。 Unlimited Policy Filesは、さまざまなアルゴリズムなどをun-disableにしようとする試みと同様に、レッドニシンです。ライブラリがそこには、機能を使用できません。
「Bouncy Castleをインストールする」という受け入れられた答えは、BCが必要なすべてのアルゴリズムの純粋なJava実装を提供するため機能します。理想的には、JDKは、より高いパフォーマンスをもたらすネイティブ実装を提供します。
Amazon LinuxのOpenJDKは待つ必要があるようです。 :(
参照: http://armoredbarista.blogspot.de/2013/10/how-to-use-ecc-with-openjdk.html
UPDATE 2016-11-09
Oracleの楕円曲線ネイティブライブラリ(libsunec.so
)はGPLに基づいてライセンスされています。 Oracleのダウンロードページ にアクセスし、 サードパーティライセンス をクリックして、README使用しているJavaのバージョンを確認してください。
これは、ターゲットプラットフォームおよびアーキテクチャ用のOracleのJRE/JDKのコピーを取得できる場合、libsunec.so
ライブラリをそこから取得し、合法的にOpenJDKインストールにインストールします。
私にとって、それはファイルを取得することを意味しました$Java_HOME/jre/lib/AMD64/libsunec.so
OracleからJava 8 JREをドロップして、たとえば/usr/lib/jvm/jre-1.8.0/lib/AMD64/
。楕円曲線アルゴリズムを有効にするために必要なのはこれだけです。
UPDATE 2018-03-08
Oracle Java 9には、「無制限の強度の暗号化」ライブラリが含まれます デフォルトで有効になっています 、それでいいですね。 OpenJDKのように システムプロパティを設定して「無制限の強度の暗号化」を有効にする が必要になります。
JCE Unlimited Strength Jurisdiction Policy Files をインストールしてみてください(これらはより高いビット暗号に役立ちます)
また、 Java 8暗号プロトコルのサポート)について提供したリンク には、
楕円曲線暗号(ECDSA、ECDH、ECDHE、ECDH_anon)を使用する暗号スイートには、JCE暗号プロバイダーが必要です...
このようなプロバイダーをJava 8 VMにインストールしましたか?