он хорошо работает через браузер, но не из кода Java.
Код: Выделить всё
WebSocket socket = WebSockets.newSocket(WebSockets.toSecureWebSocketUrl("myDomain", 8080));
< /code>
выбрасывает эту ошибку: < /p>
Не удалось отправить запрос на открытие рукопожатия на сервер: PKIX PATH
Построение не удалось:
sun.security.provider.certpath.suncertpathbuilderexcept /> < /blockquote>
Я знаю, что сторона клиента. Хост и порт WebSocket в порядке, потому что, когда я пробую его, в то время как сервер WebSocket не активен, сообщение об ошибке правильно «подключено». Связано с этой старой версией, из -за ее снижения, а затем она бросает эту ошибку? Чтобы продлить сертификат на сервере с помощью CertBot, но он по -прежнему использует версию DST Root CA X3 для новой.package ...textwebsockets;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.ScreenUtils;
import com.github.czyzby.websocket.WebSocket;
import com.github.czyzby.websocket.WebSocketListener;
import com.github.czyzby.websocket.WebSockets;
import java.io.ByteArrayInputStream;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import javax.security.auth.x500.X500Principal;
public class TestWebSockets extends ApplicationAdapter {
public final String LOG_TAG = "LOG_TestWebSockets";
SpriteBatch batch;
Texture img;
@Override
public void create () {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
// https://github.com/MrStahlfelge/gdx-websockets/tree/master
WebSocket socket = WebSockets.newSocket(WebSockets.toSecureWebSocketUrl("myDomain", 8080));
socket.setSendGracefully(true);
socket.addListener(new WebSocketListener() {
@Override
public boolean onOpen(WebSocket webSocket) { ... }
@Override
public boolean onClose(WebSocket webSocket, int closeCode, String reason) { ... }
@Override
public boolean onMessage(WebSocket webSocket, String packet) { ... }
@Override
public boolean onMessage(WebSocket webSocket, byte[] packet) { ... }
@Override
public boolean onError(WebSocket webSocket, Throwable error) {
Gdx.app.log(LOG_TAG, "onError: " + error.getCause().getMessage() + "; " + error.getMessage());
return false;
}
});
socket.connect();
}
...
}
< /code>
Код на стороне сервера (node.js на капель Digitalocean VPS с Linux): < /p>
'use strict';
const express = require('express');
const path = require('path');
const https = require('https');
const fs = require('fs');
const WebSocket = require('ws');
const app = express();
app.use(express.static(path.join(__dirname, '/public')));
const server = https.createServer({
key: fs.readFileSync('./privkey.pem'),
cert: fs.readFileSync('./cert.pem')
}, app);
const wss = new WebSocket.Server({server: server});
wss.on('connection', function (ws) { ... });
server.listen(8080, function () {
console.log('Listening on 8080');
});
... // various wss.on* methods
Код веб -сайта:
const wss = new WebSocket('wss://myDomain:8080');
... // various wss.on* methods
< /code>
В сетевой консоли браузера появляется строка 101 и получает сообщения сервера. (Я также отправляю сообщения на сервер, но я удалил этот код здесь, потому что не имеет отношения к этому сообщению).
Я уже прочитал много ответов, но почти все они предлагают вручную использовать файл .pem.
Я проверил ssl https://www.sslabs.com.commy.htmainemale antmainthimem. Результат:
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/774 ... -with-java