内容简介:详解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基本运作过程
五、握手阶段的详细过程
客户端服务端安全加密通信有四次握手的过程,握手过程出现在上面运作流程的前两个阶段。握手过程是这样的。
第一次握手也称为ClientHello,即客户端像服务端问好。这可不是简单的问好,这次问好包含了大量的信息。信息如下:
第二次握手也称为serhello,即服务端向客户端问好。同样,这也不是简单的问好,也包含的大量的信息。信息如下:
第三次握手为客户端回应。信息如下:
第四次握手为服务端最后的回应,信息如下:
六、OpenSSL
OpenSSL是SSL的开源实现方案。我将介绍如下的内容。
6.1 简介
OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。
6.2 组件
OpenSSL由以下三部分组成。libcryto这是一个具有通用功能的加密库;libssl是实现SSL机制的安全通信加密库,实现TLS/SSL功能。通过libssl可以实现远程执行程序命令,传输文件等等。XSHELL,SecureCRTP,putty工具就是调用了这个库实现远程控制主机的功能;openssl是个多功能命令行 工具 、他可以实现加密解密、甚至还可以 当CA来用、可以让你创建证书、吊销证书。
6.3 加密算法和协议
在这一小节,我了解以下四部分的信息。
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算法,其主要区别就是加密位数和安全性更高。
6.3.2 对称加密
我将介绍对称加密下面三个部分。主要介绍下实现对称加密的命令 openssl enc。
openssl enc命令的使用可以参考这里: http://man.linuxde.net/openssl 。
在 linux 系统环境下你也可以使用man openssl查看openssl用法,其次你可以通过openssl enc help查看命令选项以及参数。
对称加密命令openssl的实践应用(CentOS7.3实验环境)
说明:示例为加密/etc/fstable文件以及解密对应的文件
第一步:对/etc/fstab文件进行加密
说明:将/etc/fstab文件加密为fstab.ciphertxt文件
第二步:对fstab.ciphertxt文件解密
说明:将fstab.ciphertxt文件解密为当前目录的fstab文件
第三步:测试加密文件
说明:用cat命令查看fstab.ciphertxt加密文件,出现乱码;而查看解密的fstab文件则显示正确信息,由此证明加密以及解密成功。
6.3.3 公钥加密
公钥加密特性及用途如图所示:
有关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)
第二步:提取公钥
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命令
接下来详细介绍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的两倍。
openssl rand -base NUM
-base表示每个字符为64为64机制的字符,NUM表示随机数的字节数,出现的字符数同样为为NUM的两倍。
linux系统上有随机数的生成器设备
/dev/random设备:仅从熵池返回随机数;随机数用尽,阻塞;
/dev/urandom设备:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞,产生的伪随机数不安全。
那熵池的随机数的来源从何而来,主要从这两方面而来:
硬盘IO中断时间间隔;
键盘IO中断时间间隔;
6.4.2.4 CA介绍
CA内容介绍分为以上四个部分。
CA(Certificate Authority)即数字证书认证机构,CA的类型有公有CA和私有CA。公有CA即公有数字证书认证机构,特点是权威安全。私有CA即私有的数字证书认证机构,私人拥有的,一般来说,安全性就有待考量了。下面我们来建立一个私有CA来玩玩。
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私钥
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
分别输入你的国家,省份,城市,公司,部分,服务器地域名以及邮箱地址。这样一个私有的CA就创建成功了。私有CA证书路径为/etc/pki/CA/cacert.pem,如果其他服务器想认证这个证书只要取得这个证书文件即可。
接下来在上面实验的基础上再介绍一个 签署证书的示例
签署证书的思路如上图所示,我们只需要按照步骤来实践即可。
注:(本示例主要以httpd服务为例,因为模拟建立一个基于https的站点要用到)
(1)主机A生成私钥
mkdir /etc/httpd/ssl #创建存储私钥的目录
cd /etc/pki/CA #注意:只有再CA目录中才能生成私钥
(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
(2) A主机生成证书签署请求
openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
填上相应的信息,注意国家,省份,城市,公司,部门信息应该保持一致,才能合理地签署请求。
(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
通通选择y,表示选择同意签署证书。
(5)将签署的证书发送给需要授权的主机
scp /etc/pki/CA/certs/httpd.crt 目标主机ip:/etc/httpd/ssl/
成功将签署的证书传送给主机A。
(6)查看证书中的信息(CA主机B中)
openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
吊销证书步骤
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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Flutter 完整开发实战详解(十六、详解自定义布局实战)
- 数据结构 1 线性表详解 链表、 栈 、 队列 结合JAVA 详解
- 详解Openstack环境准备
- Java泛型详解
- iOS RunLoop 详解
- Raft协议详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!