Java-версия "1.7.0_171" для поддержки набора шифров TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - PullRequest
0 голосов
/ 03 мая 2018

Я использую версию Java

java version "1.7.0_171"
OpenJDK Runtime Environment (amzn-2.6.13.0.76.amzn1-x86_64 u171-b01)
OpenJDK 64-Bit Server VM (build 24.171-b01, mixed mode)

когда я пытаюсь позвонить HHTPS у меня exception

java.lang.IllegalArgumentException: Unsupported ciphersuite TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    at sun.security.ssl.CipherSuite.valueOf(CipherSuite.java:235)
    at sun.security.ssl.CipherSuiteList.<init>(CipherSuiteList.java:82)
    at sun.security.ssl.SSLSocketImpl.setEnabledCipherSuites(SSLSocketImpl.java:2413)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:384)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134)

сервер ssl-соединения, использующий TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

это информация о сервере

* TCP_NODELAY set
* Connected to api..... (1xx.2xx.1xx.1xx) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* ALPN, server accepted to use http/1.1
* SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate:
*   subject: CN=api.....
*   start date: Apr 27 09:29:11 2018 GMT
*   expire date: Jul 26 09:29:11 2018 GMT
*   common name: api.server1.ih.testenv.io
*   issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US
> GET / HTTP/1.1
> Host: api.server1.ih.testenv.io
> User-Agent: curl/7.53.1
> Accept: */*
> 
< HTTP/1.1 404 Not Found
< Server: nginx/1.10.3 (Ubuntu)
< Date: Thu, 03 May 2018 08:43:05 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 39
< Connection: keep-alive
< cache-control: max-age=0, private, must-revalidate
< x-request-id: 2klhbq0t5ahtlndlmc0003k2

как я могу поддержать этот шифр?

РЕДАКТИРОВАТЬ: я не могу перейти на Java 8

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Для устранения этой проблемы попробуйте добавить "-Djavax.net.debug = ssl" при запуске клиентского приложения.

java -Djavax.net.debug=ssl com.sample.Test

или из командной строки с использованием OpenSSL:

openssl s_client -cipher 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384' -connect api.server:443

Если у вас есть контроль / доступ к серверу, попробуйте добавить этот шифр на стороне сервера.

Если вы используете NGinx: Как добавить ssl-шифр в ssl_ciphers в nginx

Внимание

В некоторых средах определенные алгоритмы или длины ключей могут быть нежелательно при использовании SSL / TLS. В этом разделе описывается механизм для отключения алгоритмов при параметрах безопасности SSL / TLS согласование, в том числе согласование версии протокола, комплекты шифров механизмы выбора, аутентификации и обмена ключами.

  • Чтобы определить значение по умолчанию для свойства "jdk.certpath.disabledAlgorithms" и его синтаксиса, проверьте файл "jre / lib / security / java.security"

Пожалуйста, проверьте эту тему здесь :

0 голосов
/ 03 мая 2018

Проблема в том, что TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 и большинство других GCM комплектов шифров не поддерживаются поставщиком безопасности по умолчанию, найденным в Java 7. Поддержка тех была добавлена ​​в Java 8.

Вы можете сравнить спецификацию и поддерживаемые комплекты шифров для Java 7 и Java 8 для подтверждения здесь.

Поскольку ваши изменения предполагают, что вы не можете обновить до Java 8 на данный момент, я не думаю, что у вас есть много вариантов, кроме как использовать внешний поставщик безопасности.

Примером будет

API криптографии Java легиона Bouncy Castle

, который включает поставщика безопасности для JCE и JCA. Использование внешнего поставщика безопасности, очевидно, означает работу с его моделью лицензирования, которая для Bouncy Castle довольно проста, поскольку они используют слегка адаптированную версию лицензии MIT.

Существуют хорошие учебники по смене поставщика безопасности по умолчанию для Java, здесь может помочь быстрый поиск.

...