使用HTTPS(SSL)安全的WebSocket [复制]

问题描述 投票:2回答:1

这个问题已经在这里有一个答案:

我在我的web应用程序中使用的WebSocket(ws://)。现在我实现了SSL在我的web应用,所以我来实现安全的WebSocket(wss://)。所以我也跟着TooTallNate库文件来实现此之情况。

  1. Netty SSL and websockets
  2. SSLClientExample.java

但我得到的网址,浏览器控制台。

WebSocket connection to 'wss://localhost:9191/socket' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

为了实现安全的WebSocket,该算法我们需要通过下面的代码?

SSLContext context = SSLContext.getInstance(Algorithm);

所以,请大家帮我解决这个错误。

java ssl websocket java-websocket
1个回答
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的” 文件。这个小toolwill产生应保存在客户端和服务器端的会话密钥。

现在使用的工具。例如:

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 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是alomst相同。当你产生了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或“WS”无SSL。

所以,这可能是你的代码错误?

- >你没有实现在服务器端SSL所以它会拒绝连接

此代码工作完全和我没有测试它。我只postet的客户端,但服务器端将是相同的代码:)

我希望我可以帮你这么远。

© www.soinside.com 2019 - 2024. All rights reserved.