详解SSL/TLS

栏目: 服务器 · 发布时间: 7年前

内容简介:详解SSL/TLS

SSL/TLS分析

本文分为六个部分,详见思维导图。

详解SSL/TLS

一、SSL/TLS作用

在了解作用前,先介绍什么是SSL/TLS?SSL(Secure Sockets Layer)即安全套接字层,保障internet数据传输的安全性。TLS(Transport Layer Security)即安全传输层协议,保障应用程序之间通信的安全性。

要了解SSL/TLS的作用要从网络通信风险着手,所以总结出了三大风险及其对应的解决方案。

参考链接:( http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html)

详解SSL/TLS

二、历史

详解SSL/TLS

三、必须掌握的一些密码学的概念

详解SSL/TLS

下面是密码学中的概念介绍。

详解SSL/TLS

四、SSL/TLS基本运作过程

详解SSL/TLS

五、握手阶段的详细过程

客户端服务端安全加密通信有四次握手的过程,握手过程出现在上面运作流程的前两个阶段。握手过程是这样的。

详解SSL/TLS

第一次握手也称为ClientHello,即客户端像服务端问好。这可不是简单的问好,这次问好包含了大量的信息。信息如下:

详解SSL/TLS

第二次握手也称为serhello,即服务端向客户端问好。同样,这也不是简单的问好,也包含的大量的信息。信息如下:

详解SSL/TLS

第三次握手为客户端回应。信息如下:

详解SSL/TLS

第四次握手为服务端最后的回应,信息如下:

详解SSL/TLS

六、OpenSSL

OpenSSL是SSL的开源实现方案。我将介绍如下的内容。

详解SSL/TLS

6.1 简介

OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。

6.2 组件

OpenSSL由以下三部分组成。libcryto这是一个具有通用功能的加密库;libssl是实现SSL机制的安全通信加密库,实现TLS/SSL功能。通过libssl可以实现远程执行程序命令,传输文件等等。XSHELL,SecureCRTP,putty工具就是调用了这个库实现远程控制主机的功能;openssl是个多功能命令行 工具 、他可以实现加密解密、甚至还可以 当CA来用、可以让你创建证书、吊销证书。

详解SSL/TLS

6.3 加密算法和协议

在这一小节,我了解以下四部分的信息。

详解SSL/TLS

6.3.1 单向加密

单向加密算法的介绍以及特性如图所示。MD5加密算法即为有名的数字摘要算法。简单理解MD5算法简单的来说就是把任意长度的字串变换成固定长度(通常是128位)的16进制串。

MD5的功能有:(1) 一致性验证 (2) 数字签名 (3) 密码存储

(1)一致性验证, 简单理解 就是检验是否一致,比如说,你从网上下载一个文件,网站会给出这个文件的MD5值,通过这个MD5值来比对下载前源文件与下载后的文件是否一致。

(2)数字签名,简单理解就是通过MD5算法实现的签名,作用是验证身份。

参考链接:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

(3)密码存储,很好理解,就是将密码通过MD5算法加密存储。

SHA1加密算法会产生一个160位的消息摘要,由于SHA1算法的雪崩效应(改变一位消息数据会使输出值大幅度变动)与不可逆性,可用于验证数据完整性与消息验证。由于对安全加密的要求性更高,后来又出现了更为复杂的SHA224,256,384,512算法,其主要区别就是加密位数和安全性更高。

详解SSL/TLS

6.3.2 对称加密

我将介绍对称加密下面三个部分。主要介绍下实现对称加密的命令 openssl enc。

openssl enc命令的使用可以参考这里: http://man.linuxde.net/openssl

linux 系统环境下你也可以使用man openssl查看openssl用法,其次你可以通过openssl enc help查看命令选项以及参数。

详解SSL/TLS

详解SSL/TLS

对称加密命令openssl的实践应用(CentOS7.3实验环境)

说明:示例为加密/etc/fstable文件以及解密对应的文件

第一步:对/etc/fstab文件进行加密

说明:将/etc/fstab文件加密为fstab.ciphertxt文件

详解SSL/TLS

第二步:对fstab.ciphertxt文件解密

说明:将fstab.ciphertxt文件解密为当前目录的fstab文件

详解SSL/TLS

第三步:测试加密文件

说明:用cat命令查看fstab.ciphertxt加密文件,出现乱码;而查看解密的fstab文件则显示正确信息,由此证明加密以及解密成功。

详解SSL/TLS 详解SSL/TLS

6.3.3 公钥加密

详解SSL/TLS

公钥加密特性及用途如图所示:

详解SSL/TLS

有关RSA算法的介绍请戳这里:

    http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

下面重点介绍RSA密钥的生成方法

openssl genrsa的用法可以参考: http://man.linuxde.net/openssl

在linux环境下你也可以使用man openssl,其次你可以通过openssl genrsa help查看命令选项以及参数。

私钥公钥生成的一次实践

第一步:在linux环境CA中心生成私钥    

(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey_new.pem 4096)

详解SSL/TLS

第二步:提取公钥

详解SSL/TLS

6.3.4 公钥基础设施(pki)

PKI(Public Key Infrast ructure)翻译过来就是公钥基础设施,简单理解就是利用公钥技术对应用加密解密的基础设施。它是一个提供安全服务的基础设施,是CA的配置服务设置,同时也是电子商务的关键和基础技术。

RA(Registration Authority)翻译过来就是注册授权中心。RA是证 书注册审批系统,该系统具有证书的申请、审批、下载、OCSP、LDAP等一系列功能,为整个机构体系提供安全认证服务。

CRL(Certificate Revocation List )证书吊销列表。当你的证书过期了,就被吊销。这是一个由 CA 维护并发布的列出已被吊销的证书的文档。为确保其完整性,CRL 是用 CA 的私钥签署的。

证书存取库,即存取证书的一个库。

X.509v3,定义了证书的结构以及认证协议标准。包括但不仅限于以下内容:

版本号

序列号

签名算法ID

发行者名称

有效期限

主体名称

主体公钥

发行者的惟一标识

主体的惟一标识

扩展

发行者的签名

6.4 OpenSSL命令

详解SSL/TLS

接下来详细介绍openssl命令,重点放在命令的实践上。

6.4.1 类型

openssl命令按照我自己的理解分为了三种命令类型:标准命令,消息摘要命令以及加密命令。

标准命令有:enc, ca, req, genrsa等等。命令的介绍你可以在linux系统中通过man openssl检索关键字获取。 

enc负责密码编码与加密

ca负责证书认证管理。

req负责证书请求文件的管理。

genrsa负责生成RSA的私钥。

下面我们来看openssl命令的用法。

6.4.2 用法

openssl命令的应用之一是生成用户密码。应用工具或者你可以称为命令有:

passwd, openssl passwd

paswwd是普通的加密方式,但实际上也足够安全了。

openssl passwd采用哈希算法进行加密。

生成随机数采用的工具是openssl rand,你可以通过man sslrand采用命令的用法。

两个例子

openssl  rand  -hex  NUM 

-hex表示每个字符为十六进制,相当于4位二进制,NUM表示随机数的字节数,出现的字符数为NUM的两倍。

详解SSL/TLS

openssl  rand  -base  NUM

-base表示每个字符为64为64机制的字符,NUM表示随机数的字节数,出现的字符数同样为为NUM的两倍。

详解SSL/TLS

linux系统上有随机数的生成器设备

/dev/random设备:仅从熵池返回随机数;随机数用尽,阻塞;

/dev/urandom设备:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞,产生的伪随机数不安全。

那熵池的随机数的来源从何而来,主要从这两方面而来:        

硬盘IO中断时间间隔;

键盘IO中断时间间隔;

6.4.2.4 CA介绍

详解SSL/TLS

CA内容介绍分为以上四个部分。

CA(Certificate Authority)即数字证书认证机构,CA的类型有公有CA和私有CA。公有CA即公有数字证书认证机构,特点是权威安全。私有CA即私有的数字证书认证机构,私人拥有的,一般来说,安全性就有待考量了。下面我们来建立一个私有CA来玩玩。

详解SSL/TLS

CA的配置文件是/etc/pki/tls/openssl.cnf,你可以编辑配置文件对私有CA配置做出相应地修改。

创建私有CA的思路是这样的:在CA主机上生成一个私钥以及一个自签证书,并为CA提供所需要的目录及文件。

接下来介绍建立私有CA的步骤 

1.创建所需要的文件以及目录        

touch /etc/pki/CA/{serial,index.txt} 生成证书索引数据库文件

echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号

mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts} 

创建证书,证书吊销,新证书目录

2.生成一个基于RSA算法的私钥

cd /etc/pki/CA/

(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

3. 生成自签名的证书         

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out             /etc/pki/CA/cacert.pem -days 3655

参数说明

req:负责证书请求文件的管理        

-new: 生成新证书签署请求

-x509: 专用于CA生成自签证书

-key: 生成请求时用到的私钥文件

-days n:证书的有效期限

-out /PATH/TO/SOMECERTFILE : 证书的保存路径

创建CA的实践(详细请参照上面步骤)

touch /etc/pki/CA/{serial,index.txt}

echo 01 > /etc/pki/CA/serial

mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}    

cd /etc/pki/CA/

(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

成功创建RSA私钥

详解SSL/TLS

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out            /etc/pki/CA/cacert.pem -days 3655

详解SSL/TLS

分别输入你的国家,省份,城市,公司,部分,服务器地域名以及邮箱地址。这样一个私有的CA就创建成功了。私有CA证书路径为/etc/pki/CA/cacert.pem,如果其他服务器想认证这个证书只要取得这个证书文件即可。

接下来在上面实验的基础上再介绍一个 签署证书的示例

详解SSL/TLS

签署证书的思路如上图所示,我们只需要按照步骤来实践即可。

注:(本示例主要以httpd服务为例,因为模拟建立一个基于https的站点要用到)

(1)主机A生成私钥        

mkdir  /etc/httpd/ssl  #创建存储私钥的目录

cd  /etc/pki/CA     #注意:只有再CA目录中才能生成私钥

(umask  077; openssl  genrsa -out  /etc/httpd/ssl/httpd.key  2048)

详解SSL/TLS

(2) A主机生成证书签署请求

openssl  req  -new  -key  /etc/httpd/ssl/httpd.key  -out                  /etc/httpd/ssl/httpd.csr  -days  365

详解SSL/TLS

填上相应的信息,注意国家,省份,城市,公司,部门信息应该保持一致,才能合理地签署请求。

(3) 将请求发送给CA主机B

mkdir /CA_csr        #创建存储CA签署请求的目录

scp /etc/httpd/ssl/httpd.csr   CA主机IP:/CA_csr

(4) 在CA主机B上签署证书

openssl ca  -in  /CA_csr/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days  365

详解SSL/TLS

通通选择y,表示选择同意签署证书。

(5)将签署的证书发送给需要授权的主机   

scp /etc/pki/CA/certs/httpd.crt 目标主机ip:/etc/httpd/ssl/

详解SSL/TLS

成功将签署的证书传送给主机A。                

(6)查看证书中的信息(CA主机B中)

openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject

详解SSL/TLS

吊销证书步骤

A 在客户端获取要吊销的证书的serial               

opensslx509 -in /PATH/FROM/CERT_FILE-noout -serial -subject     

B 在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书:

opensslca -revoke /etc/pki/CA/newcerts/SERIAL.pem     

C 指定第一个吊销证书的编号

注意:第一次更新证书吊销列表前,才需要执行

echo 01 > /etc/pki/CA/crlnumber    

D 更新证书吊销列表

opensslca -gencrl-out /etc/pki/CA/crl/crl.pem

查看crl文件:

opensslcrl-in /etc/pki/CA/crl/crl.pem-noout-text


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP for the World Wide Web, Second Edition (Visual QuickStart Gu

PHP for the World Wide Web, Second Edition (Visual QuickStart Gu

Larry Ullman / Peachpit Press / 2004-02-02 / USD 29.99

So you know HTML, even JavaScript, but the idea of learning an actual programming language like PHP terrifies you? Well, stop quaking and get going with this easy task-based guide! Aimed at beginning ......一起来看看 《PHP for the World Wide Web, Second Edition (Visual QuickStart Gu》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试