Подтвердить что ты не робот

Может ли хранилище ключей Java импортировать пару ключей, сгенерированную OpenSSL?

Я генерирую ключ сертификации с помощью openssl. Вот моя команда:

openssl genrsa -des3 -out enc_key.pem 1024

Я экспортирую в файл cer, затем с помощью java keytool импортирую в java keystore (jks).

Кейстора звучит хорошо. Я могу загрузить хранилище ключей из своего приложения java.

Проблема заключается в том, когда клиент подключается к серверу (в данном случае это FTP-сервер, а не веб-сервер, и я использую apache mina), произошло исключение:

javax.net.ssl.SSLHandshakeException: SSL-квитирование не выполнено.     at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:433)     at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(по умолчаниюIoFilterChain.java:434)     at org.apache.mina.core.filterchain.DefaultIoFilterChain.access $5 (DefaultIoFilterChain.java:429)

...

Причиняется: javax.net.ssl.SSLHandshakeException: нет общих комплектов шифров     at com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(Неизвестный источник)     at com.sun.net.ssl.internal.ssl.SSLEngineImpl.checkTaskThrown(Неизвестный источник)     at com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(Неизвестный источник)     at com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(Неизвестный источник)     в javax.net.ssl.SSLEngine.wrap(Неизвестный источник)

...

Причиняется: javax.net.ssl.SSLHandshakeException: нет общих комплектов шифров     at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Неизвестный источник)     at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Неизвестный источник)

Есть несколько вещей, которые я хочу задать:

  • Что такое шифр сертификации, который я генерирую с помощью openssl? Как мы можем знать? возможно, в командной строке openssl xxx?
  • Я перехожу в http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA. И я включил SSL_RSA_xxx в список разрешенных шифров, но по-прежнему не могу работать (я ставлю SSL_RSA, потому что SSL использует ssl implisit и genrsa, просто мое мнение genrsa генерирует RSA). Правильно ли это?
  • Кто-нибудь знает решение?
  • Или кто-нибудь знает, как сгенерировать стандартное хранилище ключей из командной строки openssl, пока оно не будет использовано в java-приложении (вне курса с помощью шифрования). Потому что прямо сейчас я могу сгенерировать сертификацию из openssl и экспортировать java-хранилище, но я не знаю, что такое шифр, который я использовал, и как я использую приложение java. Примечание. Я могу запустить, если хранилище ключей создается непосредственно из java. В настоящее время проблема заключается в том, что хранилище ключей, созданное java keytool от сертификации, похоже на openssl (и другое, возможно).

Любая помощь будет оценена! Благодаря

4b9b3361

Ответ 1

Почему вы используете OpenSSL для создания ключевой пары? Почему бы просто не использовать keytool?

Инструмент genrsa просто генерирует закрытый ключ. Как вы создаете соответствующий сертификат? Как вы импортируете закрытый ключ в хранилище ключей Java? (Я спрашиваю, потому что keytool может импортировать только закрытый ключ из существующего хранилища ключей и только с Java 6 и далее.)

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


Серверу необходим доступ к закрытому ключу для аутентификации. Чтобы импортировать закрытый ключ, используйте Java keytool.

После создания ключа и сертификата с помощью OpenSSL используйте OpenSSL для создания хранилища ключей PKCS # 12:

openssl pkcs12 -export -in cert.pem -inkey key.pem > server.p12

Затем преобразуйте этот магазин в хранилище ключей Java:

keytool -importkeystore -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12

Теперь используйте server.jks на сервере SSL-enable, который содержит закрытый и сертификат.