从无到有,Netty基于SSL实现信息传输过程中双向加密验证
一、前提:
感谢以下博客给到的启发,完成了这篇内容 netty案例,netty4.1中级拓展篇十三《Netty基于SSL实现信息传输过程中双向加密验证》 Netty SSL双向验证 Error while creating a CSR netty中实现双向认证的SSL连接 OpenSSL主配置文件openssl.cnf
二、正文
2.1 SSL
首先了解什么是SSL,SSL(安全套接字层)是一种标准安全协议,用于在在线通信中建立Web服务器和浏览器之间的加密链接。 对于这个概念的理解,让我印象深刻的是下面这幅图
翻译版
这是SSL工作的大致过程。 知道这些就足够了进行下面的工作了
2.2 使用openssl生成客户端私钥公钥和服务端私钥公钥
这一步也是最容易卡壳的一步,网上很多文章有的介绍太详细让人云里雾里,有的太粗略不知道啥玩意儿 这里只讲最简单的一种,并罗列了实践时碰到的问题:
2.2.1 下载Windows版openssl
下载地址:windows版openssl 为什么不使用linux版的openssl? 配置比较复杂,可能搞晕新手
2.2.2 选择一个目录进行安装
2.2.3 点击openssl.exe打开软件
2.2.4 自建CA
先说明接下来的步骤打开是
自建CA-->生成服务端和客户端私钥-->根据key生成csr文件-->根据ca证书server.csr、client.csr生成x509证书-->将key文件进行PKCS#8编码
为什么会进行上面这些操作 因为实际应用中,CA是一个机构。而我们本地测试就没必要去进行申请的,所以自己建立一个CA。
CA 拥有一个证书(内含公钥和私钥)。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。 如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。 如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。 -----------百度百科
建立CA之后,我们要 创建client和server的证书,然后client和server的证书都有了,导入程序中就实现了双向认证,如果只是对server进行颁发证书的话,那就是单项认证的SSL。
在打开的openssl.exe中执行
req -new -x509 -keyout ca.key -out ca.crt -days 36500
此时,会产生文件 ca.key
,ca.crt