2009-04-06 7 views
10

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

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

+0

Duplicate; Я думаю, что другая версия вопроса более информативна. – erickson

ответ

9

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

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

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

This page показывает, что вы должны прочитать PEM в своем хранилище ключей/truststore. Вот another example.

После того, как вы ваше и доверенное хранилище ключей настроены должным образом, вам необходимо пройти следующий JSSE system properties к вашей виртуальной машине Java:

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 или, как в примерах ниже, программно.

Как только вы закончите это, heres a commons-ssl example создания сокета. Кроме того, heres Java api для SSLSocket. Heres также имеет example, который не использует какие-либо активы apache.

+1

Ахмм .. хороший ответ - но он действительно спросил о C++, а не о Java. – Guss

+4

Фактически, он отметил его Java и JKS, который является Java KeyStore. Он хочет подключиться к удаленному серверу, который будет выполнен с использованием SSL-сокета. Тот факт, что другая сторона C++ не имеет отношения к механизму соединения. –

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^