自己研究 openssl 有一段时间了,这里做 一个小结;
openssl是一个强大的安全套接字密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其他目的使用。
openssl整个软件可以分为三个主要的功能部分:
密码算法库、
SSL协议库以及应用程序。
OpenSSL 是一个开源项目,其组成主要包括一下三个组件:
-
openssl:多用途的命令行工具
-
libcrypto:加密算法库
-
libssl:加密模块应用库,实现了ssl及tls
概念介绍:
SSL
SSL的全名叫做secure socket layer(安全套接字层),最开始是由一家叫网景的互联网公司开发出来,主要是防止信息在互联网上传输的时候不被窃听或者篡改,后来网景公司提交SSL给ISOC组织做标准化,改名为TLS。
有些同学可能会好奇,说好好的数据怎么就被窃听以及修改呢?这个其实是很容易的,如果你上网连得的是wifi,那么你的数据一定会经过wifi路由器,通过对路由器做些手脚就可以拿到这些数据。
非对称加密
在数学上有这样一个现象:给两个质数,很容易算出他们的乘积,但是给你一个很大的数,你很难分解出两个质数,让他们的乘积正好等于这个很大的数。
非对称加密就是基于以上的现象产生的,用一个密钥对数据进行加密,然后可以使用另外一个不同的密钥对数据进行解密,这两个密钥就是:公钥和私钥。
公钥和私钥是可以相互推导的,根据私钥,你可以很容易的算出公钥,但是根据公钥,你却很难很难算出私钥,在互联网上,私钥一般由服务器掌握,公钥则由客户端使用。根据公钥,理论上需要花费地球上所有的计算机计算数万年才能算出私钥,所以认为是非常安全的。
数字签名
将报文使用一定的HASH算法算出一个固定位数的摘要信息,然后用私钥将摘要加密,连同原来的报文一起,发送给接收者,接受者通过公钥将摘要解出来,也通过HASH算法算出报文摘要,如果两个摘要一致,说明数据未被篡改,数据是完整的。
因为接收者是使用公钥解出的数据,如果数据完整,证明发送数据的人持有私钥,就能证明发送者的身份,因此数字签名具有证明发送者身份和防篡改的功能, 这个很类似区块链。
数字证书
由CA颁发给网站的身份证书,里面包含了该网站的公钥,有效时间,网站的地址,CA的数字签名等。
所谓的CA数字签名,实际上就是使用了CA的私钥将网站的公钥等信息进行了签名,当客户端请求服务器的时候,网站会把证书发给客户端,客户端首先可以通过CA的数字签名校验CA的身份,也能证明证书的真实完整性(之前说了,数字签名拥有证明身份和防篡改的功能)。
客户端有没有可能到一个假冒的CA去校验数字证书呢?不太可能,因为CA的地址是内嵌在浏览器中的,很难被篡改。
SSL如何保护数据
SSL保护数据的原理可以分为三部分
1)认证用户和服务器,确保数据发送到正确的客户端和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
一、安装:
Windows10下安装OpenSSL curl WIN32 /WIN64 openssl1.1.x:
https://blog.csdn.net/q610098308/article/details/84666206
openssl NDK 移植
https://blog.csdn.net/q610098308/article/details/89030565
二、加密,解密
对称加密:OpenSSL AES 加解密
https://blog.csdn.net/q610098308/article/details/84878243
https://blog.csdn.net/q610098308/article/details/93480212
非对称加密 OPENSSL RSA 加解密,生成公匙,私匙;私有证书
https://blog.csdn.net/q610098308/article/details/83015943
实现 https
https://blog.csdn.net/q610098308/article/details/90080392
libcurl 移植 支持https,openssl NDK (三) 源码修改,支持内存中验证证书
https://blog.csdn.net/q610098308/article/details/90081095