Я генерирую ключ сертификации с openssl. Вот моя команда:
openssl genrsa-des3 - enc_key.pem 1024
Я экспортирую в cer файл, затем с Java keytool я импортирую в Java keystore (jks).
keystore звучит хорошим. Я могу загрузить keystore из своего приложения Java.
Проблема состоит в том, когда клиентское подключение к серверу (В этом случае FTP-сервер, не веб-сервер, и я использую апачский mina), исключение произошло:
javax.net.ssl. SSLHandshakeException: квитирование SSL перестало работать. в org.apache.mina.filter.ssl. SslFilter.messageReceived(SslFilter.java:433) в org.apache.mina.core.filterchain. DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) в org.apache.mina.core.filterchain. 5 DefaultIoFilterChain.access$ (DefaultIoFilterChain.java:429)
...
Вызванный: javax.net.ssl. SSLHandshakeException: никакие наборы шифров вместе в com.sun.net.ssl.internal.ssl. Handshaker.checkThrown (Неизвестный Источник) в com.sun.net.ssl.internal.ssl. SSLEngineImpl.checkTaskThrown (Неизвестный Источник) в com.sun.net.ssl.internal.ssl. SSLEngineImpl.writeAppRecord (Неизвестный Источник) в com.sun.net.ssl.internal.ssl. SSLEngineImpl.wrap (Неизвестный Источник) в javax.net.ssl. SSLEngine.wrap (Неизвестный Источник)
...
Вызванный: javax.net.ssl. SSLHandshakeException: никакие наборы шифров вместе в com.sun.net.ssl.internal.ssl. Alerts.getSSLException (Неизвестный Источник) в com.sun.net.ssl.internal.ssl. SSLEngineImpl.fatal (Неизвестный Источник)
Существует несколько вещей, которые я хочу спросить:
Любая справка будет цениться!Спасибо
Почему вы используете OpenSSL для создания пары ключей? Почему бы просто не использовать keytool
?
Инструмент genrsa
просто генерирует закрытый ключ. Как вы создаете соответствующий сертификат? Как вы импортируете закрытый ключ в свое хранилище ключей Java? (Я спрашиваю, потому что keytool
может импортировать закрытый ключ только из существующего хранилища ключей и только из Java 6.)
Я подозреваю, что ваша проблема в том, что ваше хранилище ключей не содержит запись ключа (закрытый ключ и соответствующий сертификат ). Когда вы перечисляете содержимое хранилища ключей с помощью keytool
, сколько там записей? Это ключевые записи или доверенные записи?
Серверу необходим доступ к закрытому ключу для аутентификации. Чтобы импортировать закрытый ключ, используйте Java 6 расширенный 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, который содержит сертификат и закрытый ключ.