物联网云平台加密、证书的那些事
OpenPGP协议/标准
加密和证书的概念介绍完了,再来了解一个行业标准:OpenPGP。
OpenPGP是什么?
OpenPGP是一种非专有协议,为加密消息、签名、私钥和用于交换公钥的证书定义了统一标准。
OpenPGP协议的实现
OpenPGP协议有2个实现:
PGP(Pretty Good Privacy)GPG(GNU Privacy Guard)
PGP是一个加密程序,为数据通信提供了加密和验证功能,通常用于签名、加密和解密文本、电子邮件和文件。
GPG是PGP的开源实现。
OpenPGP的使用流程
Step1: 公布自己的公钥
每个人把自己的公钥上传到公钥服务器上(subkeys.pgp.net),然后通过交换机制,所有的公钥服务器最终都会包含你的公钥,就类似域名服务器同步域名解析信息一样。
由于公钥服务器没有检查机制,任何人都可以用我的名义上传公钥,所以没有办法来保证服务器上的公钥一定是可靠性。通常,我可以在网站上公布一个公钥指纹,让其他人下载我的公钥之后,计算一下公钥指纹,然后与我公布的指纹进行比对,以此来确认证书的有效性。
Step2: 获取别人的公钥
为了获得别人的公钥,可以让对方直接发给我,也可以从公钥服务器上下载。为了安全起见,需要对下载的公钥使用其他机制进行安全认证,例如刚才说的指纹。
Step3: 用于加密
用对方的公钥加密文件,发送给对方,对方用他自己的私钥进行解密。
Step4: 用于签名
用我的私钥进行加密,把加密后文件发送给对方,对方用我的公钥进行解密,只要能正确解密,就证明这个文件的确是我加密的。
SSL/TLS
SSL全称是Secure Socket Layer(安全套阶层协议),它是一个安全协议,目的是用来为互联网提供安全的数据传输。
SSL在工作过程中,就利用了前面描述的概念:对称加密、非对称加密、证书等。如果前面的概念都梳理清楚了,那么理解SSL也就不成问题了。
SSL协议有1,2,3这个三个版本,TLS是SSL V3标准化之后的产物。事实上现在用的都是TLS,但是大家都习惯了SSL这个称呼。
协议分层
SSL协议最大的优点就是与应用层无关,在SSL协议的上层,可以运行一些高层应用协议,例如:HTTP, FTP, TELNET...,也就是说这些高层协议可以透明的建立在SSL协议层之上。
握手过程
SSL使用X.509标准,握手就是指客户端与服务端在通信的开始阶段进行鉴权和协商,最终目的是:
确认对方是合法的通信对象;与对方协商得到对称加密秘钥。
我们来一步一步梳理握手过程:
Step1
Client向Server发送如下信息:
随机数1;
Client端支持的SSL版本号;
Client端支持的加密算法列表。
Step2
Server分析接收到的信息,返回如下信息给Client:
随机数2;
选择的加密算法;
Server证书
Step3
Client端验证Server发来的证书是否有效,具体过程上面已经描述过。
如果验证失败,通信结束;如果验证通过,就产生随机数3,并使用刚才的随机数1、随机数2,然后用选择的算法生成一个对称加密秘钥,这个秘钥就用于后面正常的数据通信中。
然后发送如下信息给Server:
随机数3,并且用server证书中的公钥进行加密;
此时,Cliend端的握手流程结束,因为已经达到了握手的最终目的:确认Server合法,得到对称加密秘钥。
Step4
Server端在接收到加密后的随机数3时,用自己的私钥进行解密,然后和之前的随机数1、随机数2一起,使用相同的算法生成对称加密秘钥。
至此,Server端的握手过程也就结束,下面就可以用对称加密秘钥来对数据进行加密了。
注意:上面描述的握手过程中是单向认证,也就是Client端验证Server是否合法的。如果需要双向认证,那么客户端也应该把自己的证书发送给Server,然后Server来验证这个证书是否合法,确认证书合法之后才继续执行后面面的握手流程。
HTTPS与SSL的关系
HTTPS拆开来就是:HTTP+SSL,就是在HTTP的下面增加了SSL安全传输协议层,在浏览器连接到服务器之后,就执行上面描述的SSL握手过程。握手结束之后,双方得到对称加密秘钥,在HTTP协议看来是明文传输数据,下面的SSL层对数据进行加密和解密。
OpenSSL OpenSSL是什么?
上面描述的SSL中这么多的东西都是协议(或者称为标准),协议只是规定了应该怎么做,但是具体的代码实现应该由谁来做呢?我们在写相关的SSL程序时好像从来没有实现过这个协议,都是直接调用第三方提供的库就达到了加密传输的目的。当然了,如果你实现过SSL协议,请允许我对你表示佩服,给你一万个赞!
在编程领域,永远都存在热心肠的人!OpenSSL就是一个免费的SSL/TLS实现,就是说:OpenSSL实现了SSL/TLS协议中定义的所有功能,包括:
SSL2
SSL3
TLSv1
TLSv1.1
TLSv1.2
而且,OpenSSL是用C语言开发的,具有优秀的跨平台特性,在Linux、Windows、BSD、MAC等平台上可以执行。
具体来说,OpenSSL实现中,包括下面几个功能模块:
密码算法库
密码算法库中包括:
对称加密算法: AES、DES等。非对称加密算法: DH、RSA、DSA、EC等。
信息摘要算法
信息摘要算法包括:MD5、SHA等。
秘钥和证书管理
OpenSSL提供的CA应用程序就是一个小型的证书管理中心,实现了证书签发的整个流程和证书管理的大部分机制,我们在学习的时候一般都会用OpenSSL中提供的CA程序来生成秘钥对、自签名等等。具体的内容包括:
证书秘钥产生、请求产生、证书签发、吊销和验证功能;
对证书的X.509标准解码、PKCS#12/PKCS#7格式的编解码;
提供了产生各种秘钥对的函数;
SSL协议库
实现了SSLv2、SSLv3、TLSv1.0协议。
应用程序
OpenSSL的应用程序是基于密码算法库和SSL协议库实现的,是非常好的OpenSSL的API函数使用范例,主要包括:秘钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其他辅助配置功能。
OpenSSH又是什么? SSH
首先说一下SSH:Secure Shell(安全外壳协议),又是一个协议,用来实现远程登录系统,我们通常利用SSH来传输命令行界面和远程执行命令。
比如:在调试一个ARM系统时,可以通过串口助手连接到ARM板子上;但是更常用的调试场景是在PC机上远程登录到ARM系统中,执行ARM中的任何指令,这就是利用SSH来实现的。
SSH提供2种级别的安全验证:
基于密码;
基于秘钥。
SSH中基于口令的安全验证
只需要知道账号和密码,就可以远程登录到系统,我们一般常用的就是这用方式。但是不能保证我正在连接的设备就是我想连接的那台设备,可能会有别的服务器冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
当然还经常遇到另一种错误:在局域网中有多台设备,本想远程连接到设备A中,由于IP地址记错了,结果远程登录到另外一台设备B上了,如果你的同事也正在调试设备B,接下来就是悲剧发生的时刻!
SSH中基于秘钥的安全认证
Step1
首先为自己创建一个秘钥对,并提前把公钥放在需要访问的服务器上,例如:放在账号的家目录中。
Step2
通过客户端远程登录到服务器,把自己的公钥发给服务器,并请服务器进行安全验证。
Step3
服务器接收到请求后,在登录账号的家目录下查找公钥,然后与接收到的公钥进行比对。
Step4
如果比对不一致,通信结束;如果比对一致,服务器就用公钥加密一段数据(challenge),并发送给客户端。
Step5
客户端接收到challenge,用私钥进行解密,然后把结果发给服务器。
Step6
服务器把接收到的结果与Step4中的数据进行比对,如果一致则验证通过。
SSH协议的实现
既然SSH是一个协议,那么就一定存在对应的实现,这就是OpenSSH,它是一个免费开源的SSH实现。
OpenSSH实现中,利用了OpenSSL中的加密和算法库函数,这就是它俩之间的关系。
总结
到这里,与加密、证书相关的基础概念都介绍完毕了,一不小心超过了一万字,不知道你是否有所收获。
如果你是初次接触到这些东西,敬请放心,即使现在明白了,一个星期之后肯定忘记一多半了。只有经历过几个项目的历练之后,才会有更深刻的理解和记忆,最后,祝您好运!
图片新闻
最新活动更多
-
即日-12.5立即观看>> 松下新能源中国布局:锂一次电池新品介绍
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
精彩回顾立即查看>> 2024 智能家居出海论坛
-
精彩回顾立即查看>> 2024中国国际工业博览会维科网·激光VIP企业展台直播
-
精彩回顾立即查看>> 【产品试用】RSE30/60在线红外热像仪免费试用
-
精彩回顾立即查看>> 2024(第五届)全球数字经济产业大会暨展览会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论