JBoss / Java и SSL - PullRequest
       19

JBoss / Java и SSL

0 голосов
/ 10 февраля 2012

Привет, я немного растерялся и надеюсь, что ты вытащишь меня отсюда. Я постараюсь быть максимально понятным, поскольку я не совсем понимаю / не знаю, как мне использовать сертификаты.

У меня есть приложение, которое должно связываться с другим с помощью веб-сервисов и SSL. Мы оба попросили наш главный «Центр сертификации» получить сертификаты. Они отправили нам 4 файла и пароль для файла .P12: .csr, .cer, .key, .P12

Вот что я сделал: * Настройте JBoss для использования SSL на 8443 и используйте файл P12 в качестве хранилища ключей. Чтобы проверить это, я сделал небольшой класс Java, который вызывает веб-сервисы на этом сервере, используя:

props.setProperty("javax.net.ssl.trustStore", "/.../.../certif.p12");
props.setProperty("javax.net.ssl.trustStorePassword", "XXXXXXXXX");
props.setProperty("javax.net.ssl.trustStoreType", "PKCS12");

Соединение работает, но мне кажется, что-то мне не хватает, так как я не использовал другие файлы. Если я отправлю файл .P12 и пароль в приложение, которое должно вызывать мои веб-сервисы, все будет в порядке / достаточно?

Редактировать: Я забыл упомянуть, что я должен вызывать Webservice и в другом приложении, так что это должно быть наоборот, мне нужен только .P12 и передать?

Я много чего читал об открытом ключе, закрытом ключе, keytool, но сейчас это немного запутанно. Спасибо за любую информацию!

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Они отправили нам 4 файла и пароль для файла .P12: .csr, .cer, .key, .P12

В идеале вы должны сгенерировать закрытый ключ (в .key) и CSR (в .csr) самостоятельно, а ЦС должен был вернуться с сертификатом (обычно в .cer) на основе CSR, который вы бы собрались вместе, чтобы создать файл PKCS # 12 (.p12).

На этом этапе вы можете отказаться от CSR. Файл PKCS # 12 теперь должен содержать закрытый ключ, связанный с ним сертификат и, возможно, присоединенную цепочку сертификатов. Вы можете извлечь файлы .key и .cer из этого файла .p12 позже. Полагаю, вам были переданы все эти файлы из-за того, как они были сгенерированы (с использованием промежуточных файлов), или для удобства, чтобы не приходилось конвертировать их самостоятельно.

Терминология Java не идеальна, но хранилище ключей и хранилище доверенных сертификатов - это две сущности типа хранилища ключей, но с другой целью. Разница между KeyManager и TrustManager (и, следовательно, между javax.net.ssl.keyStore и javax.net.ssl.trustStore) заключается в следующем (цитируется в справочном руководстве JSSE ):

TrustManager : определяет, следует ли доверять учетным данным удаленной аутентификации (и, следовательно, соединению).

KeyManager : Определяет, какие учетные данные аутентификации отправлять на удаленный хост.

Свойства javax.net.ssl.trustStore* являются одним из способов настройки TrustManager. Свойства javax.net.ssl.keyStore* являются одним из способов настройки KeyManager.

Как правило, в хранилище доверенных сертификатов не требуется материал закрытого ключа (если только вы не используете его в качестве хранилища ключей). Часто лучше использовать отдельное хранилище доверенных сертификатов, которое можно было бы свободно копировать по всей машине, не беспокоясь о утечке материалов закрытого ключа. Что может иметь смысл, так это создать новое хранилище ключей (JKS), которое вы будете использовать в качестве хранилища доверенных сертификатов, используя сертификаты CA (не уверен, что вам их предоставили).

Вы не выполняете взаимную аутентификацию, устанавливая только хранилище доверенных сертификатов (для хранилища ключей нет значений по умолчанию, поэтому им необходимо явно указать эти параметры). Если вы хотите использовать свой клиентский сертификат для подключения к удаленной стороне, вам необходимо установить его в хранилище ключей (например, используя свойства javax.net.ssl.keyStore* так же, как вы делали это для хранилища доверенных сертификатов).

Вы можете указать и хранилище ключей, и хранилище доверенных сертификатов на один и тот же файл .p12. Побочным эффектом является то, что другим соединениям, установленным вашей службой в других местах (например, https://www.google.com), нельзя доверять, поскольку он не будет содержать CA для них. Вот почему может быть лучше создать отдельное «хранилище ключей доверенного хранилища» (JKS может быть проще) для сертификатов CA. Вы можете сделать копию стандартного cacerts (в каталоге JRE), импортировать в него сертификат своего ЦС и использовать его.

2 голосов
/ 10 февраля 2012

У меня есть приложение, которое должно связываться с другим с помощью веб-сервисов и SSL.

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

Это важно, так как файлы, которые вы представляете по именам, предполагают последнее, то есть, что ожидается взаимная аутентификация, в то время как ваш код только устанавливает библиотеку SSL для аутентификации на сервере.

Поскольку вы здесь не предоставляете контекст, я бы сказал, что:

  • .key имеет ваш закрытый ключ
  • .p12 имеет ваш личный ключ вместе с подписанным сертификатомили, возможно, корневой сертификат ЦС (?)
  • может иметь подписанный сертификат или сертификат подписи ЦС, который считается доверенным в домене и, возможно, также подписал веб-службу, с которой вы хотите связаться с сертификатом.(хорошо, это возможность / предположение здесь, так как вы не говорите много)
  • csr - ваш запрос на подпись сертификата

Я сделал небольшой класс Java, который вызываетвеб-сервисы на этом сервере, используя

В коде вы устанавливаете p12 в качестве хранилища доверенных сертификатов.

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

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

Я не уверен, каковы ваши требования к безопасности здесь, но мне кажется, что вы, вероятно, должны рассмотреть это больше.

Даже для этого вопроса я просто попытался сделать обоснованное предположение на основе имен файлов .....

Надеюсь, это поставит вас в какой-то след для чтения.

...