java.net.SocketException: сброс соединения - PullRequest
0 голосов
/ 13 мая 2011

Я кодирую приложение, в котором я контролирую код как клиента, так и сервера. Я использую SSLSockets для его реализации. У меня уже работает протокол с обычными незащищенными сокетами, но когда я пытаюсь переключиться на SSLSockets (используя точно такой же протокол), я получаю следующую трассировку стека:

java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
        at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:782)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:739)

По какой-то причине точно такой же код прекрасно работает с незащищенными сокетами. Почему это может быть?

Любые отзывы будут оценены. Спасибо.

Pablo

Ответы [ 3 ]

4 голосов
/ 14 мая 2011

Из вашего сообщения невозможно обнаружить проблему.
При переключении на безопасные сокеты по умолчанию используются наиболее безопасные шифры.
Если вы не настроили хранилище доверенных сертификатов / хранилище ключей правильно (или не настроиливключил неаутентифицированные комплекты), тогда SSL-рукопожатие завершится неудачей.
Кажется, что исключение указывает на то, что.
Что вы можете сделать, это запустить вашу программу, используя javax.net.debug=ssl,handshake, чтобы включить отладочную информацию SSL и опубликовать отладочную информацию иваш код, если вы ожидаете, что кто-то вам поможет.

0 голосов
/ 04 октября 2012

Причины могут быть разными, -Djavax.net.debug = ssl - ваш друг, как подсказывает Владимир Дюжев.

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

  • закрытый ключ
  • сертификат
  • полная цепочка эмитента сертификата

И склад доверенных сертификатов:

  • полная цепочка сертификатов для сертификата сервера

У меня проблемы с генерацией правильного хранилища ключей (trustore легко - просто используйте keytool). Для хранилища ключей вам нужен st вроде этого (Linux с openssl + java):

# convert all to PEM
openssl x509 -in ${ca}.der -inform DER -outform PEM -out ${ca}.pem
openssl x509 -in ${subca}.der -inform DER -outform PEM -out ${subca}.pem
# create one large PEM file containing certificate chain
cat ${ca}.pem ${subca}.pem > tmp_cert_chain.pem
# generate PKCS#12 BUNDLE
openssl pkcs12 -export -in ${cert}.pem -inkey ${key}.pem -certfile tmp_cert_chain.pem -out tmp_pkcs12.pfx
# convert PKCS#12 bundle to JKS
keytool -importkeystore -srckeystore tmp_pkcs12.pfx -srcstoretype pkcs12 -srcstorepass ${storepass} -destkeystore $keystore -deststoretype jks -deststorepass ${storepass}
# print out JKS keystore
keytool -list -keystore $keystore -storepass $storepass
0 голосов
/ 14 мая 2011

В зависимости от того, какую операционную систему вы используете, для привязки или прослушивания порта SSL могут потребоваться привилегии администратора / root. Попытка запустить ваше приложение с правами администратора (в Windows) или sudo'd (в Linux).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...