Java 具有给定PKCS12的Netty websocket客户端示例

Java 具有给定PKCS12的Netty websocket客户端示例,java,websocket,netty,pkcs#12,Java,Websocket,Netty,Pkcs#12,我有client.p12文件和我的密码,我正在尝试使用建立websocket连接。目前我在OkHttpClient中有一个工作示例。但我很难把它映射到netty 我的服务器给了我这个要连接的域 在OkHttpClient中,以下代码起作用 OkHttpClient=getClientinfo; Request-Request=new Request.Builder。urlhttps://api.server.com +/messaging.build; WebSocket WebSocket=c

我有client.p12文件和我的密码,我正在尝试使用建立websocket连接。目前我在OkHttpClient中有一个工作示例。但我很难把它映射到netty

我的服务器给了我这个要连接的域

在OkHttpClient中,以下代码起作用

OkHttpClient=getClientinfo; Request-Request=new Request.Builder。urlhttps://api.server.com +/messaging.build; WebSocket WebSocket=client.newWebSocketrequest,侦听器; 这里的getClient代码如下所示:

公共静态OkHttpClient getClientConnectionInfo信息{ KeyStore-appKeyStore=KeyStore.getInstancePKCS12; appKeyStore.loadnew FileInputStreamclient.p12,MyPassword.ToCharray; KeyManagerFactory KeyManagerFactory=KeyManagerFactory.getInstanceSunX509; keyManagerFactory.initappKeyStore,info.getPassword.tocharray; TrustManagerFactory TrustManagerFactory=TrustManagerFactory.getInstanceSunX509; trustManagerFactory.initKeyStore为空; TrustManager[]TrustManager=trustManagerFactory.GetTrustManager; 如果trustManagers.length!=1 | |!trustManagers[0]实例为X509TrustManager{ 抛出新的非法状态异常 意外的默认信任管理器:+Arrays.toString信任管理器; } X509TrustManager trustManager=X509TrustManager trustManager[0]; SSLContext context=SSLContext.getInstanceTLS; context.initnull,新信任管理器[]{TrustManager},null; context.initkeyManagerFactory.getKeyManagers,null,新SecureRandom; OkHttpClient.Builder= 新建OkHttpClient.Builder.sslSocketFactorycontext.getSocketFactory,trustManager; builder.retryOnConnectionFailuretrue; 返回builder.build; } 既然上面的代码运行良好,我将尝试在Netty中实现这一点。因此,看看示例代码,它只接受ws和wss协议。在上面的示例中,HTTPS请求使用适当的头升级到WebSocket。所以我的理解是如果我提供域名作为wss:////api.server.com/messaging 然后,它将首先建立https连接,然后将其升级到WebSocket

现在我不知道如何设置证书和密码

//我创建了一个密钥库,如下所示 KeyStore KeyStore=KeyStore.getInstancePKCS12; FileInputStream instream=newfileinputstreamnewfileclient.p12; 试一试{ keyStore.loadinstream,MyPassword.tocharray; }最后{ 流内关闭; } 最终布尔ssl=wss.equalsIgnoreCasescheme; 最终SslContext sslCtx; 如果ssl{ //如何使用此客户端指定上述密钥库? sslCtx=SslContextBuilder.forClient .TrustManagerSecureTrustManagerFactory.INSTANCE.build; }否则{ sslCtx=null; } SSlContextBuilder有一个采用KeyManagerFactory的方法:

SslContextBuilder.forClient()
    .keyManager(keyManagerFactory)
    .trustManager(InsecureTrustManagerFactory.INSTANCE)
    .build();