我在我的网络应用程序中使用websocket(ws://
)。现在我在我的webapplication中实现了SSL,所以我实现了安全websocket(wss://
)。所以我按照TooTallNate库文档来实现这个场景。
但我在浏览器控制台中收到此网址。
WebSocket connection to 'wss://localhost:9191/socket' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
。
对于实现安全websocket,我们需要在下面的代码中传递哪种算法?
SSLContext context = SSLContext.getInstance(Algorithm);
所以请帮我解决这个错误。
答案 0 :(得分:1)
首先,对不起我的英语,但是即使问题已经四岁了,也许我也可以为您提供帮助,也许有人也会遇到同样的问题。
我们在这里。
例如,如果您使用"ws://localhost:8025"
,则Java websocket无法建立安全连接,请查看文档。
Websocket将仅创建结合SSL的安全连接。最后,您将使用"wss://localhost:8025"
。
让我们添加SSL:
首先,您将需要一个会话密钥。您可以在JavaJDK文件夹中找到该文件(例如,在 C:\ Program Files \ Java \ jdk1.8.0_191 \ bin \ keytool.exe中),该文件名为“ keytool.exe” 。这个小工具将生成一个会话密钥,应将其保存在客户端和服务器端。
现在使用该工具。例如:
keytool -genkey -keyalg RSA -validity 3650 -keystore "keystore.jks" -storepass "storepassword" -keypass "keypassword" -alias "default" -dname "CN=127.0.0.1, OU=MyOrgUnit, O=MyOrg, L=MyCity, S=MyRegion, C=MyCountry"
我从以下位置复制了上面的示例
https://github.com/TooTallNate/Java-WebSocket/blob/master/src/main/example/SSLClientExample.java
现在您可以从称为“ KEYSTORE”的特定文件中加载会话密钥。
KeyStore ks = KeyStore.getInstance( STORETYPE );
File kf = new File( KEYSTORE );
ks.load( new FileInputStream( kf ), STOREPASSWORD.toCharArray());
您需要生成一个密钥管理器和一个信任管理器。作者使用了“ SunX509”协议。
KeyManagerFactory kmf = KeyManagerFactory.getInstance( "SunX509" );
kmf.init( ks, KEYPASSWORD.toCharArray() );
TrustManagerFactory tmf = TrustManagerFactory.getInstance( "SunX509" );
tmf.init( ks );
之后,该获取“真实的” SSL上下文了。您需要加载TLS协议。 SSL和TLS完全相同。生成ssl套接字时,您可以创建一个使用ssl / tls的新套接字。
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
例如:我在一开始就使用
Session session = new Session(new Uri("wss://localhost:8025"));
我的 Session.class来自WebSocketClient 。因此,我可以使用:
session.setSocket(sslSocketFactory.createSocket());
session.connect();
注意:如果要使用“ wss”,则必须实现SSL或不使用SSL的“ ws”。
那么您的代码可能出什么问题了?
->您未在服务器端实现SSL,因此它将拒绝连接
这段代码完美地工作了,我做了测试。我只发布客户端消息,但服务器端代码相同:)
我希望到目前为止能为您提供帮助。