Java 8、JCE Unlimited Strength Policy、SSL Handshake over TLS

Jigar Joshi

のみをサポートするJava8サーバーではTLSv1、centOSからの安全なソケット接続を確立できません。

バージョン

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

ソース

import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Created by jigar.joshi on 6/10/15.
 */
public class SSLTester {
    public static void main(String[] args) throws Exception {
        SSLSocketFactory f =
                (SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket socket = (SSLSocket) f.createSocket("efm.sandbox.vovici.com", 443 );
        try {
            printSocketInfo(socket);
            socket.startHandshake();    
            System.out.println("----------------------------------SUCCESS----------------------------------");

            BufferedReader r = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
            String m = null;
            while ((m = r.readLine()) != null) {
                System.out.println(m);

            }
            r.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
            System.err.println(e.toString());
        }
    }

    private static void printSocketInfo(SSLSocket s) {
        System.out.println("Socket class: " + s.getClass());
        System.out.println("    Remote address = "
                + s.getInetAddress().toString());
        System.out.println("    Remote port = " + s.getPort());
        System.out.println("    Local socket address = "
                + s.getLocalSocketAddress().toString());
        System.out.println("    Local address = "
                + s.getLocalAddress().toString());
        System.out.println("    Local port = " + s.getLocalPort());
        System.out.println("    Need client authentication = "
                + s.getNeedClientAuth());
        SSLSession ss = s.getSession();
        System.out.println("    Cipher suite = " + ss.getCipherSuite());
        System.out.println("    Protocol = " + ss.getProtocol());
    }

}

同じバージョンのJVMでは、OSXでハンドシェイクが正常に行われ、centOSで失敗します。失敗の理由は、使用を試みるだけでTLSv1.2(JVM 8のデフォルト)、下位のプロトコルを試行しないためです。

デバッグノート:

-Ddeployment.security.TLSv1.0=true 

-Ddeployment.security.TLSv1=true 

-Ddeployment.security.TLSv1.1=false 

-Ddeployment.security.TLSv1.2=false 

-Djavax.net.debug=ssl:handshake:verbose 

質問:

  • TLSv1CentOSではなくOSXで選択できるのはなぜですか?

  • 特定の順序でプロトコルを使用するようにJVMに指示するにはどうすればよいですか、またはバージョンごとの順序を考慮する場合は、JVMにも試してみるように指示するにはどうすればよいですか。 v1

編集:

これを引き起こしているJREとともに無制限の強度のJCEポリシーがインストールされていますが、それがなくても機能するため、OSXとCentOSの違いはなくなりました。どうすればそれを機能させることができますか?

編集:

出力

Socket class: class sun.security.ssl.SSLSocketImpl
    Remote address = efm.sandbox.vovici.com/206.132.29.15
    Remote port = 443
    Local socket address = /10.10.152.143:50376
    Local address = /10.10.152.143
    Local port = 50376
    Need client authentication = false
    Cipher suite = SSL_NULL_WITH_NULL_NULL
    Protocol = NONE
javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at sun.security.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1529)
    at sun.security.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1541)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
    at SSLTester.main(SSLTester.java:24)
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:980)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)
    at sun.security.ssl.SSLSocketImpl.getSession(SSLSocketImpl.java:2225)
    at SSLTester.printSocketInfo(SSLTester.java:56)
    at SSLTester.main(SSLTester.java:23)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at sun.security.ssl.InputRecord.read(InputRecord.java:505)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:961)
    ... 5 more
javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
YuriK

プロトコルを次のものだけTLSv1を使用するように制限してみてください

-Djdk.tls.client.protocols=TLSv1

詳細については、次のページを参照してください:https//docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#descPhase2

お役に立てれば、

百合

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Mavenを使用してJCE Unlimited Strength Policyファイルをインストールするにはどうすればよいですか?

Caddy TLS handshake error

Java SSL SSLHandshakeException handshake_failure

JavaでFTP over TLS / SSL(FTPS)サーバーに接続する方法

Java 1.6_u45 + BouncyCastle + TLS1.2 throws handshake_failure(40) (notifySecureRenegotiation)

Java connect to SOAP web service using SSL handshake failure

java 8 soap client Received fatal alert: handshake_failure

Java 8、TSL v1およびjavax.net.ssl.SSLHandshakeException:致命的なアラートを受信:handshake_failure

Spring boot / Java、mongodb SSL / TLS接続

Java SSL / TLSバージョン設定

JavaでのMQTTのTLS / SSL接続

Redis input over TLS for Logstash

WebSocket over TLS:Golang / Gorilla

nodejs SSL handshake error on aws

SSL Handshake Failure java.security.cert.CertPathValidatorException: Certificate chaining error

Java 1.6_u45 + BouncyCastle + TLS1.2はhandshake_failure(40)をスローします(notifySecureRenegotiation)

How to handle SSL handshake failure in Netty

JCE-Java 7 ...?

Thunderbird:SSL / TLSとSTARTTLS

javax.net.ssl.SSLHandshakeException:SSLでJMeterを使用する場合のhandshake_failure(JDK8)

jboss5 sending email over smtp + tls

WebSocket over SSL: Cloudflare

WebSocket over SSL:Cloudflare

Python 3: How to log SSL handshake errors from server side

Dropwizard TLS and SSL: deactivate SSLv3

openssl ciphers command showing cipher as SSL not TLS

SSLHandshakeException:致命的なアラートを受信:Java 6-> 8アップグレード後のhandshake_failure

Java8、HttpClient、「致命的なアラートを受信しました:handshake_failure」を受信

java 8 soapクライアント致命的なアラートを受信しました:handshake_failure

TOP 一覧

  1. 1

    PictureBoxで画像のブレンドを無効にする

  2. 2

    レスポンシブウェブサイトの一番下にスティッキーなナビゲーションバーを作成するのに問題がある

  3. 3

    Rパッケージ「AppliedPredictiveModeling」のインストール中にエラーが発生しました

  4. 4

    Chromeウェブアプリのウェブビューの高さの問題

  5. 5

    HTTPヘッダー 'SOAPAction'の値はサーバーによって認識されませんでした

  6. 6

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  7. 7

    C ++でのcURLとマルチスレッドの使用

  8. 8

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  9. 9

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  10. 10

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  11. 11

    Spring @ModelAttributeモデルフィールドマッピング

  12. 12

    Python / SciPyのピーク検出アルゴリズム

  13. 13

    Ansibleで複数行のシェルスクリプトを実行する方法

  14. 14

    テキストフィールドの値に基づいて UIslider を移動します

  15. 15

    tf.nn_conv2dとtf.nn.depthwise_conv2dの違い

  16. 16

    ZScalerと証明書の問題により、Dockerを使用できません

  17. 17

    MLでのデータ前処理の背後にある直感

  18. 18

    Postmanを使用してファイル付きの(ネストされた)jsonオブジェクトを送信する

  19. 19

    java.lang.NoClassDefFoundError:com / sun / istack / tools / DefaultAuthenticator $ Receiver

  20. 20

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  21. 21

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

ホットタグ

アーカイブ