加密解密技术介绍和OpenSSL介绍

网络上实现安全传输是一件非常必要的事情,此篇博文主要介绍一下四种常见的加密解密技术和PKI机制以及如何通过openssl建立私有CA。

一、加密解密技术

1对称加密

主要加密算法:

1、DES:Data Encryption Standard 数据加密标准

加密端:将明文划分为64bits为一块,用密钥加密产生64bits的密文

解密端:还原回64bits密文

加密和解密均使用56bits的密钥

2、3DES:Triple DES;也就是进行三次DES加密

3、AES:Advanced Encryption Standard;

高级加密标准;密钥可为128bits,192bits,256bits,384bits

4、Blowfish,使用1-448bits的密钥,将明文划分为64bits的块;

5、Twofish,采用128, 192, 256bits的密钥,将明文划分为128bits的块

6、IDEA,采用128bits密钥,将明文划分为64bits的块;

7、RC6, 256 位密钥和 128位块大小

8、CASTS,64 位块加密, 允许最大 128 位的块大小,使用 128 位密钥

特性:1、加密和解密使用同一个密钥,但是加密和解密算法可能不同;

2、将原始数据分割为固定大小的块,逐个进行加密;

2公钥加密

主要加密算法:

1、RSA(既能实现数字签名,又能实现加解密)

2、DSA,digital Signature Algorithm(数字签名标准)

3、ELGamal,既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题

公钥:从私钥中提取的,公开给所有人;

私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key

特点:用公钥加密的数据,只能适用与之配对的私钥加密;反之亦然;

用途:

数字签名:主要在于让接收方确认发送方的身份;

密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;

数据加密:加密数据成为密文;

3单向加密

          主要加密算法:

1、md5:Message Digest 5,128bits定长输出

2、sha1:Secure Hash Aigorithm 1,160bits定长输出

又有sha224,sha256,sha384,sha512

特性:即提取数据指纹(特征码),只能加密不能解密,定长输出,雪崩效应

功能:完整性验证。

4密钥交换

主要加密算法:

1、公钥加密

有一个风险,密码是在网上传输,有可能会被暴力破解;

2、DH(Deffie-Hellman)

Alice和Bob最终都得到了同样的值,因为在模p下和 相等。注意ab 和 gab = gba mod p 是秘密的。其他所有的值– pgga modp, 以及 gb modp –都可以在公共信道上传递。一旦Alice和Bob得出了公共秘密,他们就可以把它用作对称密钥,以进行双方的加密通讯,因为这个密钥只有他们才能得到。此密钥依赖于大素数;(此段解释出自维基百科)

二、 PKI机制

PKI(Public KeyInfrastructure)即公钥基础设施,它包括:

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库:

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

证书版本号

证书序列号

数字签名算法ID

发行者名称

证书有效期限

证书主体名称

证书主体公钥

发行者的唯一标识

主体的唯一标识

扩展

发行者的签名:单向加密以上内容项

1)没有PKI机制的加密通信过程

A要给B加密一段数据发送过去

缺陷:接收方的公钥可能会被人冒充;这个缺陷会引发中间人攻击(man-in-middle)

2)增加PKI机制的加密通信过程

主要是为了解决公钥的可信问题,增加PKI机制后的通信过程比上述过程增加了验证证书的环节;

验证证书

当接收方拿到发送方的公钥,会要求发送方发送可信机构为其签署的证书,而后验证证书内容,根据这个验证结果来确定公钥的可信性;

索要证书的过程是基于SSL会话的方式进行的:

SSL会话:

   

第一阶段:ClientHello:

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

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

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

支持的压缩算法;

第二阶段:ServerHello

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

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

确认使用的加密方法;

服务器证书;

(如果服务器需要验证客户端证书则会索要客户端证书)

第三阶段:

验证服务器证书,在确认无误之后取出其公钥;

发送以下信息给服务器:

一个随机数:用于服务器公钥加密;

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

客户端握手结束通知。

第四阶段:

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

向客户端发送如下信息:

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

服务器握手结束通知。

验证的证书内容:

(1)用CA的公钥解密CA的签名,说明证书的来源可靠。

(2)用同样的加密算法加密证书得到特征码,与解密出的特征码比对,若一致,则完整性可靠;

(3)检查证书的有效期限

(4)验证主体名称是否符合;

(5)检查证书是否被吊销;

三、 OpenSSL介绍和使用openssl创建私有CA

1OpenSSL介绍

OpenSSL是SSL协议/TLS协议的开源实现程序,它由三部分组成

libcrypto:通用加密库,提供各种加密函数

libssl:TLS/SSL协议的实现;基于会话实现了身份认证、数据机密性和会话完整性的TLS/SSL库

openssl:多用途命令行工具;

注意:libcrypro和libssl主要是供给开发者使用;在这里我们仅说明一下openssl的使用;

openssl命令

使用格式:openssl command [ command_opts ] [command_args ]

它通过众多的子命令来实现各种不同的功能,子命令分为三类:

1、标准命令(enc,ca,req,genrsa,passwd,dgst...)可通过openssllist-standard-commands 查看.

2、消息摘要命令(如md5等子命令)可通过 openssl list-message-digest-commands 查看

3、加密命令(如des子命令)可通过 openssl list-cipher-commands 查看

注意:由于openssl有众多子命令,所以 man openssl 并不能看到子命令的帮助文档,想要查看子命令的帮助信息,应该先whatis command,然后再man command,

例如:

~]# whatis passwd
sslpasswd (1ssl)  - compute password hashes
passwd (1)      - update user‘s authentication tokens
passwd (5)      - password file
~]# man sslpasswd

1、常用命令

 1> enc 实现对称加密

支持的算法:3des,aes,blowfish,twofish

   常用选项:

           -in filename:指明需要加密的文件

-outfilename:知名密文输出的文件

-salt:加密时加一点杂质

-e :加密数据

-d :解密数据

-des3... :指明加密算法

-a :使用base64,base64基于64个可打印字符来表示二进制数据。如无此项,加密密文

是乱码

例如:

加密
~]# openssl enc -e -des3 -a -salt -in test -out test.crypt
解密
~]# openssl enc -d -des3 -a -salt -out test -in test.crypt

2> dgst 实现单向加密

dgst命令: openssl dgst -md5 /PATH/TO/SOMRFILE

此处-md5为单向加密算法,此外还有-md2,-md4,-rmd160,-sha,-sha1

3> passwd 生成用户密码

openssl passwd -1-salt SALT

-1:表示MD5算法,目前仅支持md5算法

-salt SALT:SLAT是杂质,一般是随机数。

例如:

~]# openssl passwd -1 -salt $(openssl rand -hex 4)

此处说明生成随机数的方法

openssl rand -hex NUM 即可生成一个16进制字符串

例如:

~]# openssl rand -hex 4

 4>genrsa 生成私钥

一般使用方法:(umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE  NUM_BITS)

其中umask 077保证私钥仅创建者可读;NUM_BITS必须是2的N次方;

例如:

~]# (umask 077;openssl genrsa -out fisrt.pri 512) 
Generating RSA private key, 512 bit long modulus
...........++++++++++++
...++++++++++++
e is 65537 (0x10001)

~]# cat fisrt.pri 
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBAL3I5YfgHBp6X8LJLXWb4d09hmjpnW0/cO5Hkt45tTaiZtCRnu4v
Dt0fLKBNVsirztD4mXR6KHvx91pWAMgNR+kCAwEAAQJAE1UnrJOzyS62Go2Lx/M9
KuBdlMpXcw2HX36DA4g1YX80YJIpEbElUtSAJ1mnm73HU0YBQaW7/+moSsXTgpvW
AQIhAPmixZqK8JLkDHmk8OjxOCQzWJFm7uZ0SBcN5v+eUvJRAiEAwp+C8V+hm+DE
qj6guba6Qm1B/GixioSb6QZooNIEPhkCIQDIbxTRvPTkPA54LSLxJZy6FC/srwTq
LDslp5ftbaWTwQIgGuGlWGl5DOqyv0D/Oid++oXUw2RCgXtnfXwhH3VimKECIAK1
lEloDaB18V+tK9d46JQXZAWBg3s+2oOL/AyjLBah
-----END RSA PRIVATE KEY-----

5> rsa 提取公钥

一般使用方法 openssl rsa -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout

例如:

~]# openssl rsa -in fisrt.pri -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL3I5YfgHBp6X8LJLXWb4d09hmjpnW0/
cO5Hkt45tTaiZtCRnu4vDt0fLKBNVsirztD4mXR6KHvx91pWAMgNR+kCAwEAAQ==
-----END PUBLIC KEY-----

2)使用openssl创建私有CA(配置文件在/etc/pki/tls/openssl.cnf的[ ca ]段

   概述:在将要被配置为CA的主机上生成一个自签证书,并为CA提供所需要的目录及文件即可

1、在/etc/pki/CA/private/下生成密钥cakey.pem

~]# (umask077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
Generating RSA private key, 4096 bit long modulus
.........................................................++
..................................................................................++
e is 65537 (0x10001)

2、生成自签证书

~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem-days 300
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN     
State or Province Name (full name) []:ShangHai
Locality Name (eg, city) [Default City]:ShangHai
Organization Name (eg, company) [Default Company Ltd]:OpenHome       
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server‘s hostname) []:centos 7
Email Address []:[email protected]

-x509:自签证书,专用于创建私有CA时;

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

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

-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;

-days:证书的有效时长,单位是天

注意:虽然指向的是私钥文件,但是会自动提取出公钥写入;

3、为CA提供所需的目录和文件

~]# mkdir/etc/pki/CA/{certs,crl,newcerts} -----> 注意:若这些文件存在则不用执行此步
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial

至此私有CA创建成功。

验证CA服务器颁发证书

以一台web服务器为例,向CA服务器请求一个证书

1、在web服务器所在主机的/etc/httpd目录下新建ssl目录,并在这个目录下生成一个私钥文件

[[email protected] httpd]# mkdir ssl
[[email protected] httpd]# cd ssl
[[email protected] ssl]# (umask 077;openssl genrsa -out httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
........................+++
...........................................................................................................+++
e is 65537 (0x10001)

2、在web服务器上生成证书签署请求

[[email protected] ssl]#openssl req -new -key httpd.key -out httpd.csr -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:ShangHai
Locality Name (eg, city) [Default City]:ShangHai
Organization Name (eg, company) [Default Company Ltd]:OpenHome
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server‘s hostname) []:centos 7
Email Address []:[email protected]

Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:123456    
An optional company name []:tianchao

注意:这一步的信息必须和CA的信息保持一致;

3、将请求通过可靠方式发送给CA服务器,我们这里是测试,所以使用scp工具,但实际使用中建议更安全的方式来传递请求

[[email protected] ssl]# scp httpd.csr [email protected]:/  ---> 172.16.25.71是CA服务器

4、CA服务器签署web服务器发来的请求

[[email protected] ~]# openssl ca -in /httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 200
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: Jan  9 15:55:33 2016 GMT
            Not After : Jul 27 15:55:332016 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = ShangHai
            organizationName          = OpenHome
            organizationalUnitName    = Ops
            commonName                = centos 7
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL GeneratedCertificate
            X509v3 Subject KeyIdentifier: 
               70:BE:AA:EB:B8:5E:C0:62:18:8B:D2:8E:A8:AF:9D:70:A8:ED:49:B7
            X509v3 Authority KeyIdentifier: 
               keyid:73:4E:41:9A:71:B3:F0:85:26:6E:99:1B:6B:E0:53:96:32:DC:8D:9F

Certificate is to be certified until Jul 27 15:55:33 2016 GMT (200 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

注意:CA服务器和客户端的httpd.csr文件在签署请求后都可以删除,以此来保证信息不泄露。

注:此篇博文是在CentOS系统上做的测试

时间: 2024-10-12 16:28:46

加密解密技术介绍和OpenSSL介绍的相关文章

加密和解密技术基础与OpenSSL

加密和解密技术基础与OpenSSL 加密和解密技术基础(01) 1.了解Linux  service  and  securityOpenSSL:为网络通信提供安全及数据完整性的一种安全协议 2.一般都是C/S通信,此种通信客户端有什么特性?服务端有什么特性呢?(1)两台主机上的通信方式?主机通信实际是进程间通信.通信方式:socket (套接字)ip:port          客户端cip:port<-->服务器端 scip:port(2)如何让客户知道自己的主机和端口呢?把某些众所周知的

加密解密技术基础、PKI及创建私有CA

加密解密技术基础.PKI及创建私有CA 一.背景 随着互联网的快速发展,整个互联网中涌入了大量的用户,正所谓林子大了什么鸟都有,随之而来的就是数据的安全性得不到保障:因此就有了对数据的加密及解密. 二.安全的目标 1.目标: 信息加密的目的是为了确保所传输的信息具有保密性,不被其他人所劫持后篡改信息:如果被篡改后接收方也应该能知道,而且也应该确保没被劫持的信息接收方可以读取. 2.数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡改. (2)

《Nodejs开发加密货币》之九:在Nodejs中使用加密解密技术

关于 <Nodejs开发加密货币>,是一个加密货币产品的详细开发文档,涉及到使用Nodejs开发产品的方方面面,从前端到后台.从服务器到客户端.从PC到移动.加密解密.区款链等各个环节.代码完全开源.文章免费分享. 相关资源见 http://ebookchain.org QQ交流群: 185046161 前言 加密解密技术在加密货币开发中的作用不言而喻.但技术本身并不是什么新鲜事,重要的是如果没有前面的P2P网络,和后面要介绍的区块链,单独的加解密显然没有那么神奇,加密货币也不会成为无需验证.

《Nodejs开发加密货币》之十:三张图让你全面掌握加密解密技术

关于 <Nodejs开发加密货币>,是一个加密货币产品的详细开发文档,涉及到使用Nodejs开发产品的方方面面,从前端到后台.从服务器到客户端.从PC到移动.加密解密等各个环节.代码完全开源.文章免费分享. 相关资源见 http://ebookchain.org QQ交流群: 185046161 前言 加密解密技术,涉及面很广,这里,把前人的研究成果汇总起来,通过图表的形式来帮助记忆和筛选,方便日后使用.内容主要包括两个方面,一个是场景与算法,一个是Nodejs的相关模块或组件.共三张脑图,具

linux关于加密解密技术基础、KPI及创建私有CA

linux加密和解密技术基础.KPI及创建私有CA 一.加密方式分为:1.对称加密:加密和解密使用同一个密钥:      对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,在对称加密算法中常用的算法有:DES. 3DES.TDEA.AES.    Blowfish.Twofish          IDE.ARC6.CAST5等.    特性:      1.加密.解密使用同一个密钥:      2.强原始数据分割成固定大小的块,逐个进行加密

加密解密技术基础、PKI、及创建私有CA

一.加密解密技术基础 (一) 安全的目标:      1.保密性,confidentiality      2.完整性,integrity         系统完整性,数据完整性      3.可用性,avaliability(二) 攻击类型:     1. 威胁保密性的攻击:窃听.通信量分析     2. 威胁完整性的攻击:更改.伪装.重放.否认     3. 威胁可用性的攻击:拒绝服务(DoS)(三) 解决方案:      技术(加密和解密).服务(用于抵御攻击的服务以及为了实现上述目标而特

linux CA 加密解密技术

一.基础知识 对称加密: 加密和解密方使用同一个密钥,用来解决数据机密性,但是密钥通过何种方式传递给对方不容易实现: 公钥加密: 密钥是成对出现的,分别为Secret key(密钥)和Public key(公钥)公钥加密必须使用与其相对应的 私钥进行解密并且公钥是从私钥中提取出来的,有私钥可以知道公钥是什么,但是知道公钥是不能知 道私钥的,公钥是公开的,而私钥是不公开的,但是公钥加密比对称加密慢3个数量级(1000倍), 加密速度相当的慢,所以单独用此加密方式也比较困难:公钥加密功能: 单向加密

加密解密技术基础,PKI以及创建私有CA

加密解密技术基础,PKI以及创建私有CA 加密算法和协议:1.对称加密:加密和解密使用同一个密钥 DES:Data Encryption Standard; 3DES:Triple DES; AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits) Blowfish Twofish IDEA RC6 CAST5 特性: (1)加密.解密使用同一个密钥: (2)将原始数据分割成为固定大小的块,逐个进行加密: 缺陷:

java进阶12 Base64 UrlBase64 Hex 加密 解密技术

java的加密与解密技术: 现在的加密技术主要有 单向加密算法:以MD5 SHA算法为代表 对称加密算法:以DES 三重DES AES PBE算法为代表 非对称加密算法:以RSA为代表 简要的说下这三种加密算法的区别 先是单向加密算法,顾名思义,它不会有密钥,因为它是单向的,加密之后无法解密,就连程序猿都无法知道加密之后的东西是什么 主要用处是数据完整性的验证. 对称加密算法,其特征是公钥与私钥相同.一般用来数据储存,比如将数据加密之后存入数据库,那么数据库管理员就无法泄密数据库中的类容 有密钥