Apache Mina TLS клиент - верблюд
Я использую Apache Mina (Mina2 - Netty недоступен для использования - не спрашивайте, почему:P), чтобы создать TCP-клиент, который подключается к TCP-серверу по TLS.
Вот SSLContext:
Вот мой план xml проекта:
<route id="ReadMQ">
<from uri="jmsep://topic:test/014/data" />
<process ref="readIt"></process>
<to
uri="mina2:tcp://SOMEHOST:38332?sync=true;sslContextParameters=#mySSL;minaLogger=true" />
</route>
cert.pem содержит ключ и сертификат в нем.
Когда Nina пытается подключиться к конечной точке, сервер закрывает соединение с этой ошибкой:
System.IO.IOException: The handshake failed due to an unexpected packet format.
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
Глядя на ошибку, кажется, что Мина не соединяется с правильным протоколом?
Вот что говорит Мина:
SEVERE: Exception on receiving message from address: SOMEHOST:38332 using connector: (nio socket connector: managedSessionCount: 0)
Throwable occurred: java.io.IOException: An existing connection was forcibly closed by the remote host.
Кроме того, когда я использую s_client следующим образом: openssl s_client -connect SOMEHOST:38332 -cert cert.pem -key cert.pem -state -debug
Это идет голова и делает рукопожатие SSL с обменом сертификатов.
Любые подсказки, что я здесь скучаю?
1 ответ
Ключ в хранилище ключей и сертификат в хранилище доверенных сертификатов не добавлялись, потому что они были в формате PEM. Сервер будет запрашивать сертификат клиента, а цепочка сертификатов клиента будет пустой и, следовательно, возникнет ошибка. Чтобы решить эту проблему, я создал хранилище ключей в формате JKS и импортировал файл p12 (созданный с использованием файлов pem), и он заработал.