我想在websocket通信之上創建基於證書的身份驗證。 所以我創建了一個WebSocket的serverEndpoint,併成立了客戶端身份驗證SSL與碼頭的幫助下,像這樣:從安全的websocket連接中提取客戶端X509證書
Server server = new Server();
//Create SSL ContextFactory with appropriate attributes
SslContextFactory sslContextFactory = new SslContextFactory();
//Set up keystore path, truststore path, passwords, etc
...
sslContextFactory.setNeedClientAuth(true);
//Create the connector
ServerConnector localhostConnector = new ServerConnector(server, sslContextFactory);
localhostConnector.setHost(...);
localhostConnector.setPort(...);
server.addConnector(localhostConnector);
//Create ContextHandler
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/example");
server.setHandler(context);
// Initialize the JSR-356 layer and add custom Endpoints
ServerContainer container = WebSocketServerContainerInitializer.configureContext(context);
container.addEndpoint(Endpoint1.class); //Annotated class
container.addEndpoint(Endpoint2.class);
SSL配置似乎是正確的,因爲我可以用SSL連接到不同的端點我寫的客戶端(錯誤的證書導致連接終止)。
現在,我想提取客戶端證書中包含的信息。我看到了,我可以從一個的SSLSession拿到證書,但我在端點要訪問的唯一會話是一個「正常」的會議:
@OnOpen
@Override
public void open(final Session session, final EndpointConfig config)
有莫名其妙的方式存儲證書或包含的信息和將它傳遞給端點?
感謝所有幫助:)
嘿,你有工作項目樣本嗎?我正在嘗試部署websocket服務器,並且還需要提取客戶端證書。我沒有運氣讓你像你所描述的那樣工作。 – user1563721