侵权投诉
订阅
纠错
加入自媒体

物联网云平台加密、证书的那些事

2021-03-04 10:18
道哥分享
关注

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中的加密和算法库函数,这就是它俩之间的关系。

总结

到这里,与加密、证书相关的基础概念都介绍完毕了,一不小心超过了一万字,不知道你是否有所收获。

如果你是初次接触到这些东西,敬请放心,即使现在明白了,一个星期之后肯定忘记一多半了。只有经历过几个项目的历练之后,才会有更深刻的理解和记忆,最后,祝您好运!

<上一页  1  2  3  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

    安防 猎头职位 更多
    文章纠错
    x
    *文字标题:
    *纠错内容:
    联系邮箱:
    *验 证 码:

    粤公网安备 44030502002758号