Skip to content

Client running into ERR_SSL_PROTOCOL_ERROR #1025

@y3pio

Description

@y3pio

Running into similar issue as #729 -- Tried the solution(?) posted on there to use file input stream:

File initialFile = new File("keystore.pfx");
InputStream is = new FileInputStream(initialFile);

Still no luck. Posted detailed description on Stackoverflow: https://stackoverflow.com/questions/79343476/need-help-setting-up-netty-socketio-ssl-on-spring-boot-application

My code below:

application.properties -

spring.application.name=feed-service

# SocketIO/Netty Config
socket.port=8081
socket.ssl.enabled=true
socket.ssl.key-store=/etc/letsencrypt/live/<my_server>/keystore.jks
socket.ssl.key-store-password=<redacted_password>

# SSL Config
server.port=8443
security.require-ssl=true
server.ssl.key-store=/etc/letsencrypt/live/<my_server>/keystore.p12
server.ssl.key-store-password=<redacted_password>
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat

SocketIO config class on backend:

@Component
@RequiredArgsConstructor
@Slf4j
public class SocketIOConfig {

  @Value("${socket.port}")
  private int socketPort;

  @Value("${socket.ssl.enabled}")
  private Boolean isSslEnabled;

  @Value("${socket.ssl.key-store}")
  private String keyStore;

  @Value("${socket.ssl.key-store-password}")
  private String keyStorePassword;

  // SocketIOServer class is used to create a socket server
  private SocketIOServer server;

  @Bean
  public SocketIOServer socketIOServer() {
    // Configuration object holds the server settings
    Configuration config = new Configuration();

    config.setPort(socketPort);
    config.setEnableCors(true);

    if (isSslEnabled) {
      //SSL
      log.info("[IO] SSL Enabled for SocketIO.");
      config.setKeyStorePassword(keyStorePassword);
      InputStream stream = getClass().getClassLoader().getResourceAsStream(keyStore);
      config.setKeyStore(stream);
    }

    server = new SocketIOServer(config);
    server.start();

    server.addConnectListener(client -> log.info("\n[IO] Client connected: {}\n", client.getSessionId()));
    server.addDisconnectListener(client -> log.info("\n[IO] Client disconnected: {}\n", client.getSessionId()));

    return server;
  }

  @PreDestroy
  public void stopSocketServer() {
    this.server.stop();
  }
}

ReactJS frontend client:

import React, { useState, useContext, useEffect } from "react";
import io from 'socket.io-client';
import { EventType, FeedableEventTypes } from '../types/EventType';

const socket = io('https://<my_server>:8081'); // TODO: Figure out how to set SSL on server.

const SocketIOContext = React.createContext();

export const SocketIOProvider = ({ children }) => {
  const [connectedFeeds, setConnectedFeeds] = useState(FeedableEventTypes);
  const [isInitialized, setIsInitialized] = useState(false);
  const defaultContext = {
    socket,
    connectedFeeds,
    setConnectedFeeds,
    isInitialized,
    setIsInitialized
  }

...rest of the code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions