详解SSL/TLS

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

SSL/TLS分析

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

wKioL1k39YvSzh5kAABPHqlBJSw935.png

一、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)

wKioL1k3-ITggCavAABimHljhEw978.png

二、历史

    wKioL1k3-TKBeO17AABmazUK9pk755.png

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

wKioL1k3-cbzWjPOAABMxNDshns066.png

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

wKiom1k3-kPDC0psAADUdMwTSL4347.png

四、SSL/TLS基本运作过程

wKioL1k3-0qjlQo1AAA8FmLh2Nk787.png

五、握手阶段的详细过程

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

wKiom1k3_BXgfzp5AAA_RJOyxC4053.png

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

    wKioL1k3_K_TzZtjAAA97gyak0c562.png   

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

   wKioL1k3_c3B95QmAAA64HaJXL4769.png 

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

wKiom1k3_k-wXkWlAABMzeTJseU368.png

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

wKiom1k3_qTxWdm4AAA2fXHRQOA461.png

六、OpenSSL

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

wKiom1k3_5ShwzR8AAAgWmDROZs365.png

 6.1 简介

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

 6.2 组件

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

wKiom1k4AXTSt9Y_AAATT93CMm0981.png

 6.3 加密算法和协议

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

wKiom1k4BJ2SG24SAAAsp2wpt20328.png

 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算法,其主要区别就是加密位数和安全性更高。

wKiom1k4BS_AToDBAABDdY_7BSA235.png

 6.3.2 对称加密

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

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

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

wKiom1k4CTCi4tU4AAAV3JZ1pCg873.png

wKioL1k4CmKBDmN6AABHSJyCm4M744.png

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

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

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

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

wKioL1k4D7GAi18uAAAQmzgjm1I898.png

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

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

wKioL1k4ELnAnuBMAAAK3bPKh98538.png

 第三步:测试加密文件

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

wKioL1k4EY2wLOETAAA3jn182Qk961.pngwKiom1k4EZzSozDnAABKORr7WTU987.png

 6.3.3 公钥加密

wKioL1k4E1yxAYGiAAAhrIu6okE693.png

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

wKioL1k4E_rSoOTLAABp4w9VO9Y660.png

 有关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)

wKioL1k4Ghygt4-rAAAVsgw97Hg730.png

    第二步:提取公钥

wKioL1k4GtKy3-nzAABxmUOG-rw879.png

 6.3.4 公钥基础设施(pki)

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

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

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

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

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

    版本号

    序列号

    签名算法ID

    发行者名称

    有效期限

    主体名称

    主体公钥

    发行者的惟一标识

    主体的惟一标识

    扩展

    发行者的签名

6.4 OpenSSL命令

wKioL1k45ELhgHivAABFqtvLH5o174.png

 接下来详细介绍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的两倍。

    wKioL1k46xjw7SQ3AAANLl7wop4521.png

    openssl  rand  -base  NUM

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

wKiom1k47CSBD_ktAAAK8hNRcXw888.png

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

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

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

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

        硬盘IO中断时间间隔;

        键盘IO中断时间间隔;

 6.4.2.4 CA介绍

    wKiom1k48o7xKCa5AAAayFZmiuM495.png

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

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

wKiom1k489miqvlZAAAbk8yl6mU011.png

 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私钥

    wKiom1k4-o2hRfysAAAS8ZTSmNg580.png

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

wKiom1k4_NyTBqL4AABMs6plI8k563.png

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

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

wKiom1k4_wbCibDMAAA_i1VzmOM130.png

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

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

    (1)主机A生成私钥        

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

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

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

    wKioL1k5Aq3CVzNwAAAVJazB3zw476.png

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

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

wKiom1k5A23wbbbzAABZwvENRwo162.png

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

    (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

wKioL1k5BKixOTVKAABmYXsCMpY492.png

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

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

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

wKioL1k5BYjj2tqEAAAknJ0yCcE108.png

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

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

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

wKioL1k5BkCCtykFAAAWMHtB8yI674.png

 吊销证书步骤

    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



本文转自 PowerMichael 51CTO博客,原文链接:http://blog.51cto.com/huwho/1933580,如需转载请自行联系原作者

相关文章
|
20天前
|
安全 网络安全 数据安全/隐私保护
SSL/TLS证书**是一种用于加密网络通信的数字证书
SSL/TLS证书**是一种用于加密网络通信的数字证书
65 6
|
21天前
|
安全 算法 网络安全
SSL/TLS协议是什么?
SSL/TLS协议是什么?
96 57
|
1月前
|
缓存 安全 算法
SSL和TLS部署实践
在TLS中,所有安全性都以服务器的加密身份开始,这就需要一个强大的私钥来防止攻击者进行模拟攻击。同样重要的是拥有一个有效和强大的证书,它会授予私钥来代表一个特定的主机名。
49 2
|
1月前
|
存储 安全 算法
SSL和TLS部署实践
【10月更文挑战第28天】在TLS中,服务器的加密身份和强大私钥是安全基础,2048位RSA密钥足以满足大多数需求。保护私钥需在可信环境生成、加密存储、使用HSM、及时撤销旧证书、每年更新证书。确保证书覆盖所有域名,选择可靠CA,使用SHA256签名算法,配置完整证书链,禁用不安全加密套件,启用前向保密,使用会话重用机制,启用OCSP Stapling,加密整个网站,删除混合内容,安全设置Cookie,配置HSTS和CSP。
129 1
|
2月前
|
安全 网络安全 数据安全/隐私保护
【Azure Developer】System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
|
2月前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
80 1
|
4月前
|
监控 安全 Linux
在Linux中,如何管理SSL/TLS证书?
在Linux中,如何管理SSL/TLS证书?
|
3月前
|
消息中间件 安全 Kafka
Kafka支持SSL/TLS协议技术深度解析
SSL(Secure Socket Layer,安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。这些协议在传输层对网络连接进行加密,确保数据在传输过程中不被窃取或篡改。
263 0
|
4月前
|
存储 Linux 网络安全
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
|
4月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)