В Java SSL через HTTPS без сертификата

Можно ли использовать SSL с httpconnection без использования сертификата в Java? Я хочу использовать случайное число или ключ.

Поблагодарить Райхан

Ответы на вопрос(5)

Да, вы можете использовать несколько различных методов аутентификации в SSL / TLS, включая симметричные ключи (наборы шифров PSK) и комбинацию имени пользователя и пароля (наборы шифров SRP). Я не могу сказать о встроенных механизмах Java, но изSecureBlackbox Продукт (включая его версию Java) позволяет использовать упомянутые механизмы как на стороне клиента, так и на стороне канала SSL / TLS. Это также относится к предоставляемым клиентским и серверным компонентам HTTPS.

SSL требует сертификата, но вы можете создать самозаверяющий сертификат следующим образом:

keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048

Этот сертификат будет храниться в keystore.jks и будет действителен в течение 360 дней.

В зависимости от реализации http-сервера вы обычно указываете его на хранилище ключей, предоставляяkeystoreFile аргумент иkeystorePass установить пароль (имена свойств взяты из HTTP-коннектора Apache Tomcat), но они аналогичны на других http-серверах.

Посмотрите на принятый ответ на следующий вопрос:

Как игнорировать ошибки SSL-сертификата в Apache HttpClient 4.0

Вам просто нужно создать TrustManager, который в основном ничего не проверяет и просто доверяет всему. Хотя я могу понять, почему это полезно при разработке, это отчасти сводит на нет цель SSL. TrustManager создан для того, чтобы избежать атак Man In The Middle, когда третье лицо выступает в качестве сервера для перехвата и обработки данных и т. Д., Поэтому, если вы не проверяете сертификат сервера, любой может предоставить «недействительный». сертификат!

 07 июн. 2012 г., 15:14
Это все еще использует сертификат, хотя (и, конечно, небезопасно). Вопрос, похоже, не желает идти на компромисс в отношении безопасности, но хочет использовать (предварительно совместно используемый) симметричный ключ.
 07 июн. 2012 г., 15:19
Ой. Руки вверх - моя ошибка. Я неправильно понял вопрос
Решение Вопроса

ХотяSSL / TLS строго не требует сертификатовHTTPS ожидает сертификаты, так какRFC 2818 (в частности, раздел 3.1) четко относится к сертификатам X.509.

Вы найдете больше информации вэтот ответ на ServerFault, на очень похожий вопрос.

Что бы вы ни делали без сертификата, это не входит в сферу действия RFC 2818, но все равно может работать (и имеет смысл). Однако это поддерживается другими реализациями и может отличаться. Если вы решите не использовать сертификаты, вам все равно потребуется способ проверки идентификатора сервера для обеспечения безопасности связи.

EDIT:

Поставщик Oracle для JSSE не поддерживает наборы шифров PSK (или сертификаты OpenPGP). Наиболее близким к общему ключу, который вы получите, являются наборы шифров Kerberos.

 07 июн. 2012 г., 13:53
@ EugeneMayevski 'EldoSCorp, просто из любопытства, делаетSecureBlackbox интегрировать в качестве дополнительного поставщика в API JSSE (тем самым делая эти наборы шифров доступными для традиционных приложений Java), или для этого требуется совершенно другой API?
 07 июн. 2012 г., 13:59
Да, это относится к базовой криптографии, но для SSL и других высокоуровневых вещей предусмотрен другой API, более простой в использовании и более гибкий.
 07 июн. 2012 г., 13:48
Также необходимо отметить, что RFC 2818 был введен задолго до того, как эти альтернативные методы были введены в TLS. Следовательно, RFC явно упоминает сертификаты, потому что к тому времени больше ничего не было. Кроме того, идентификацию сервера можно подтвердить, зная общий секретный ключ (в случае комплектов PSK) или доверяя ключу OpenPGP (когда OpenPGP используется для аутентификации).

Нет, вы не можете & t. Вам нужен сертификат для подключения через HTTPS. Вы можете использовать самоподписанный сертификат для ваших целей.

Ваш ответ на вопрос