-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Open
Description
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
Labels
No labels