网易首页 > 网易号 > 正文 申请入驻

netty系列之:对聊天进行加密

0
分享至

简介

在之前的文章中,我们讲到了怎么使用netty建立聊天室,但是这样的简单的聊天室太容易被窃听了,如果想要在里面说点悄悄话是很不安全的,怎么办呢?学过密码学的朋友可能就想到了一个解决办法,聊天的时候对消息加密,处理的时候再对消息解密即可。

当然在netty中上述的工作都不需要我们手动来实现,netty已经提供了支持SSL的channel供我们选择,一起来看看吧。

PKI标准

在讲netty的具体支持之前,我们需要先了解一下公钥和私钥的加密标准体系PKI。PKI的全称是Public Key Infrastructure,也就是公钥体系。用于规范公钥私募进行加密解密的规则,从而便于不同系统的对接。

事实上PKI标准已经有两代协议了。

第一代的PKI标准主要是由美国RSA公司的公钥加密标准PKCS,国际电信联盟的ITU-T X.509,IETF的X.509,WAP和WPKI等标准组成。但是因为第一代PKI标准是基于抽象语法符号ASN.1进行编码的,实现起来比较复杂和困难,所以产生了第二代PKI标准。

第二代PKI标准是由微软、VeriSign和webMethods三家公司在2001年发布的基于XML的密钥管理规范也叫做XKMS。

事实上现在CA中心使用的最普遍的规范还是X.509系列和PKCS系列。

X.509系列主要由X.209、X.500和X.509组成,其中X.509是由国际电信联盟(ITU-T)制定的数字证书标准。在X.500基础上进行了功能增强,
X.509是在1988年发布的。X.509证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。

而PKCS是美国RSA公司的公钥加密标准,包括了证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。它定义了一系列从PKCS#1到PKCS#15的标准。

其中最常用的是PKCS#7、PKCS#12和PKCS#10。PKCS#7 是消息请求语法,常用于数字签名与加密,PKCS#12是个人消息交换与打包语法主要用来生成公钥和私钥。PKCS#10是证书请求语法。

各类证书的后缀和转换

操作过证书的朋友可能会对证书的后缀眼花缭乱,一般来说会有DER、CRT、CER、PEM这几种证书的后缀。

DER表示证书的内容是用二进制进行编码的。

PEM文件是一个文本文件,其内容是以“ – BEGIN -” 开头的,Base64编码的字符。

CRT和CER基本上是等价的,他们都是证书的扩展,也是文本文件,不同的是CRT通常用在liunx和unix系统中,而CER通常用在windows系统中。并且在windows系统中,CER文件会被MS cryptoAPI命令识别,可以直接显示导入和/或查看证书内容的对话框。

KEY文件,主要用来保存PKCS#8标准的公钥和私钥。

下面的命令可以用来查看文本证书内容:

openssl x509 -in cert.pem -text -noout
openssl x509 -in cert.cer -text -noout
openssl x509 -in cert.crt -text -noout

下面的命令可以用来查看二进制证书内容:

openssl x509 -in cert.der -inform der -text -noout

下面是常见的PEM和DER相互转换:

PEM到DER

openssl x509 -in cert.crt -outform der-out cert.der

DER到PEM

openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

netty中启动SSL server

事实上这个标题是不对的,netty中启动的server还是原来那个server,只是对发送的消息进行了加密解密处理。也就是说添加了一个专门进行SSL操作的Handler。

netty中代表ssl处理器的类叫做SslHandler,它是SslContext工程类的一个内部类,所以我们只需要创建好SslContext即可通过调用newHandler方法来返回SslHandler。

让服务器端支持SSL的代码:

ChannelPipeline p = channel.pipeline();
SslContext sslCtx = SslContextBuilder.forServer(...).build();
p.addLast("ssl", sslCtx.newHandler(channel.alloc()));

让客户端支持SSL的代码:

ChannelPipeline p = channel.pipeline();
SslContext sslCtx = SslContextBuilder.forClient().build();
p.addLast("ssl", sslCtx.newHandler(channel.alloc(), host, port));

netty中SSL的实现有两种方式,默认情况下使用的是OpenSSL,如果OpenSSL不可以,那么将会使用JDK的实现。

要创建SslContext,可以调用SslContextBuilder.forServer或者SslContextBuilder.forClient方法。

这里以server为例,看下创建流程。SslContextBuilder有多种forServer的方法,这里取最简单的一个进行分析:

public static SslContextBuilder forServer(File keyCertChainFile, File keyFile) {
return new SslContextBuilder(true).keyManager(keyCertChainFile, keyFile);
}

该方法接收两个参数,keyCertChainFile是一个PEM格式的X.509证书文件,keyFile是一个PKCS#8的私钥文件。

熟悉OpenSSL的童鞋应该知道使用openssl命令可以生成私钥文件和对应的自签名证书文件。

具体openssl的操作可以查看我的其他文章,这里就不详细讲解了。

除了手动创建证书文件和私钥文件之外,如果是在开发环境中,大家可能希望有一个非常简单的方法来创建证书和私钥文件,netty为大家提供了SelfSignedCertificate类。

看这个类的名字就是知道它是一个自签名的证书类,并且会自动将证书文件和私钥文件生成在系统的temp文件夹中,所以这个类在生产环境中是不推荐使用的。默认情况下该类会使用OpenJDK’s X.509来生成证书的私钥,如果不可以,则使用 Bouncy Castle作为替代。

netty中启动SSL client

同样的在client中支持SSL也需要创建一个handler。客户端的SslContext创建代码如下:

// 配置 SSL.
final SslContext sslCtx = SslContextBuilder.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE).build();

上面的代码我们使用了一个InsecureTrustManagerFactory.INSTANCE作为trustManager。什么是trustManager呢?

当客户端和服务器端进行SSL连接的时候,客户端需要验证服务器端发过来证书的正确性,通常情况下,这个验证是到CA服务器中进行验证的,不过这样需要一个真实的CA证书环境,所以在测试中,我们使用InsecureTrustManagerFactory,这个类会默认接受所有的证书,忽略所有的证书异常。

当然,CA服务器也不是必须的,客户端校验的目的是查看证书中的公钥和发送方的公钥是不是一致的,那么对于不能联网的环境,或者自签名的环境中,我们只需要在客户端校验证书中的指纹是否一致即可。

netty中提供了一个FingerprintTrustManagerFactory类,可以对证书中的指纹进行校验。

该类中有个fingerprints数组,用来存储安全的授权过的指纹信息。通过对比传入的证书和指纹,如果一致则校验通过。

使用openssl从证书中提取指纹的步骤如下:

openssl x509 -fingerprint -sha256 -in my_certificate.crt
总结

通过设置client和server端的SSL handler,就可以实现客户端和服务器端的加密消息传输。

本文的例子可以参考:learn-netty4

本文已收录于 http://www.flydean.com/12-netty-securechat/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
国家白送的电视信号6月底全覆盖!你家窗台还没插上那根小天线?

国家白送的电视信号6月底全覆盖!你家窗台还没插上那根小天线?

小蜜情感说
2026-06-21 11:32:22
抗议特朗普威胁言论 伊朗代表团离开谈判地点

抗议特朗普威胁言论 伊朗代表团离开谈判地点

财联社
2026-06-22 01:02:04
俄媒提醒:比起稀土中国手里还有一张王牌,才是让美欧真正忌惮的

俄媒提醒:比起稀土中国手里还有一张王牌,才是让美欧真正忌惮的

影孖看世界
2026-06-19 23:29:37
媒体称霍尔木兹海峡船舶通行量降至0 海峡目前已在伊朗控制下处于封锁状态

媒体称霍尔木兹海峡船舶通行量降至0 海峡目前已在伊朗控制下处于封锁状态

每日经济新闻
2026-06-21 20:57:05
求是网罕见喊话“修复居民资产负债表”,这次事情可能真有些不一样了!

求是网罕见喊话“修复居民资产负债表”,这次事情可能真有些不一样了!

新浪财经
2026-06-21 23:10:11
是谁在有计划、有系统、有组织的摧毁我们的义务教育?

是谁在有计划、有系统、有组织的摧毁我们的义务教育?

李老师讲最真教育
2026-06-19 19:17:32
特朗普称美国或收取中东地区20%的石油收益

特朗普称美国或收取中东地区20%的石油收益

新华社
2026-06-21 22:28:03
央视曝光!多款水果跌落神坛,滥用甜味剂8000倍甜度、违规防腐剂

央视曝光!多款水果跌落神坛,滥用甜味剂8000倍甜度、违规防腐剂

哄动一时啊
2026-06-21 19:52:09
虎扑老哥看世界杯大破防:原来美国球场修得真不赖

虎扑老哥看世界杯大破防:原来美国球场修得真不赖

影视情报室
2026-06-21 00:33:51
5月刚跟孙颖莎正面对决,6月官宣怀孕,孕肚都隆起好几个月,太勇

5月刚跟孙颖莎正面对决,6月官宣怀孕,孕肚都隆起好几个月,太勇

草莓解说体育
2026-06-22 01:30:44
怪不得地主恶霸非要霸占白毛女,这是原型罗昌秀救出时的四张照片

怪不得地主恶霸非要霸占白毛女,这是原型罗昌秀救出时的四张照片

云霄纪史观
2026-06-22 02:02:10
比2008更恐怖!84岁罗杰斯终极预言:今年爆发一生最惨烈危机

比2008更恐怖!84岁罗杰斯终极预言:今年爆发一生最惨烈危机

流苏晚晴
2026-06-14 19:47:58
突发!知名上市公司副总裁交通事故去世,年仅40岁

突发!知名上市公司副总裁交通事故去世,年仅40岁

大风新闻
2026-06-21 19:46:05
让人揪心啊!武汉一高端小区暴雨过后,地下车库车辆大半泡在水中

让人揪心啊!武汉一高端小区暴雨过后,地下车库车辆大半泡在水中

火山詩话
2026-06-21 18:43:20
李若彤参观驻港部队,换上军装端起枪,这身板绝了

李若彤参观驻港部队,换上军装端起枪,这身板绝了

落雪听梅a
2026-06-21 14:21:41
克洛普盛赞日本队:横扫只是开始,世界杯最大黑马成真正争冠热门

克洛普盛赞日本队:横扫只是开始,世界杯最大黑马成真正争冠热门

体育闲话说
2026-06-21 21:44:21
落选世界杯的英格兰球星马奎尔在纽约当街头流动小贩,售卖球星贴纸

落选世界杯的英格兰球星马奎尔在纽约当街头流动小贩,售卖球星贴纸

红星新闻
2026-06-21 11:09:03
英国又为乌克兰研发出一款大杀器

英国又为乌克兰研发出一款大杀器

史政先锋
2026-06-21 23:18:32
洪学智晚年坦言:抗美援朝胜利的法宝就藏在一根一米长的玻璃管里

洪学智晚年坦言:抗美援朝胜利的法宝就藏在一根一米长的玻璃管里

睡前讲故事
2026-06-18 19:25:58
先2-2,再4-0!淘汰赛还要赢巴西,世界杯日本喊出夺冠?醒醒吧

先2-2,再4-0!淘汰赛还要赢巴西,世界杯日本喊出夺冠?醒醒吧

以茶带书
2026-06-22 00:31:22
2026-06-22 03:16:49
flydean程序那些事
flydean程序那些事
最通俗的解读,最深刻的干货!
356文章数 438关注度
往期回顾 全部

科技要闻

马斯克拿下7800亿元天价薪酬 2028年可兑现

头条要闻

西班牙4-0大胜沙特 亚马尔首次世界杯首发+首球

头条要闻

西班牙4-0大胜沙特 亚马尔首次世界杯首发+首球

体育要闻

德国的超级替补,10年前还在工厂上班

娱乐要闻

原来她就是张颂文老婆

财经要闻

“床垫界的特斯拉”破产了

汽车要闻

惊出冷汗!重庆实测奥迪A5L,华为智驾这波操作绝了…

态度原创

房产
健康
旅游
手机
军事航空

房产要闻

商业清零式退潮,大量住宅登场!三亚又要大规模调规!

吃粽子的3条保胃法则,消化科医生推荐

旅游要闻

不用远赴江南,安宁这条河既有山泉灵气,又藏国人专属山水乡愁!

手机要闻

消息称供应链公司已向苹果首款折叠屏iPhone小批量供货

军事要闻

时隔44年试射洲际导弹 现场照片传递三个重磅信息

无障碍浏览 进入关怀版