3

我已阅读stackoverflow 中的相关问题。但是,答案仅说明如何配置身份验证检查。我需要在 Spring Boot 中使用 rsocket 加密所有传输的数据。如何在带有 SSL/TLS 的 Spring Boot 中使用 tls。当我如下所示初始化 rsocket 客户端时,我找不到任何受支持的方法,尽管我知道 rsocket 它本身可以支持 SSL/TLS。我找到了一些例子:示例

        this.rsocketRequester = rsocketRequesterBuilder.setupRoute("sidecar-client")
            .setupData("test_data")
            .rsocketConnector(connector -> connector.acceptor(responder))
            .connectTcp("localhost", 7000)
            .block();

Summary of my question:
1. Does rsocket in springboot support SSL/TLS ?
2. If spring boot support rsocket with SSL/TLS, are there any examples can be referenced
4

2 回答 2

1

是的,修改你的例子

安全 TCP (SSL)

this.rsocketRequester = rsocketRequesterBuilder.setupRoute("sidecar-client")
            .setupData("test_data")
            .rsocketConnector(connector -> connector.acceptor(responder))
            .connect(TcpClientTransport.create(TcpClient.create().secure().host("localhost").port(7000)))
            .block();

或安全的网络套接字

this.rsocketRequester = rsocketRequesterBuilder.setupRoute("sidecar-client")
            .setupData("test_data")
            .rsocketConnector(connector -> connector.acceptor(responder))
                  .connectWebSocket(URI.create("https://rsocket-demo.herokuapp.com/rsocket"))
            .block();
于 2020-06-27T07:59:45.187 回答
1
  1. springboot 中的 rsocket 是否支持 SSL/TLS ?

是的 - 无论是否使用 rsocket,您都需要像通常那样配置 SSL / TLS。

在您的 application.yml 添加以下行:

server:
  port: 8443
  ssl:
    enabled: true
    client-auth: none
    protocol: "TLS"
    key-store: "classpath:certs/local/server.jks"
    key-store-type: "JKS"
    key-store-password: "changeit"
    trust-store: "classpath:certs/trust.jks"
    trust-store-password: "changeit"

spring:
  rsocket:
    server:
      mapping-path: "/"
      transport: websocket

在客户端使用 wss 而不是 ws

const _rSocketClient = function()
{
   return  new RSocketClient({
       setup: {
           // ms btw sending keepalive to server
           keepAlive: 60000,
           // ms timeout if no keepalive response
           lifetime: 180000,
           // format of `data`
           dataMimeType: 'application/json',
           // format of `metadata`
           metadataMimeType: MESSAGE_RSOCKET_COMPOSITE_METADATA.string,
       },
       transport: new RSocketWebSocketClient(
           {
               // Connect as secure websocket
               url : "wss://" + R_SOCKET_HOST + ":" + R_SOCKET_PORT,
               debug: true
           },
           BufferEncoders
       ),
   });
}
  1. 如果spring boot支持带有SSL/TLS的rsocket,有没有可以参考的例子

我也找不到任何例子,不得不自己学习。您会发现的大多数 RSocket 示例都使用 RSocketFactory,它现在已被弃用,并且 api 不断变化 - 所以总是获取最新的并自己尝试。

于 2020-06-28T17:45:08.820 回答