Как использовать файл PEM для создания сокета SSL в Java? - PullRequest
10 голосов
/ 07 апреля 2009

См. Связанный вопрос.

Мне предоставлен файл PEM, и мне сказали, что он понадобится при создании сокета SSL, который подключается к серверу c ++ для некоторых вызовов API. Кто-нибудь знает, как я могу прочитать в файле PEM и подключиться? Мне также дали пароль для перефразирования.

Ответы [ 2 ]

10 голосов
/ 07 апреля 2009

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

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

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

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

После того, как вы правильно настроили склад доверенных сертификатов и хранилище ключей, вам необходимо передать следующие системные свойства 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 или, как в примерах ниже, программно.

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

0 голосов
/ 08 апреля 2009

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

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

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

...