Win10快速安装OpenSSL(不用编译源码)


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

win10x64安装OpenSSL:不用编译源码

网上一堆的教程教你去下载opensll源代码并用vs进行编译,虽然我有安装vs2015,但是看到那么长的编译步骤,太心累了。

懒人只得找简单的方法,最终找到了一个好的安装方法,就是我们常说的exe安装,一直next就可以了。

下载地址

链接:https://pan.baidu.com/s/1LfCGxAPYexVgmbuJRZE5LA 

提取码:cv5v 


开始安装


image.png







其余都默认,一路next:

image.png






安装成功后,开始菜单:

image.png




设置环境变量

安装完成之后配置一下环境变量。

把openssl安装路径bin的路径(例如 D:\__OpenSSL_Win64\bin)加入到操作系统的系统环境变量Path中。

Path:  D:\__OpenSSL_Win64\bin



解决openssl错误


WARNING: can't open config file: /usr/local/ssl/openssl.cnf


在你的OpenSSL安装路径下找到openssl.cfg,

我的路径是 D:\__OpenSSL_Win64\bin\openssl.cfg,

设置环境变量set OPENSSL_CONF=D:\__OpenSSL_Win64\bin\openssl.cfg

然后,再运行OpenSSL


windows命令行调用openssl

切记:一定要重启DOS命令行窗口(dos在启动时才重新读取环境变量)

先输入:openssl,

然后,生成一个RSA密钥对

OpenSSL> genrsa -aes256 -out rsa-key.pem 2048



什么是OpenSSL


OpenSSL是web安全通信的基石,没有OpenSSL,可以说我们的信息都是在裸奔。要想了解OpenSSL,有几个前置的概念需要先熟悉一下:


SSL

SSL的全名叫做secure socket layer(安全套接字层),最开始是由一家叫网景的互联网公司开发出来,主要是防止信息在互联网上传输的时候不被窃听或者篡改,后来网景公司提交SSL给ISOC组织做标准化,改名为TLS。

image.png


有些同学可能会好奇,说好好的数据怎么就被窃听以及修改呢?这个其实是很容易的,如果你上网连得的是wifi,那么你的数据一定会经过wifi路由器,通过对路由器做些手脚就可以拿到这些数据。


非对称加密:rsa

在数学上有这样一个现象:给两个质数,很容易算出他们的乘积,但是给你一个很大的数5293(=79x67),你很难分解出两个质数,让他们的乘积正好等于这个很大的数。

image.png

非对称加密就是基于以上的现象产生的,用一个密钥对数据进行加密,然后可以使用另外一个不同的密钥对数据进行解密,这两个密钥就是:公钥和私钥。

公钥和私钥是可以相互推导的,根据私钥,你可以很容易的算出公钥,但是根据公钥,你却很难很难算出私钥,在互联网上:私钥一般由服务器掌握,公钥则由客户端使用。根据公钥,理论上需要花费地球上所有的计算机计算数万年才能算出私钥,所以认为是非常安全的。


数字签名

5293(=79x67)

将报文(111,333,52155,73277,95899)使用一定的HASH算法算出一个固定位数的摘要信息(13179),然后用私钥将摘要加密【79x67^13179】,连同原来的报文一起{79x67^13179:111,333,52155,73277,95899},发送给接收者,接收者通过公钥将摘要解出来|79x67^13179^5293|,也通过HASH算法算出报文摘要,如果两个摘要一致,说明数据未被篡改,数据是完整的。


因为接收者是使用公钥解出的数据,如果数据完整,证明发送数据的人持有私钥,就能证明发送者的身份,因此数字签名具有证明发送者身份和防篡改的功能。


数字证书

由CA颁发给网站的身份证书,里面包含了该网站的公钥,有效时间,网站的地址,CA的数字签名等。

所谓的CA数字签名,实际上就是使用了CA的私钥将网站的公钥等信息进行了签名,当客户端请求服务器的时候,网站会把证书发给客户端,客户端首先可以通过CA的数字签名校验CA的身份,也能证明证书的真实完整性(之前说了,数字签名拥有证明身份和防篡改的功能)。


客户端有没有可能到一个假冒的CA去校验数字证书呢?不太可能,因为CA的地址是内嵌在浏览器中的,很难被篡改。

image.png

SSL如何保护数据

SSL保护数据的原理可以分为三部分

1)认证用户和服务器,确保数据发送到正确的客户端和服务器;

2)加密数据以防止数据中途被窃取;

3)维护数据的完整性,确保数据在传输过程中不被改变。


认证用户和服务器

现在来思考这样的一个问题,当我们访问百度的时候,我们怎么知道自己访问的是真百度还是假百度?是不是有可能有人劫持了我们访问百度的请求,然后路由给了一台他伪造的服务器?

image.png

为了确定我们访问的服务器没有被伪造,在SSL的通信流程中做了这样一个规定:一旦我们向服务器发送了请求后,服务器必须返回它的数字证书,当我们拿到数字证书之后,我们可以根据里面的ca数字签名,校验证书的合法性(不是被伪造的)。

此时,我们只能够证明证书确实是属于百度的,但不代表发送给我们证书的服务器就是百度,怎么办呢?

在证书里面会带有百度服务器的公钥,在之后的通信当中,客户端会使用该公钥加密数据给百度服务器,百度服务器必须使用私钥才能够解出里面的数据,假设百度服务器是假冒的,他一定没有正确的私钥,那么之后的通信都无法进行,所以假冒服务器是无法操作的。

由此,SSL就解决了服务器认证的问题。


加密数据以防止数据中途被窃取

客户端第一次给服务器发送请求的时候(拿到证书前的一次),会在请求里面放一个随机数C1,服务器在返回证书的响应里也会带一个随机数F,客户端拿到证书后,会使用公钥加密一个随机数C2送给服务器,这样客户端、服务器都拥有了三个随机数:C1、F、C2,双方使用这些随机数和一个相同的算法生成一个对称密钥,之后所有的通信都使用这个对称密钥来进行。

这个密钥会不会被泄露呢?不会,因为密钥是由3个随机数产生的,对于第一个随机数C1,他可能会被中间人监听到,然后第二个随机数F,也可能会被中间人监听到,但是第三个随机数C2,因为是用公钥加密的,除非中间人有私钥,否则是不可能解出来的。

为什么要生成一个对称密钥来进行数据通信呢?因为非对称加密在解密的时候相当耗费性能,换成对称密钥后,会好很多。


维护数据的完整性

这个主要是针对服务器发送数字证书这一过程来说的,服务器的数字证书中含有ca数字签名,可以很有效的保证证书的真实性和完整性(没有被篡改)


openssl是什么

回过头来,我们来了解一下openssl,上面的SSL只是一个协议,openssl则是SSL的实现版,另外openssl还包含了公钥私钥的生成、摘要生成等各种工具。


openssl有什么使用场景

我们知道,有些时候我们浏览网站的时候会有一些广告,这些广告什么的不一定是原网站挂上去的,也有可能是中间的运营商在中间篡改了内容导致的,可以使用https技术(一般是基于openssl)来对数据进行加密,保证数据不被篡改。






OPENSSL“心脏出血”漏洞

早在2014年,互联网安全协议OpenSSL被曝存在一个十分严重的安全漏洞。在黑客社区,它被命名为“心脏出血”,表明网络上出现了“致命内伤”。利用该漏洞,黑客可以获取约30%的https开头网址的用户登录账号密码,其中包括购物、网银、社交、门户等类型的知名网站。今天就为大家带来平台事件规则解读系列第四篇震惊全球的“心脏出血”漏洞。



在OpenSSL1.0.1版本中存在严重漏洞(CVE-2014-0160),此次漏洞问题存在于ssl/dl_both.c文件中。OpenSSL Heartbleed模块存在一个BUG,当攻击者构造一个特殊的数据包,满足用户心跳包中无法提供足够多的数据会导致memcpy把SSLv3记录之后的数据直接输出,该漏洞导致攻击者可以远程读取存在漏洞版本的openssl服务器内存中长大64K的数据。


震惊全球的“心脏出血”漏洞

OpenSSL“心脏出血”漏洞是一个非常严重的问题。这个漏洞使攻击者能够从内存中读取多达64 KB的数据。也就是说,只要有这个漏洞的存在,在无需任何特权信息或身份验证的环境下,我们就可以从我们自己的(测试机上)偷来X.509证书的私钥、用户名与密码、聊天工具的消息、电子邮件以及重要的商业文档和通信等数据。


OpenSSL漏洞分析

最初人们为了网络通信安全,就开始使用安全协议进行加密通信,SSL(Secure Socket Layer)就是一种安全协议。随着开源软件的流行,有人写了一款叫  OpenSSL  的开源程序供大家方便地对通信进行SSL加密,后来这款软件便在互联网中被广泛应用。我们在浏览器地址栏常见的 https 前缀的网址以及那把小锁图标,通常就是指该网站经过 SSL 证书加密。



OpenSSL 有一个叫 Heartbeat (心跳检测)的拓展,问题就出在这个拓展上,这也是漏洞被命名为“心脏出血”的直接原因。


所谓心跳检测,就是建立一个  Client Hello 问询来检测对方服务器是不是正常在线 ,服务器发回 Server hello,表明正常树立SSL通讯。就像我们打电话时会问对方 “喂听得到吗?”一样。


每次问询都会附加一个问询的字符长度 pad length,bug 来了,如果这个 pad length 大于实际的长度,服务器仍是会回来相同规模的字符信息,于是形成了内存里信息的越界访问。

就这样,每发起一个心跳,服务器就能泄露一点点数据(理论上最多泄露  64K),这些数据里可能包括用户的登录账号密码、电子邮件甚至是加密秘钥等信息,也可能并没有包含这些信息,但攻击者可以不断利用 “心跳”来获取更多的信息。就这样,服务器一点一点泄露越来越多的信息,就像是心脏慢慢在出血,心脏出血漏洞的名字由此而来。


这里通过一张图来展现一下:

image.png



由于互联网应用最广泛的安全传输方法就是 SSL,而 Open SSL 又是多数 SSL 加密网站使用的开源软件包,所以漏洞影响范围广大,一时间席卷全球各个互联网相关领域,网银、在线支付、电商网站、门户网站、电子邮件等无一幸免。



通过以上分析我们可以看见,OpenSSL心脏出血漏洞(heartbleed)的产生主要由于OpenSSL的心跳处理逻辑没有检测心跳包中的长度字段是否和后续字段相吻合导致攻击者构造异常数据包,来直接获取心跳数据所在的内存区域的后续数据。主要特征有:


heartbleed漏洞主要存在于有心跳机制的OpenSSL协议中。

IANA组织把开启心跳扩展机制的SSL数据包type类型定义为24(0x18)。

heartbleed漏洞主要存在于TLS和DTLS两种协议中,在含有heartbleed漏洞的OpenSSL协议中需要开启心跳扩展机制(beartbeat),而含有心跳扩展机制的TLS版本主要包含在0(0x0301),TLSv1.1(0x0302),TLSv1.2(0x0303)三种版本中。

heartbleed漏洞攻击主要由于攻击者构造异常的心跳数据包,即心跳包中的长度字段与后续的数据字段不相符合,来获取心跳数据所在的内存区域的后续数据。

其一般的攻击流程如下图所示:



解决方案

    这一漏洞的正式名称为 CVE-2014-0160。

漏洞影响了 OpenSSL 的 1.0.1 和 1.0.2 测试版。OpenSSL 已经发布了 1.0.1g 版本,以修复这一问题,但网站对这一软件的升级还需要一段时间。不过,如果网站配置了一项名为“perfect forward secrecy”的功能,那么这一漏洞的影响将被大幅减小。该功能会改变安全密钥,因此即使某一特定密钥被获得,攻击者无法解密以往和未来的加密数据。

 


总结

    在OpenSSL漏洞被披露的时候,Heartbleed这个漏洞的存在时间已有两年之久。三分之二的活跃网站均在使用这种存在缺陷的加密协议。因此,许多人的数据信息开始被暴露,每个人都被卷入到这次灾难的修正中去。放眼放去,我们经常访问的支付宝、淘宝、微信公众号、YY语音、陌陌、雅虎邮件、网银、门户等各种网站,基本上都出了问题。而在国外,受到波及的网站也数不胜数,就连大名鼎鼎的NASA(美国航空航天局)也已宣布,用户数据库遭泄露。不过塞翁失马,焉知非福。此次风波将会让整个互联网重新思考网络安全。

好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***