手把手教你为基于Netty的IM生成自签名SSL/TLS证书调用源代码keytlsssl应用程序websocket

对于IM聊天应用来说,为了提升安全性,对聊天消息加密是常规操作。

注:对于那些付费购买了第3方权威CA机构签发的证书,他们都有相应的使用文档,这就没什么好说的。本文里的证书指的是不需要花钱的自签名证书。

学习交流:

2、知识准备

如果你对IM、Netty已基本上手,但对IM安全方面的技术概念有点理不清,建议必读《基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等》。

3、什么是Netty

Netty是一个JavaNIO技术的开源异步事件驱动的网络编程框架,用于快速开发可维护的高性能协议服务器和客户端。往通俗了讲,可以将Netty理解为:一个将JavaNIO进行了大量封装,并大大降低JavaNIO使用难度和上手门槛的超牛逼框架。(引用自《史上最通俗Netty框架入门长文:基本介绍、环境搭建、动手实战》)

4、什么是OpenSSL

OpenSSL是一个开放源代码的软件库,应用程序可以使用这个包来进行安全通信,它包括代码、脚本、配置和过程的集合。其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。OpenSSL整个软件包大概可以分成三个主要功能部分:SSL协议库、应用程序、密码算法库。

PS:OpenSSL的介绍就点到为止,如有兴趣,可仔细阅读《基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等》。

5、下载和安装OpenSSL

1)方法一:可以从OpenSSL的Github仓库下载源码自行编译(源码下载地址),对于一般使用者来说,自已编译着实有点麻烦,不推荐这么玩。

3)方法一:也可以直接用下面附件里的安装程序(这是我一直用的版本,版本较老,有兴趣可直接下载使用):

Openssl-windows-0.9.8k(52im.net).rar(874.97KB,下载次数:1,售价:1金币)

4)解决“openssl.cnf找不到”的问题:如果你安装好OpenSSL后,使用时报“openssl.cnf找不到”或“计算机缺少openssl.cnf”等之类错误提示,可以下载下面这个openssl.cnf文件。

openssl.cnf文件附件下载:

openssl_conf(52im.net).rar(4.63KB,下载次数:1,售价:1金币)

openssl.cnf文件解压缩后:

openssl.cnf文件配置使用:

以下是openssl.cnf文件的配置使用命令:(以我的安装目录为例)

C:\Openssl-windows-0.9.8k-out32dll>setOPENSSL_CONF=c:/WINDOWS/system32/openssl.cnf

准备就绪,接下来我们就可以开始生成SSL/TLS证书了!

6、生成Netty可用的SSL/TLS证书

6.1概述

经过实践,生成Netty可用的SSL/TLS证书需要4步:

接下来,跟着本节内容,一步步使用OpenSSL生成一个真正能在Netty中能使用的自签名证书。

6.2第一步:创建私钥证书

在CMD控制台下执行如下指令:(记得手动创建netty目录)

opensslgenrsa-des3-outnetty/netty-key.pem1024

提示:以上指令中,如无“-des3”参数,则Netty的代码中使用时将报“Filedoesnotcontainvalidprivatekey”等错误(如下图所示)。

6.3第二步:将私钥格式转成pk8

在CMD控制台下执行如下指令:

opensslpkcs8-innetty/netty-key2.pem-topk8-outnetty/netty-key2.pk8

提示1:如不转pk8格式,则Netty的代码中使用时会报以下错误:

提示2:如代码中不为key加入密码,则Netty的代码中使用时会报以下错误:

提示3:Netty的代码中使用时要加入上方生成Key证书时的密码即可:

6.4第三步:创建证书请求

opensslreq-new-outnetty/netty-req2.csr-keynetty/netty-key2.pem

提示:经上指令中,CommonName指明的是证书绑定的域名,你可以用域名或ip,本次生成用了子域名。

6.5第四步:生成公钥证书

opensslx509-req-inca/ca-req2.csr-outnetty/netty-cert2.crt-signkeynetty/netty-key2.pem-days3650

提示:out参数生成的是.crt,而在前面的是.pem,这只是扩展名区别,内容都一样。

6.6最终成果

7、实战代码

7.1概述

本节将为你演示如何在基于Netty的IM中使用上节中生成的证书。

为了让示例代码更具实战意义,本节的示例代码将引用的是开源IM框架MobileIMSDK的源码,如果有兴趣深入学习,可以从下面的开源仓库中下载到MobileIMSDK的完整源码。

7.2基于Netty的IM服务端如何开启SSL/TLS

首先将上节中生成的证书,放置到你的IM服务端磁盘目录下。以下截图和示例代码以MobileIMSDK的开源代码为例。

我们可以将证书放到这个位置:

使用证书的示例代码片段:(完整代码详见ServerLauncherImpl.java)

*创建SslContext对象,用于开启SSL/TLS加密传输。*@return如果成功创建则返回SslContext对象,否则返回nullprivatestaticSslContextcreateSslContext(){try{//证书文件InputStreamcertChainFile=ServerLauncherImpl.class.getResourceAsStream("certs/netty-cert2.crt");//私钥文件(注意:Netty只支持.pk8格式)InputStreamkeyFile=ServerLauncherImpl.class.getResourceAsStream("certs/netty-key2.pk8");//私钥密码StringkeyPassword="123456";//生成SslContext对象(为了方便理解,此处使用的是单向认证)SslContextsslCtx=SslContextBuilder.forServer(certChainFile,keyFile,keyPassword).clientAuth(ClientAuth.NONE).build();returnsslCtx;}catch(Exceptione){logger.warn("createSslContext()时出错了,原因:"+e.getMessage(),e);returnnull;

PS:如果你想自已动手完整运行一下,可以阅读《MobileIMSDK的Demo使用帮助:Server端》。

接下来的内容,我们将实现客户端连接到使用SSL/TLS证书的NettyIM服务端。

7.3Android端如何开启SSL/TLS

因为服务端已经开启了SSL/TLS加密,我们在开发IM的客户端时,该如何启用SSL/TLS呢(否则你未开启SSL/TLS的客户端肯定是连不上你的服务端的)?

这里为了方便示例,我们同样以MobileIMSDK的Android端开源代码为例。

Android端开启SSL/TLS加密的示例代码片段:(完整代码详见IMClientManager.java)

*创建SslContext对象,用于开启SSL/TLS加密传输。*@return如果成功创建则返回SslContext对象,否则返回nullpublicSslContextcreateSslContext(){SslContextsslContext=null;try{sslContext=SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();Log.d(TAG,"【IMCORE-TCP】已开启SSL/TLS加密(单向认证),且sslContext创建成功。");}catch(Exceptione){Log.w(TAG,"【IMCORE-TCP】创建sslContext时出错,原因是:"+e.getMessage(),e);returnsslContext;

PS:如果你想自已动手完整运行一下,可以阅读《MobileIMSDK的Demo使用帮助:Android版》。

7.4iOS端如何开启SSL/TLS

同样的,iOS端该如何开启SSL/TLS呢?

这里我们依然以MobileIMSDK的iOS端开源代码为例(MobileIMSDK的iOS使用的是CocoaAsyncSocket网络库,如果你也是用的它,就可以直接参考了,因为开启了SSL/TLS的CocoaAsyncSocket代码跟未开启加密的代码用法差异较多,且这方面可以参考的资料较少)。

iOS端开启SSL/TLS加密的示例代码片段:(完整代码详见LocalSocketProvider.m)

说明:CocoaAsyncSocket中开启SSL/TLS并不像Android和Java中那么简单,它不只是几行代码的事,而是整个数据读取逻辑的变化。

PS:如果你想自已动手完整运行一下,可以阅读《MobileIMSDK的Demo使用帮助:iOS版》。

7.5Java桌面端如何开启SSL/TLS

Java桌面端开启SSL/TLS的代码跟Android端是一样。我们同样以MobileIMSDK的Java端开源代码为例。

Java桌面端开启SSL/TLS加密的示例代码片段:(完整代码详见IMClientManager.java)

PS:如果你想自已动手完整运行一下,可以阅读《MobileIMSDK的Demo使用帮助:Java版》。

7.6H5端如何开启SSL/TLS

我这里说的H5端,指的是能支持标准HTML5端WebSocket协议的PC浏览器端、手机移动端内嵌的Web引擎等场景。

H5端能开启SSL/TLS有两个前提:

满足以上两点后,H5端什么代码都不需改动,只需将请求url由“ws”改成“wss”:

8、参考资料

[1]MobileIMSDK开源工程源码

[2]史上最通俗Netty框架入门长文:基本介绍、环境搭建、动手实战

[3]基于Netty,从零开发IM

[4]基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等

THE END
1.网站SSL证书自签名及谷歌浏览器报错提醒处理SSL证书太贵了,小老板门又不想花这个钱。 SSL还要定期续费,忘记续费导致线上系统异常,后果难料。。 很多功能、三方接口又?要用HTTPS交互方式。 自签名他来了。。。 又能白嫖了,每年都省出几千几万的成本,老板的嘴角都笑裂开了。。 以下以本机IP:192.168.0.88 来创建一个crt证书,后续可以通过https://192.168https://blog.csdn.net/mekave/article/details/136864163
2.nginx配置证书和私钥进行SSL通信验证@[toc]一背景正常项目的这将使用私钥和证书请求生成一个自签名证书文件,名为 certificate.crt。 5. 使用证书:现在你已经生成了自签名证书 certificate.crt,可以将其用于服务器或应用程序的 SSL/TLS 配置中。具体步骤取决于你使用的服务器软件或编程语言。 请注意,自签名证书不会被公共信任的根证书颁发机构所信任,因此在使用自签名证书时,https://article.juejin.cn/post/7464036507452981260
3.如何创建自签名的SSL证书-subj "/C=CN/ST=Tianjin/L=Tianjin/O=Mocha/OU=Mocha Software/CN=test1.sslpoc.com/emailAddress=test@mochasoft.com.cn" \ -new \ -key server.key \ -out server.csr # 3.生成自签名证书 $ openssl x509 \ -req \ -days 3650 \ https://www.jianshu.com/p/e5f46dcf4664
4.自签名ssl证书自签名SSL证书是一种由网站自行生成的SSL证书,它通过加密通讯,保护网站的安全性。如果您需要在自己的网站上使用SSL证书,您可以购买商用SSL证书,或者使用自签名SSL证书。 相较于商用SSL证书,使用自签名SSL证书可以极大地降低成本。此外,自签名SSL证书是由您的网站服务器自行签发,因此您也不需要等待审核过程,可以立即开始https://www.ihuyi.com/pd/ssl/ziqianmingsslzhengshu.html
5.自签名免费SSL证书签发输入证书请求CSR文件,选择需要的证书哈希签名算法,点击获取免费证书,复制保存生成的证书文件为yourdomain.crt或点击下载证书文件按钮。 该证书是CHINASSL CA免费签发的自签名SSL证书,证书有效期1年,服务器端需要安装证书与根证书文件Root Certificate,客户端也需要安装导入根证书才能被信任。点击下载 https://www.chinassl.net/ssltools/free-ssl.html
6.什么是自签名证书?自签名SSL证书的优缺点?什么是自签名SSL证书? 自签名证书是由不受信的CA机构颁发的数字证书,也就是自己签发的证书。与受信任的CA签发的传统数字证书不同,自签名证书是由一些公司或软件开发商创建、颁发和签名的。虽然自签名证书使用的是与X.509证书相同的加密密钥对架构,但是却缺少受信任第三方(如Sectigo)的验证。在颁发过程中缺乏独立验https://www.racent.com/blog/what-is-a-self-signed-certificate
7.ssl自签名证书是什么怎么申请免费ssl自签名证书什么是自签名SSL证书? 自签名SSL证书是由创建它的人而不是受信任的证书颁发机构签名的证书。自签名证书可以与受信任的CA签名SSL证书具有相同的加密级别。被任何浏览器识别为有效的自签名证书。如果您使用的是自签名证书,则网络浏览器将向访问者显示警告,提示该网站证书无法验证。自签名证书主要用于测试https://www.xinnet.com/knowledge/2142342829.html
8.在线生成自签名ssl证书生成自签名SSL证书是一种用于加密网站通信的方法,它可以提供安全的数据传输。 虽然自签名证书不像由受信任的第三方机构颁发的证书那样被广泛接受,但在某些情况下仍然有用。 要生成自签名SSL证书,您可以按照以下步骤进行操作: 1. 安装OpenSSL:首先,您需要在您的计算机上安装OpenSSL工具。 https://www.zwtrus.com/detail?article_id=1153
9.自签名ssl证书是什么样的?为什么会出现自签名ssl证书?当下科学技术的发展给我们带来了许多便利,但也带来了更多的潜在威胁,比如信息安全变得越来越重要。因此,目前每一个企业网站运营者几乎都会给网站安装ssl证书,实现数据加密。但是,由于网络安全意识不强,部分企业为了节约成本,选择不做或者使用免费的自签名SSL证书。那https://www.juming.com/zx/13475.html
10.SSL自签名证书的优缺点总之,在开发、测试环境或内部系统中,使用自签名SSL证书可能是一个成本效益较高的选择;但对于对外服务的生产环境,建议使用权威证书颁发机构签名的证书,以获得更好的安全性和信任度。 申请可信的SSL证书:https://www.ihuandu.com/ssl.htmlhttps://www.ihuandu.com/pr/focus/692.html
11.在线生成自签名SSL证书/X509证书(GenerateSelfSignCER)在线生成自签名SSL证书/X509证书以及国密SM2证书,在线自签名证书生成器,可用于SSL/HTTPS测试等,支持生成自签名CA证书。https://www.bkssl.com/ssl/selfsign-in-browser
12.自签名SSL证书是什么?有什么优点和缺点?如今,网站的运营者也愈加重视网络安全,希望通过部署SSL证书的方式来起到保护用户隐私及数据安全的作用。而在众多SSL证书中,自签名SSL证书由于不需要支付一定的费用,因此成为备受关注的选择。那么,自签名SSL证书到底是什么呢?本文将为大家展开详细的介绍。 自签名SSL证书也被称为自签名https证书,它是一种自行生成和签名https://www.anxinssl.com/14476.html
13.为Apache创建自签名SSL证书腾讯云开发者社区TLS/SSL是用于将正常流量包装在受保护的加密包装中的Web协议。得益于此技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部各方拦截。证书系统还可以帮助用户验证他们正在连接的站点的身份。 在本教程中,我们将向您展示如何在Ubuntu18.04上设置用于Apache Web服务器的自签名SSL证书。 https://cloud.tencent.com/developer/article/1165840
14.HTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSLHTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSL证书实战 2019-12-23 1 背景 对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好。 http协议没有任何的加密以及身份验证的机制,即时是token认证,也非常容易遭遇窃听、劫持、篡改,因此会造成个人隐私泄露,恶意的流量劫持等严重的安全问题。https://blog.51cto.com/u_11908275/6943581
15.有什么工具可以生成SSL自签名证书?自签名SSL证书是由证书颁发机构(CA)颁发的,而不是由CA颁发的。它由网站所有者自行生成,用于内部测试或临时使用。虽然自签名SSL证书无法在浏览器中显示安全锁图标,但它仍然可以提供加密保护,确保数据在传输过程中的安全性。 那么,有什么工具可以生成SSL自签名证书呢? https://blog.itpub.net/70027286/viewspace-3023005/
16.YTKNetwork扩展支持自签名证书SSL通信·Issue#125·kanyun因为现在Apple都建议使用SSL连接来通信,原来是在调研系统支持自签名SSL,接着又看AFNetworking对自签名SSL的支持,之后又机缘巧合之下看到YTKNetowork,觉得这种每种请求都作为一个类来实现的设计很棒,然后在实际测试时发现对这种自签名SSL连接扩展性不好,就自己改动了下做了对自签名证书SSL通信的扩展。当然由于自己水平有https://github.com/yuantiku/YTKNetwork/issues/125
17.创建自签名SSL证书其中,<ver> 是GSKit 版本号,<filename> 是密钥数据库文件的名称,<Number of days certificate is valid> 是证书实际生效天数,而 是描述性标签,用于帮助您识别该文件(例如,您可以使用 myselfsigned 之类的标签)。父主题: 获取并安装 SSL 证书和密钥。https://www.ibm.com/docs/zh/spss-modeler/18.1.1?topic=keys-creating-self-signed-ssl-certificate
18.SSL在线工具在线ssl测试证书颁发在线自签名证书生成在线生成ssl测试证书(自签名证书),通过设置签发域名、签发者、密钥算法、签名算法等,方便测试系统HTTPS的可行性。https://www.ssleye.com/ssltool/self_sign.html
19.CentOS7上自签名SSL证书生成教程自签证书是免费的,不是CA机构颁发的证书,仅适用于测试和内部使用,生成的证书外人访问会提示不安全。本文讲的是如何自己自签一个SSL证书供自己使用。CentOS7上生成自签名SSL证书很简单,下面来看教程。 安装OpenSSL 进入ssh终端,输入以下命令 yum install openssl -y 如https://wxsnote.cn/4746.html
20.自签名证书ssl生成自签名证书ssl生成方式RSASL是一个私钥、私钥和私钥,需要使用私钥对3位代码。使用“Authorization”生成的公私钥对,用户需要在本地保存,并卸载该证书。用户可以选择手动生成“.ini”格式的私钥文件。私钥文件保存私钥文件为“.pem”格式。当用户使用Xshell工具登录Linuxhttps://www.huaweicloud.com/zhishi/edits-17563185.html
21.Nginx实现自签名SSL证书生成与配置实现nginx自签名 SSL 证书可以提供加密连接,但由于没有受信任的第三方机构进行验证,因此会在浏览器中显示安全警告。自签名证书仅适用于测试环境或个人使用,并不适用于生产环境。 到此这篇关于Nginx实现自签名SSL证书生成与配置实现的文章就介绍到这了,更多相关Nginx 自签名SSL证书内容请搜索脚本之家以前的文章或继续浏览下面的https://www.jb51.net/server/297067v08.htm
22.ssl自签名证书是什么SSL自签名证书是一种由服务器自己创建的,用于加密网站和客户端之间通信的证书。 (图片来源网络,侵删) SSL自签名证书是一种数字证书,它由一个实体(通常是服务器或网站)创建并用于验证该实体的身份,这种类型的证书不需要通过第三方证书颁发机构(CA)进行验证,而是直接由创建者自己签名。 https://www.kdun.com/ask/603836.html
23.自签SSL证书信任设置教程4. 注意事项:在移动设备上信任自签名证书可能增加设备的安全风险,应谨慎操作。 总结: 通过本文的介绍,读者应该已经了解了自签名SSL证书的基本概念、使用场景以及在不同平台上设置信任自签名证书的方法。尽管自签名证书在某些情况下非常有用,但由于其安全性和可信度相对较低,建议仅在必要的情况下使用,并遵循最佳实践来https://seo.batmanit.cn/b/1561.html
24.如何修复NET::ERRCERTCOMMONNAMEINVALID错误您的站点安装了自签名SSL证书,并且您的浏览器无法识别它是有效的或安全的。 您的防病毒软件正在阻止您的SSL连接。 一个浏览器扩展的干扰与您的网站的SSL连接。 您的代理设置配置错误。 您的浏览器缓存或SSL状态已损坏。 如您所见,许多不同的因素都可能导致NET::ERR_CERT_COMMON_NAME_INVALID错误。这可能会使确https://www.wbolt.com/net-err_cert_common_name_invalid.html
25.Win10openssl生成SSL证书的教程在这个命令中,`-req`选项表示使用前面创建的证书请求,`-days`选项表示证书的有效期,`-signkey`选项表示使用前面创建的私钥文件进行签名,`-out`选项表示输出生成的自签名证书到名为`cert.pem`的文件中。 完成:现在你已经生成了自签名SSL证书,私钥文件为key.pem,证书请求文件为csr.pem,证书文件为cert.pem。 https://ssl.idcspy.net/11845.html