Получение этой ошибки: javax.net.ssl.SSLHandshakeException: нет общих наборов шифров

У меня есть клиент, написанный на C#, и сервер на JAVA. Итак, когда я пытаюсь подключиться, я получаю ошибку на сервере javax.net.ssl.SSLHandshakeException: no cipher suites in common и в C # «EOF или 0 байт».

[C#]:

  TcpClient tc = new TcpClient(server, 1337); 


            using (sslStream = new SslStream(tc.GetStream())){ }

[ДЖАВА]:

   SSLServerSocketFactory ssocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
   SSLServerSocket server = (SSLServerSocket) ssocketFactory.createServerSocket(1337);
   server.setEnabledCipherSuites(server.getEnabledCipherSuites());

И свойства запуска JAVA:

-Djavax.net.ssl.trustStore=Certificatename -Djavax.net.ssl.trustStorePassword=thereisapw -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl TCPServer

person user1649517    schedule 05.09.2012    source источник
comment
server.setEnabledCipherSuites(server.getEnabledCipherSuites()) ничего не делает. Я настоятельно рекомендую вам не связываться с такими параметрами SSL, если вы не знаете, что делаете.   -  person user207421    schedule 06.09.2012


Ответы (1)


Хранилище доверенных сертификатов определяет, как вы собираетесь доверять предоставленным вам удаленным сертификатам. Хранилище ключей предназначено для сертификатов, которые у вас есть (и для которых у вас есть закрытый ключ). (Подробнее о разнице здесь. Терминология "хранилища ключей" может сбивать с толку, поскольку может иметь два значения).

Здесь вы пытаетесь запустить сервер, но не настроили собственный сертификат. Вам необходимо импортировать/создать сертификат в хранилище ключей и использовать его в качестве хранилища ключей.

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


Не знаю, откуда вы это взяли, но вам это не нужно: -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

person Bruno    schedule 05.09.2012
comment
Спасибо, значит, мне нужно загрузить его в хранилище доверенных сертификатов Windows, прежде чем что-то делать? - person user1649517; 06.09.2012
comment
Мало того, вам нужно создать (или получить) сертификат (с его закрытым ключом) для вашего сервера, поместить его в хранилище ключей и использовать его в качестве хранилища доверия. Затем вам нужно экспортировать сам сертификат (без закрытого ключа) и действительно импортировать его в хранилище доверенных сертификатов Windows. - person Bruno; 06.09.2012