Я пишу специальный сервер для телефона android для обработки запросов https. Он начинается с прослушивания на определенном порту и после установления соединения он выполняет рукопожатие с клиентом. Вот snipet кода:Исключение при использовании SSLEngine
ServerSocket sock = new ServerSocket(8080);
Socketclient client = sock.accept();
doHandshake(client);
...
void doHandshake(Socket socket) throws Exception {
try {
SSLContext context = SSLContext.getDefault();
SSLEngine engine = context.createSSLEngine();
engine.setUseClientMode(false);
SSLSession session = engine.getSession();
// Create byte buffers to use for holding application data
ByteBuffer myAppData = ByteBuffer.allocate(session.getApplicationBufferSize());
ByteBuffer peerAppData = ByteBuffer.allocate(session.getApplicationBufferSize());
ByteBuffer myNetData = ByteBuffer.allocate(session.getPacketBufferSize());
byte[] peerNetData = new byte[session.getPacketBufferSize()];
// Begin handshake
engine.beginHandshake();
SSLEngineResult.HandshakeStatus hs = engine.getHandshakeStatus();
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
int bytesRead;
// Process handshaking message
while (hs != SSLEngineResult.HandshakeStatus.FINISHED &&
hs != SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
switch (hs) {
case NEED_UNWRAP:
// Receive handshaking data from peer
bytesRead = inputStream.read(peerNetData);
if (bytesRead < 0) {
// The channel has reached end-of-stream
}
ByteBuffer peerData = ByteBuffer.wrap(peerNetData, 0, bytesRead);
SSLEngineResult res = engine.unwrap(peerData, peerAppData);
Когда я указал браузер этого seerver (URL = https://localhost:8080
) я получил исключение на "engine.unwrap (peerData, peerAppData)"
javax.net .ssl.SSLProtocolException: SSL-соединение завершено: ssl = 0xb8347db8: ошибка в библиотеке SSL, обычно ошибка протокола ошибка: 1408A0C1: процедуры SSL: SSL3_GET_CLIENT_HELLO: нет общего шифрования (внешний/openssl/ssl/s3_srvr.c: 1394 0xace00e61: 0x00000000)
Что мне не хватает?