C:\Openssl-windows-0.9.8k-out32dll>set OPENSSL_CONF=c:/WINDOWS/system32/openssl.cnf
openssl genrsa -des3 -out netty/netty-key.pem 1024
openssl pkcs8 -in netty/netty-key2.pem -topk8 -out netty/netty-key2.pk8
openssl req -new -out netty/netty-req2.csr -key netty/netty-key2.pem
openssl x509 -req -in ca/ca-req2.csr -out netty/netty-cert2.crt -signkey netty/netty-key2.pem -days 3650
/** * 创建SslContext对象,用于开启SSL/TLS加密传输。 * * @return 如果成功创建则返回SslContext对象,否则返回null */ private static SslContext createSslContext() { try { // 证书文件 InputStream certChainFile = ServerLauncherImpl.class.getResourceAsStream("certs/netty-cert2.crt"); // 私钥文件(注意:Netty只支持.pk8格式) InputStream keyFile = ServerLauncherImpl.class.getResourceAsStream("certs/netty-key2.pk8"); // 私钥密码 String keyPassword = "123456"; // 生成SslContext对象(为了方便理解,此处使用的是单向认证) SslContext sslCtx = SslContextBuilder.forServer(certChainFile, keyFile, keyPassword).clientAuth(ClientAuth.NONE).build(); return sslCtx; } catch (Exception e) { logger.warn("createSslContext()时出错了,原因:"+e.getMessage(), e); } return null; }
/** * 创建SslContext对象,用于开启SSL/TLS加密传输。 * * @return 如果成功创建则返回SslContext对象,否则返回null */ public SslContext createSslContext() { SslContext sslContext = null; try { sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build(); Log.d(TAG, "【IMCORE-TCP】已开启SSL/TLS加密(单向认证),且sslContext创建成功。"); } catch (Exception e) { Log.w(TAG, "【IMCORE-TCP】创建sslContext时出错,原因是:" + e.getMessage(), e); } return sslContext; }
/** * 当socket已经完整连接并准备好读和写数据时,将调用此方法。 */ - (void)socket:(MBGCDAsyncSocket *)socket didConnectToHost:(NSString *)host port:(uint16_t)port { if([ClientCoreSDK isENABLED_DEBUG]) NSLog(@"【IMCORE-TCP-SOCKET】成收到的了TCP的connect反馈, isConnected? %d、已开启ssl加密? %d", [socket isConnected], [ClientCoreSDK isSSL]); // 如果未开启SSL加密传输,则正常进入连接完成后的代码逻辑 if(![ClientCoreSDK isSSL]) { [self whenDidConnect:socket]; } // 如果已开启SSL加密传输,则需要在回调中调用startTLS方法,以便实现跟服务端的SSL握手过程, // 如果ssl握手成功,则会通过 socketDidSecure: 回调通知开发者 else { // 配置 SSL/TLS 设置信息 NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:3]; // 允许自签名证书手动验证 [settings setObject:@YES forKey:GCDAsyncSocketManuallyEvaluateTrust]; // 经测试,本项不设置并不影响SSL的启用 // [settings setObject:@"此处填服务器IP地址" forKey:GCDAsyncSocketSSLPeerName]; // 如果不是自签名证书,而是权威证书颁发机构注册申请的证书,这个settings字典可不传(将使用GCDAsyncSocket的默认配置) [socket startTLS:settings]; } } /** * 当SSL握手成功后(也就是上方调用startSSL:方法后),将调用此方法。 */ - (void)socketDidSecure:(MBGCDAsyncSocket *)socket { [self whenDidConnect:socket]; } /** * Allows a socket delegate to hook into the TLS handshake and manually validate the peer it's connecting to. */ - (void)socket:(MBGCDAsyncSocket *)sock didReceiveTrust:(SecTrustRef)trust completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler { NSLog(@"【IMCORE-TCP-SOCKET】didReceiveTrust..."); // 以下没有做更复杂的ssl证书验证逻辑,如您需要实现更强大的双向认证等逻辑,可以参考这里: // [url=https://github.com/FuangCao/cavan/blob/338ca8c09d6c78c5b38b95c6ffe994241afcc96e/xcode/TestSSL/TestSSL/ViewController.m]https://github.com/FuangCao/cava ... SL/ViewController.m[/url] if(completionHandler) { completionHandler(YES); } }
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用:921124136 发表于 2023-02-20 17:59 作者您好,请问ssl证书可以放nginx配置吗?
引用:JackJiang 发表于 2023-02-20 18:17 这要看nginx需要什么样格式的证书了,你按它要求的格式生成即可。 本篇文章里,我是针对netty要求的格 ...
引用:jeremy111 发表于 2023-04-25 20:15 请问下,nginx的配置wss的ssl和netty 的ssl可以是同一个吗
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
本人属:兔
本人属:牛
本人属:龙
本人属:羊
Copyright © 2014-2023 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.125000 second(s), 38 queries , Gzip On.