Как использовать файл PEM для создания сокета SSL в Java?

Измените строку подключения на zeroDateTimeBehavior=convertToNull вместо zeroDateTimeBehavior=CONVERT_TO_NULL

11
задан Community 23 May 2017 в 12:26
поделиться

2 ответа

Вам нужна библиотека, которая обрабатывает SSL. Как отметил Джон Эллинвуд, некоторые фреймворки (такие как Java 2 SE) предлагают эти встроенные функции, для других вам необходимо использовать сторонние библиотеки.

Разработчики на C часто используют openssl напрямую, но этого нельзя сказать быть легким, и при использовании C ++ есть несколько «ошибок», в которые легко попасть.

Я предлагаю вам использовать сетевую библиотеку C ++ с поддержкой SSL, такую ​​как сетевая библиотека QT или Poco NetSSL. См. здесь для некоторой учебной документации и здесь для документации API - вы, вероятно, захотите взглянуть на initializeClient , который напрямую принимает файл PEM.

0
ответ дан 3 December 2019 в 09:21
поделиться

Это кажется, что файл PEM является клиентским сертификатом для Вас для использования для входа в систему в сервер. Если это будет клиентский сертификат, и это кажется, что это, то Вам, вероятно, будет нужен файл сертификата CA также для использования в проверке сертификата серверов для установления соединения.

Сертификаты CA должны войти в базу доверенных сертификатов, и Ваши клиентские сертификаты должны войти в keystore. В Java оба из них будут JKS (хотя он ограничил поддержку PKCS12.) Существует значение по умолчанию keystore/truststore местоположения для JRE, а также для каждого пользователя. Можно также указать внешние местоположения для этих файлов в коде, как в примерах ниже. Библиотека свободного-городского-населения-ssl, кажется, может поддерживать PEM непосредственно без потребности в JKS, но я не использовал его.

Пароль по умолчанию для этих keystores в Java является "changeit" без кавычек.

Эта страница показывает, что необходимо считать PEM в keystore/truststore. Вот другой пример.

После того как у Вас есть своя база доверенных сертификатов и keystore, настроенный правильно, необходимо передать следующие системные свойства JSSE JVM:

javax.net.ssl.keyStore
javax.net.ssl.keyStoreType
javax.net.ssl.keyStorePassword
javax.net.ssl.trustStore
javax.net.ssl.trustStoreType
javax.net.ssl.trustStorePassword

Можно указать их как-D параметры к JRE или, как в примерах ниже, программно.

После того как Вы заканчиваете это, вот пример свободного-городского-населения-ssl создания сокета. Кроме того, вот API Java для SSLSocket. Вот также пример, который не использует апачского свободного городского населения.

12
ответ дан 3 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: