Loading... <p><span style="font-family:宋体;font-size:14px">加密方式有对称加密 非对称加密 单向加密</span></p> <p><span style="font-family:宋体;font-size:14px">对称加密:</span></p> <p><span style="font-family:宋体;font-size:14px"> 加密和加密都用同一个对称密钥,但是,这种加密方法存在一定问题,就是密钥传输时,容易被盗窃。还有密钥管理困难,对称加密的方法:<span style="font-family:Times New Roman">DES</span><span style="font-family:宋体">、</span><span style="font-family:Times New Roman">AES</span><span style="font-family:宋体">、</span><span style="font-family:Times New Roman">Blowfish</span><span style="font-family:宋体">、</span><span style="font-family:Times New Roman">Twofish</span><span style="font-family:宋体">、</span><span style="font-family:Times New Roman">IDEA</span><span style="font-family:宋体">、</span><span style="font-family:Times New Roman">RC6</span><span style="font-family:宋体">、</span><span style="font-family:Times New Roman">CAST5</span><span style="font-family:宋体">。</span></span></p> <p><span style="font-family:宋体;font-size:14px"> </span></p> <p><span style="font-family:宋体;font-size:14px">非对称加密:</span></p> <p style="text-indent: 48px"><span style="font-family:宋体;font-size:14px">公钥和私钥都可以进行加密,解密是公钥和私钥对应解密的,就好像一把锁对应多把相同的钥匙一样,公钥可以公开的,非对称加密解决了密钥传输时带来的问题,同时还解决了密钥管理的繁杂的问题。但是如果你用非对称加密的方式来加密一段数据,速度会非常慢,比对称加密的速度慢几个数量级。非对称加密的方法:<span style="font-family:Times New Roman">RSA DSA</span></span></p> <p><span style="font-family:宋体;font-size:14px"> </span></p> <p><span style="font-family:宋体;font-size:14px">单向加密:</span></p> <p style="text-indent: 48px"><span style="font-family:宋体;font-size:14px">单向加密是用来提取数据的特征码,为了保证数据传输时的完整性,哪怕数据发生一点的变化,特征码都会引起巨大的改变,单向加密的方法:<span style="font-family:Times New Roman">MD5 SHA</span></span></p> <p><span style="font-family:宋体;font-size:14px"> </span></p> <p><span style="font-family:宋体;font-size:14px">数据的安全传输方式:</span></p> <p><span style="font-family:宋体;font-size:14px">(这个图取之于<span style="font-family:Times New Roman">silently</span><span style="font-family:宋体">的浅谈</span><span style="font-family:Times New Roman">Openssl</span><span style="font-family:宋体">与私有</span><span style="font-family:Times New Roman">CA</span><span style="font-family:宋体">搭建博客文章的图)</span></span></p> <p><span style="font-family:宋体;font-size:14px"> </span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160720-9.png" title="1439545348453389.png" alt="1.png" /></p> <p><span style="font-family:宋体;font-size:16px">第一步,用户B向服务器A发起访问请求,并携带自己的证书信息。服务器A收到用户B发来的证书后,查找安装系统时内置的证书或通过其它可靠途径获得证书公钥从中挑选出一个对应的公钥解密证书的签名信息,完成CA的合法身份验证,并得到签名信息的特征码,而后使用同样的算法提取签名信息的特征码与之对比,完成签名信息的完整性校验,然后再对比主体的名称与服务器的主机名是否一样,如果一样就从用户B中发来的证书中提取用户B的公钥信息,最后将自己的证书发送给用户B。</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">第二步,用户B收到服务器A发来的证书,使用与之同样的证书验证流程验证证书的合法性以及完整性,提取服务器A的公钥信息。</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">第三步:使用单向加密算法,提取数据的SO的特征码信息,使用自己的私钥加密上一步提取出来的特征码信息,而后将其附在数据S0后面,组成数据段S1,通过算法生成对称密钥,利用对称加密对数据段S1进行加密,生成加密后的数据段S2。使用用户B的公钥将上一步生成的对称密钥加密后将其附在数据段S2后面,生成数据段S3。最后将S3发送给用户</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">第四步:使用自己的私钥解密数据段S3,得到服务器A生成的对称加密密钥和数据段S2。使用上一步解密得到的密钥解密数据段S2得到加密后的数据特征码和明文数据段S0, 使用自己的私钥解密上一步得到的数据特征码,然后使用与服务器A相同的单向加密的算法提取明文数据S0的特征码与之比对,比对结果正确则说明数据时完整的。</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">使用openssl实现加密:</span></p> <h5><span style="font-family: 宋体;font-size: 16px">对称加密:</span></h5> <h3><span style="font-family: 宋体;font-size: 16px">opesnssl enc</span></h3> <p><strong><span style="font-family:宋体;font-weight:bold;font-size:16px">-e:表示加密</span></strong></p> <p><strong><span style="font-family:宋体;font-weight:bold;font-size:16px">-d:表示解密</span></strong></p> <p><strong><span style="font-family:宋体;font-weight:bold;font-size:16px">-in file:表示输入需要加密或解密的文件</span></strong></p> <p><span style="font-family:宋体;font-size:14px"> </span></p> <p><strong><span style="font-family:宋体;font-weight:bold;font-size:16px">-out file:<span style="font-family:宋体">表示输出加密或解密的文件</span></span></strong></p> <p><strong><span style="font-family:宋体;font-weight:bold;font-size:16px">-a<span style="font-family:宋体">:表示</span><span style="font-family:Times New Roman">64</span><span style="font-family:宋体">位的编码</span></span></strong></p> <h1><span style="font-family: 宋体;font-size: 29px">例子:</span></h1> <h3><span style="font-family: 宋体;font-size: 21px"> 加密: </span></h3> <p><span style="font-family:宋体;font-size:14px"><img src="//cto.wang/usr/uploads/2016/07/20160703160720-99.png" title="1439545357167371.png" alt="2.png" /> </span></p> <p><span style="font-family:宋体;font-size:14px"> </span></p> <h5><span style="font-family: 宋体;font-size: 19px">解密</span></h5> <p><span style="font-family: 宋体;font-size: 19px"><img src="//cto.wang/usr/uploads/2016/07/20160703160720-54.png" title="1439545367359323.png" alt="3.png" /></span></p> <h5><span style="font-family: 宋体;font-size: 19px">非对称加密:</span></h5> <h4><span style="font-family: 黑体;font-size: 19px">私钥生成:</span></h4> <p><span style="font-family:宋体;font-size:14px"> </span></p> <p><span style="font-family:宋体;font-size:16px"> <img src="//cto.wang/usr/uploads/2016/07/20160703160720-87.png" title="1439545375681147.png" alt="4.png" /></span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <h4><span style="font-family: 黑体;font-size: 19px">公钥生成:</span></h4> <h5><span style="font-family: 宋体;font-size: 19px"> </span></h5> <p><span style="font-family:宋体;font-size:16px"><img src="//cto.wang/usr/uploads/2016/07/20160703160720-29.png" title="1439545384149810.png" alt="5.png" /> </span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <h3><span style="font-family: 宋体;font-size: 21px">单向加密:</span></h3> <h6><span style="font-family: 黑体;font-size: 16px">文件内容单向加密:</span></h6> <h6><span style="font-family: 黑体;font-size: 16px"><img src="//cto.wang/usr/uploads/2016/07/20160703160720-97.png" title="1439545402304470.png" alt="6.png" /></span></h6> <h6><span style="font-family: 黑体;font-size: 16px">密码的单向加密:</span></h6> <h6><span style="font-family: 黑体;font-size: 16px"><img src="//cto.wang/usr/uploads/2016/07/20160703160720-69.png" title="1439545415331328.png" alt="7.png" /></span></h6> <h5><span style="font-family: 宋体;font-size: 19px"> </span></h5> <h5><span style="font-family: 宋体;font-size: 19px">openssl<span style="font-family:宋体">支持随机数</span><span style="font-family:Times New Roman">,</span><span style="font-family:宋体">用随机数作为</span><span style="font-family:Times New Roman">salt</span><span style="font-family:宋体">:</span></span></h5> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160720-83.png" title="1439545429623428.png" alt="8.png" /></p> <p><span style="font-family:宋体;font-size:14px"> </span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160720-39.png" title="1439545435319284.png" alt="9.png" /></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <h1><span style="font-family: 宋体;font-size: 20px">PKI<span style="font-family:宋体">公钥管理:</span></span></h1> <p><span style="font-family:宋体;font-size:20px">CA<span style="font-family:宋体">认证机构:证书的签订及颁发机构</span></span></p> <p><span style="font-family:宋体;font-size:20px">RA<span style="font-family:宋体">注册机构:注册证书的地方</span></span></p> <p><span style="font-family:宋体;font-size:20px">数字证书库:用于存储已签发的数字证书及公钥,用户可由此获得所需的其他用户的证书及公钥;</span></p> <p><span style="font-family:宋体;font-size:20px">密钥备份及恢复系统:如果用户丢失了用于解密数据的密钥,则数据将无法被解密,这将造成合法数据丢失。为避免这种情况,<span style="font-family:Times New Roman">PKI</span><span style="font-family:宋体">提供备份与恢复密钥的机制。但须注意,密钥的备份与恢复必须由可信的机构来完成。并且,密钥备份与恢复只能针对解密密钥,签名私钥为确保其唯一性而不能够作备份。</span></span></p> <p><span style="font-family:宋体;font-size:20px">证书作废系统:证书作废处理系统是<span style="font-family:Times New Roman">PKI</span><span style="font-family:宋体">的一个必备的组件。与日常生活中的各种身份证件一样</span><span style="font-family:Times New Roman">,</span><span style="font-family:宋体">证书有效期以内也可能需要作废,原因可能是密钥介质丢失或用户身份变更等。为实现这一点</span><span style="font-family:Times New Roman">,PKI</span><span style="font-family:宋体">必须提供作废证书的一系列机制。</span></span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:20px">CA证书的x.509格式</span></p> <p><span style="font-family:宋体;font-size:20px"> </span><span style="font-family:宋体;font-weight:bold;font-size:20px">(1) 版本号 (不同x.509格式的版本号)</span></p> <h5>(2) <span style="font-family: 宋体;font-size: 19px">序列号(发放证书的序列号)</span></h5> <h5><span style="font-family: 宋体;font-size: 16px">(3) 签名算法标识符 (标识证书的hash算法和密钥的算法)</span></h5> <h5><span style="font-family: 宋体;font-size: 16px">(4) 认证机构 (发放证书的机构)</span></h5> <h5><span style="font-family: 宋体;font-size: 16px">(5) 有效期限 (证书可以使用的时间)</span></h5> <h5><span style="font-family: 宋体;font-size: 16px">(6) 主体信息 (拥有者的姓名 服务的名字)</span></h5> <h5><span style="font-family: 宋体;font-size: 19px">(7)<span style="font-family:宋体">主体的公钥信息(公钥的信息)</span></span></h5> <h5><span style="font-family: 宋体;font-size: 16px">(8) 认证机构的数字签名 (存放用私钥加密单向加密的证书信息的特征码)</span></h5> <p><span style="font-family:宋体;font-size:16px"> </span></p> <h1><span style="font-family: 宋体;font-size: 29px">构建私有<span style="font-family:Times New Roman">CA</span></span></h1> <h4><span style="font-family: 黑体;font-size: 19px">先看一下<span style="font-family:Arial">openssl</span><span style="font-family:黑体">的配置文件</span><span style="font-family:Arial">(/etc/pki/tls/openssl.cnf)</span></span></h4> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160720-43.png" title="1439545451285421.png" alt="10.png" /></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">看到配置文件,需要在/etc/pki/CA/index.txt 和 /etc/pki/CA/serial文件。</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160720-37.png" title="1439545457964484.png" alt="11.png" /></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <h5><span style="font-family: 宋体;font-size: 16px"> </span></h5> <p><span style="font-family:宋体;font-size:16px">生成CA的私钥: </span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160720-71.png" title="1439545465508367.png" alt="12.png" /></p> <p><span style="font-family:宋体;font-size:16px">为CA自己签证:</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160721-7.png" title="1439545493644588.png" alt="13.png" /></p> <p><span style="font-family:宋体;font-size:16px">这里的证书我放错了,需要放到/etc/pki/CA目录下的.</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">假如,我们在自己的机子上的http上生成一个证书让CA来签:</span></p> <p><span style="font-family:宋体;font-size:16px">生成http的私钥:</span></p> <p><span style="font-family:宋体;font-size:16px"><img src="//cto.wang/usr/uploads/2016/07/20160703160721-87.png" title="1439545533554179.png" alt="14.png" /> </span></p> <p><span style="font-family:宋体;font-size:16px"> 生成http证书签订的请求: </span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160721-18.png" title="1439545544613003.png" alt="15.png" /><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">上面的配置信息也可以通过配置文件来指定。</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">把请求交给CA签订:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160721-24.png" title="1439545553847744.png" alt="16.png" /><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">下面讲一下吊销证书(如果你的私钥掉失后,应该做吊销证书)</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">第一步,先看一下你证书的信息:</span></p> <p><span style="font-family:宋体;font-size:16px"><img src="//cto.wang/usr/uploads/2016/07/20160703160721-89.png" title="1439545562258448.png" alt="17.png" /> </span></p> <p><span style="font-family:宋体;font-size:16px">-noout:不输出多余的信息</span></p> <p><span style="font-family:宋体;font-size:16px">-subject:输出摘要信息</span></p> <p><span style="font-family:宋体;font-size:16px">-serial:输出该证书的序列号</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">然后,要对照一下/etc/pki/CA/index.txt文件里的证书信息,如果符合,就可以吊销了。</span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px"><img src="//cto.wang/usr/uploads/2016/07/20160703160721-57.png" title="1439545583608557.png" alt="18.png" /> </span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p><span style="font-family:宋体;font-size:16px">然后,我们还要跟新吊销列表:</span></p> <p><span style="font-family:宋体;font-size:16px"><img src="//cto.wang/usr/uploads/2016/07/20160703160721-47.png" title="1439545606137125.png" alt="19.png" /> </span></p> <p><span style="font-family:宋体;font-size:16px"><img src="//cto.wang/usr/uploads/2016/07/20160703160721-68.png" title="1439545613150067.png" alt="20.png" /> </span></p> <p><span style="font-family:宋体;font-size:16px"> </span></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信