网络安全——SSL、OpenSSL

SSL

1. 什么是SSL

Security Socket Layer-一种客户端和服务器端之间建立安全通道的协议
SSL协议是指使用公钥和私钥技术组合的安全网络通讯协议,保护存在敏感信息的服务器安全,消除客户在网络上传输数据的安全顾虑。

2. SSL主要服务:

a. 认证用户与服务器,确保数据发送到正确的客户机和服务器
b. 加密数据以防止数据中途被窃取
c. 维护数据的完整性,确保数据在传输过程中不被改变
以对称密码技术与公开密码技术相结合,完成了privateintegrityauthentic这三个通信目标。

private: 私密性,体现为数据加密
integrity:数据的完整性,保证数据的传输方和收取方得到的是一份数据,期间没有被更改过
authentic:身份合法--证明我接收数据的发送方是我信任的人(我希望通讯的人)

认证:一个身份的验证过程,用于确保数据发送到正确的客户机和服务器。

每对密钥包含一个公钥和一个私钥,公钥是公开且广泛分布的,私钥只有自己知道。用公钥加密的数据只有私钥才能解密,相反,用私钥加密的数据只有公钥才能解密,这种不对称性才使得共有密码系统得以使用。

比如:我拥有自己的公钥和私钥,然后A得到我的信任,并且我们之间要传输一个私密的数据,那么我将我的公钥透露给A,然后我发送信息的时候用我的私钥加密,这样到达A处的时候,他可以用我告诉他的我的公钥解密。相反地,他要是给我发信息,就要用我的公钥加密,然后我收到后用自己的私钥解密。

证书:一种把公钥绑定到名字的标准方式,这样就没有办法冒充其他人的公钥。

证书中包含证书发行者的名字、证书发送给的团队、主体的密钥和一些时间戳。SSL协议位于TCP/IP协议模型的网络层和应用层之间,使用TCP提供了一种可靠的端到端安全服务,它使客户、服务器应用之间的通信不被窃听,并且始终对服务器进行认证,还可以选择对客户进行认证。而SSL协议在应用层通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作,在此之后,应用层协议所传诵的数据都被加密。

SSL安全协议是SSL握手协议、SSL修改密文协议、SSL警告协议和SSL记录协议组成的一个协议族

SSL记录协议:private+integrity
SSL警告协议是用来对等实体船体SSL的相关警告,如果在通信过程中某一方发现任何异常,就需要给对方发送一条警示校级通告
SSL握手协议:允许通信实体在交换应用数据之前协商密钥的算法、加密密钥和对客户端进行认证的协议,为下一步记录协议要使用的密钥信息进行协商。
-- 建立安全能力
-- 服务器鉴别和密钥交换
-- 客户鉴别和密钥交换
-- 完成握手协议

3. SSL协议的工作流程

服务器认证阶段:

  1. 客户端向服务器发送一个开始信息
  2. 服务器根据客户信息确定是否需要生成新的主密钥,如果需要则在响应用户消息时将包含生成主密钥所需的信息。
  3. 客户根据收到的服务器信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器。
  4. 服务器恢复该主密钥,并返回给用户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段
认证的服务器发送一个提问给用户,用户则返回签名、提问和其公开密钥,从而向服务器提供认证。

4. OpenSSL

OpenSSL是一个支持SSL认证的开放源代码的软件库包,支持多种操作系统。

OpenSSL provides:

  • A command line application to perform a wide variety of cryptography tasks, such as creating and handling certificates and related files. OpenSSL commands
  • A comprehensive and extensive cryptographic library libcrypto.
  • A library for enabling SSL/TLS communications libssl to provide SSL and TLS Protocols support within clients or servers applications.

OpenSSL程序步骤:

程序步骤 描述
OpenSSL初始化 进行相应的协议初始化工作 int SSL_library_int(void);
选择会话协议 在开始SSL会话之前,为客户端和服务器制定本次会话采用的协议
创建会话环境 申请SSL会话环境,成功后根据实际的需要设置CTX属性
指定SSL握手阶段证书的验证方式、加载自己的证书。
建立SSL套接字 申请、绑定特定类型的SSL套接字
完成SSL握手 客户端:int SSL_connect(SSL *ssl);
服务器:int SSL_accept(SSL *ssl);
握手完成后通常需要询问双方的证书信息,以便进行相应的验证
数据传输 int SSL_read(SSL *ssl,void *buf,int num);
int SSL_write(SSL *ssl,const void *buf,int num);
结束SSL通信 释放已经申请的SSL资源

参考资料:
[1] OpenSSL官网
[2] OpenSSL WIKI
[3] Ian · Spoken English Class
附连接:
OpenSSL加解密使用

你可能感兴趣的:(网络安全——SSL、OpenSSL)