SSL加密解密基础

SSL简介:

SSL是Secure Socket Layer(安全套接字层)的简写,显而易见,它是为了数据传输安全而发明的一种安全协议,并且是在传输层进行网络加密的一种协议。

信息安全的目标有:

保密性

完整性

可用性

为实现这三个目标的手段有:

技术层面:加密解密

服务层面:用于抵制攻击的服务。

加密解密技术:

1.对称加密:将数据分隔成固定大小的块来分别加密,并且加密和解密使用同一个秘钥的加密技术。

用途:加密大数据文件

常用的对称加密算法有:

DES:Data Encryption Standard;即数据加密标准,但是已经被完全破解。

3DES:Triple DES;3倍的DES加密,即在每个块上应用三次DES加密

AES:Advanced Encryption Standard(高级加密标准);  (128bits, 192bits, 256bits, 384bits),这种标准是为了取代DES加密技术而发明的。

还有:Blowfish Twofish IDEA RC6 CAST5等加密算法。

缺点:秘钥过多,分发困难,

2.非对称加密(公钥加密):即使用两个不同的秘钥(公钥和私钥)来加密和解密,其中公钥是从私钥中提取得来的,使用公钥加密的数据只能由私钥解密,使用私钥加密的数据能用公钥解密,因此私钥只能是个人所有,但是公钥可以所有人拥有。

私钥与公钥的用途:

(1)使用私钥加密的数据由于所有人都可以使用公钥来解密,因此并不是来保障安全的,而且为了“验明正身”,即来确保数据来源的可靠性,简单来说就是数字签名作用。

(2)使用私钥可以解密私人公钥加密的数据,由于私钥只有个人拥有,因此往往用在传输机密数据的地方,比如密码交换(加密对称加密秘钥,从而来实现秘钥交换的安全性)。

常用的非对称加密算法有:

RSA:RSA是由其三个作者的名字的三个首字母组成的,通过两个质数相称的结果来反推这两个质数是非常困难的这个原理发明的。

DSA:只用于数字签名与认证上,因此不能来加密数字,也不能来进行秘钥交换。

ELGamal:通过公钥加密体系和椭圆曲线加密发明。

3.单向加密:提取数据指纹信息,因此只能加密不能解密,但是这个加密不是加密数据的,而是将文件数据的指纹信息提取出来。且只能加密不能解密

单向加密用途:因为是提取数据的指纹信息,因此目的是为了确保文件的完整性

常用的单向加密算法有:

md5:Message Digest 5, 128bits:信息摘要第五版

sha家族:Secure Hash Algorithm (安全散列算法):有sha1(160bits),sha224,sha256

sha384,sha512。

4.秘钥交换:

分为公钥加密和HD(Deffie-Hellman)

总结:A向B传递数据时候

A:首先使用单向加密提取指纹秘钥,然后使用非对称加密的A的私钥实现数字签名,然后使用对称加密来加密整个数据,最后使用非对称加密中的B的公钥来加密对称加密的秘钥。

B:首先使用自己的私钥来解密自己的公钥,从而得到对称加密的秘钥,得到了得到了对称秘钥就可以解开数据内容了,如果不注重安全的话到了这一步其实就能看到数据内容了,但是最好使用A的公钥解密A的私钥,看看是否来源合法,然后再使用相同的算法提取数据指纹信息,来看看数据完整性是否遭到破坏。

PKI:Public Key Infrastructure即公钥基础设施

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库:

X.509v3:定义了证书的结构以及认证协议标准

版本号

序列号

签名算法ID

发行者名称

有效期限

主体名称

主体公钥

发行者的惟一标识

主体的惟一标识

扩展

发行者的签名

SSL Handshake Protocol:

第一阶段:ClientHello:

支持的协议版本,比如tls 1.2;

客户端生成一个随机数,稍后用户生成“会话密钥”

支持的加密算法,比如AES、3DES、RSA;

支持的压缩算法;

第二阶段:ServerHello

确认使用的加密通信协议版本,比如tls 1.2;

服务器端生成一个随机数,稍后用于生成“会话密钥”

确认使用的加密方法;

服务器证书;

第三阶段:

验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)

发送以下信息给服务器端:

一个随机数;

编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;

客户端握手结束通知;

第四阶段:

收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;

向客户端发送如下信息:

编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;

服务端握手结束通知;

组件:

libcrypto, libssl主要由开发者使用;

openssl:多用途命令行工具

openssl:

从多子命令,分为三类:

标准命令:openssl

消息摘要命令(dgst子命令):即提取数据指纹信息

加密子命令

enc子命令:对数据对称加密

genrsa子命令:生成非对称加密的私钥

rsa子命令:由从私钥中提取公钥

生成证书:通过req子命令实现

证书签名:通过ca子命令实现

随机数:通过子命令rand生成随机数

密码:通过子命令passwd实现

提取数据指纹信息:openssl dgst -md5 文件

[[email protected] ~]# openssl dgst -md5 fstab
MD5(fstab)= e362fe2945c3b2949a72a670b4fdaac4
[[email protected] ~]#

对数据加密(使用对称加密):

加密:openssl enc -e -des3 -a -salt -in 源文件 -out 加密文件

解密:openssl enc -d -des3 -a -salt -in 加密文件 -out 解密后文件

[[email protected] ~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.test
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[[email protected] ~]# ls
anaconda-ks.cfg  fstab.test   install.log.syslog  模板  图片  下载  桌面
fstab            install.log  公共的              视频  文档  音乐

可以查看一下fstab.test这个文件,会发现是乱码。

下面来解密看看

生成非对称加密的私钥:openssl genrsa -out 存储私钥的文件  私钥长度

因为私钥只能自己拥有,因此除了自己以外任何人都不能有权限,使用()是的其运行在子shell中,而子shell的umask值不会影响父shell的umask值,这样比较方便。

由从私钥中提取公钥:openssl rsa -in 私钥文件 -pubout

生成随机数:openssl rand -hex(-base64) 随机数长度

[[email protected] ~]# openssl rand -base64 12
SknvVjzp0eGpympv
[[email protected] ~]#

生成密码:openssl passwd -1 -salt 数字

新建CA证书:

其配置文件在/etc/pki/tls/openssl.cnf,主要内容如下:

默认CA:

CA目录为:/etc/pki/CA/  即所有的CA相关数据文件都放在这个目录下面

/etc/pki/CA/certs/:所有已签的证书都放在这个目录下面

/etc/pki/CA/crl/:吊销的证书存放位置

/etc/pki/CA/index.txt:已经颁发的证书的索引放在这个文件中

/etc/pki/CA/serial:颁发一个证书的当前序列号码

/etc/pki/CA/crlnumber:当前吊销证书的系列号码

/etc/pki/CA/cacert.pem:CA的自签证书

/etc/pki/CA/private/cakey.pem:CA的私钥

/etc/pki/CA/newcerts:默认的新证书的存放位置(还没签的证书)

当然还有很多的信息在这个配置文件中多可以找到

第一步;生成CA私钥,然后用私钥自签CA证书

[[email protected] ~]# ls /etc/pki/CA
cacert.pem  certs  crl  newcerts  private
[[email protected] ~]# ls /etc/pki/CA/private/
cakey.pem
[[email protected] ~]#

需要建立必要的目录文件:

必要的目录有:certs,crl,newcerts

必要的文件有:serial,index.txt

[[email protected] ~]# touch /etc/pki/CA/{serial,index.txt}
[[email protected] ~]# ls /etc/pki/CA/
cacert.pem  certs  crl  index.txt  newcerts  private  serial
[[email protected] ~]# echo 01 > /etc/pki/CA/serial 
[[email protected] ~]#    第一次创建因此需要手动输入一个序列号

以httpd服务为例,在另一个机器上的/etc/httpd/下建一个ssl目录,然后生成待签证书

注意此证书后缀为csr

然后发给CA

然后到CA机器上签这个证书

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

然后就可以了

[[email protected] ~]# openssl  ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.srt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Apr 10 10:28:34 2016 GMT
            Not After : Apr 10 10:28:34 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = beijing
            organizationName          = magedu
            organizationalUnitName    = ops
            commonName                = www.magedu.com
            emailAddress              = email.magedu.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                CC:7A:4A:58:76:BB:07:45:D0:85:A6:8A:02:65:0D:07:34:52:06:40
            X509v3 Authority Key Identifier: 
                keyid:5D:A4:BC:13:7F:AD:BA:D5:FF:90:5E:D2:E5:19:BA:58:25:8B:09:43

Certificate is to be certified until Apr 10 10:28:34 2017 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[[email protected] ~]#

然后就可以查看证书信息了:openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject

吊销证书:

步骤:

(1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):

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

(2) CA主机吊销证书

先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;

吊销:

# openssl  ca  -revoke  /etc/pki/CA/newcerts/SERIAL.pem

其中的SERIAL要换成证书真正的序列号;

(3) 生成吊销证书的吊销编号(第一次吊销证书时执行)

# echo  01  > /etc/pki/CA/crlnumber

(4) 更新证书吊销列表

# openssl  ca  -gencrl  -out  thisca.crl

查看crl文件:

# openssl  crl  -in  /PATH/FROM/CRL_FILE.crl  -noout  -text

时间: 2024-08-05 19:09:44

SSL加密解密基础的相关文章

linux加密解密基础、PKI及SSL、创建私有CA

1.加密解密基础:          数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡改.          (2)数据的机密性:防止文件数据泄漏给未授权用户从而让其利用          (3)数据的可用性:保证授权用户能按需访问存取文件数据 2.常见的加密技术: 对称加密  公钥加密  单向加密          (1)对称加密:加密解密使用同一个密钥,将原始数据分割成固定大小的块,逐个进行加密 加密算法:               

Linux之加密解密基础、openssl及CA基础应用

加密解密基础简介 数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡改 (2)数据的机密性:防止文件数据泄漏给未授权用户从而让其利 (3)数据的可用性:保证授权用户能按需访问存取文件数据 因此加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密).加密技术包括两个元素:算法和密钥.算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的密文的步骤,密钥是用来

加密解密基础及私有CA的实现-2015092801

1. 加密解密简述 2.加密算法 3.加密解密步骤 4.使用openssl自建私有CA 加密解密基础: 由于互联网的数据传输基本上都是明文的(如ftp.http.telnet等),而往往有些数据在互联网传输对于传输方来讲,确实涉及隐私或是一些敏感的内容不想让互联网上其他人看到,因此,引入了加密的机制. 最早起的加密,采用移位的方式对数据进行加密,如数据数"abcd",其对应的在互联网上传输的内容是"efgh".后来的加密方式是采用"密码对照本",

密码学——Java 加密解密基础

Java  加密解密基础 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学:应用于破译密码以获取通信情报的,称为破译学,总称密码学. 密码学常用术语 明文: 待加密数据. 密文: 明文经过加密后数据. 加密: 将明文转换为密文的过程. 加密算法: 将明文转换为密文的转换算法. 加密密钥: 通过加密算法进行加密操作的密钥. 解密: 将密文转换为铭文的过程. 解密算法: 将密文转换为明文的转换算法. 解密密钥: 通过解密短发进行解密操作的密

加密解密基础及openssl构建私有CA初步

方今社会,互联网的普及给我们的生活带来了极大的便利,但任何事物都有其两面性:窗户打开了,阳光和新鲜的空气进来了,苍蝇也进来了.如何在利用互联网带来便利的同时,又尽量规避其风险,保护自己网络通信中信息的安全及私密,成为了一个热门话题,下面本文将主要探讨两个方面的问题,不当之处还请各位前辈不吝斧正. (一)加密解密基础 首先要搞清楚的一个问题是,我们平时的网络通信存在哪些风险呢?目前互联网上常见的攻击方式有两种:主动攻击和被动攻击.主动攻击包括报文伪装.重复.消息篡改.拒绝服务等:被动攻击主要是监听

加密解密基础

现代网络通信中网络安全是至关重要,安全的最基本的当然就是加密与解密了,今天跟大家分享一下加密与解密的基础. 安全的目标: 保密性:confidentiality 完整性:integrity 可用性:availability 攻击类型: 威胁保密性的攻击:窃听.通信量分析: 威胁完整性的攻击:更改.伪装.重放.否认: 威胁可用性的攻击:拒绝服务(DoS): 解决方案: 技术方面:加密和解密: 传统加密方法:替代加密方法.置换加密方法 现代加密方法:现代块加密方法 服务方面:用于抵御攻击的服务,也即

Linux之加密解密基础技术

下文主要介绍了什么是加密解密:为何要用到加密解密技术:加密解密技术能够为我们带来什么样的好处:常见的几种加密解密技术介绍以及Linux中的openssl. 一.什么是加密,解密 加密技术是一种常用的安全保密手段,利用各种技术手段把重要的数据进行加密传送:再用对应的技术手段进行解封,该过程的逆过程就称为解密.这里用一个不太恰当的例子说一下:也就好比你去办一张银行卡,需要你设置一个密码,就可以理解成在为这张银行卡做一个加密的操作:用银行卡到提款机取钱需要你输入密码,这就是一个解密的操作. 二.为什么

马哥linux学习笔记:加密,解密基础

在计算机网络建设的初期,由于能使用到计算机的人少之又少,并没有考虑到有数据加密需求,随着社会的发展,互联网已俨然成为我们生活中不可或缺的一部分,人们不管是交流,购物,还是工作都已经离不开互联网.在电脑,手机,各种电子设备构建的互联网中,数据的安全问题已经成为人们很是关注一个重要环节. 现在,我们就来了解一下linux下是如何实现数据加密及解密的. 对于确保数据的安全性,我们要达成的目标有三个: 保密性,完整性,可用性. 现今蛇龙混杂的互联网,总是有很多拥有强烈好奇心的不安分的人想尽办法要获知其他

加密解密基础问题:字节数组和字符串的相互转换

在加密时,一般加密算法和hash算法,它们操作的都是字节数组,对字节数组按照加密算法进行各种变换,运算,得到的结果也是字节数组.而我们一般是要求对字符串进行加密,所以就涉及到字符串String到 byte[] 的转换,这个很简单.同时在解密时,也涉及到字节数组byte[] 到 String 的转换.另外在对用户的密码进行hash加密之后,最终是要保存在数据库中,所以加密得到 byte[] 也要转换到 String. 1. String 到 byte[] 的转换很简单,因为String类有直接的函