加密解密技术简介及私有CA搭建

互联网时代,随着网络速度越来越快,大量信息在网线中流淌。不可避免的,一些重要的或私有的数据容易被人监听、拦截和窃取。为了解决数据在传输中遇到的保密性、可用性、完整性等一系列问题,我们通过加密、解密和安全服务等来保证数据的安全。


一、加密和解密

1、加密和解密简介

加密作为保障数据安全的一种方式,它不是现在才有的,它产生的历史相当久远,它是起源于要追溯于公元前2000年。那时常用的加密算法有替代加密算法、置换加密方法等。而随着计算机的高速发展,运算能力的增强,过去的密码都变得十分简单了,于是人们又不断地研究出了新的数据加密方式,如利用RSA算法产生的私钥和公钥就是在这个基础上产生的。近期加密技术主要应用于军事领域,如美国独立战争、美国内战和两次世界大战。

可以说,加密和解密在人类社会中是非常有用的,为此,还出现了一门学科:密码学。


2、加密算法和协议

目前,加密算法主要分为以下二类:


a、对称加密

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

其优点是算法公开、计算量小、加密速度快、加密效率高。

缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

常用算法有:DES、3DES、AES、Blowfish、IDEA等。


b、非对称加密(公钥加密)

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法,又叫做公钥加密。

与对称加密相比,其安全性更好:对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。

非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

基于非对称加密的特性,其还能用来进行密钥交换和身份认证。

常用算法有:RSA、DSA、Elgamal、DH等


除上述2类之外,还有一些特殊的算法和重要的协议

c、单向加密:

单向加密即不可逆加密,指加密明文后就不能解密密文了。其特性为定长输出,雪崩效应。常用于验证数据完整性。

常用算法有:MD5、SHA系列(SHA1、SHA224、SHA256、SHA384、SHA516)


d、密钥交换

密钥交换是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。

常用的密钥交换机制有:

公钥加密实现:发送方用接收方的公钥加密自己的密钥,接收方用自己的私钥解密得到发送方的密钥,逆过来亦然,从而实现密钥交换。

使用DH算法:前提发送方和接受方协商使用同一个大素数P和生成数g,各自产生的随机数X和Y。发送方将g的X次方mod P产生的数值发送给接收方,接受方将g的Y次方mod P产生的数值发送给发送方,发送方再对接收的结果做X次方运算,接受方对接收的结果做Y次方运算,最终密码形成,密钥交换完成。


3、常见的加密解密实现

由上可知,无论是对称密码还是非对称密码,都有着各自的优点和缺点。为了弥补各自的缺点,同时实现数据的完整性验证和身份验证,在生活中,经常通过以下机制进行加解密:

以Alice和Bob之间的数据传输加解密为例:

加密:Alice先通过单向加密获取该数据的特征码,并用其私钥A对该特征码加密,然后附加在该数据后。同时,Alice再随机生成一个对称密钥R,对上述数据和特征码加密,最后用Bob的公钥b加密对称密钥R,一起打包发送给Bob

解密:Bob收到打包的数据后,先用自己的私钥B解密对称密钥R(只有Bob能用自己的私钥解密)。获得密钥R后,可以解密数据和加密私钥A的特征码。此时,Bob可以通过Alice的公钥a解密加密的特征码(只有Alice的公钥能解密),确认是Alice所发。并对解密后的数据进行同算法的单向加密,获得新的特征码,然后和Alice的特征码相比较,相同即表示该数据完整。


4、常用加密工具

a、对称加密

openssl enc:


加密:

[root@www ~]# openssl enc -e -des3 -a -salt -in /etc/fstab -out /etc/fstab.out
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:

解密:

[root@www ~]# openssl enc -d -des3 -a -salt -in /etc/fstab.out -out /etc/fstab.out.in
enter des-ede3-cbc decryption password:

-e:加密

-d:解密

-a:基于base64编码

-des3:加密算法

-salt:需要添加salt值



b、非对称加密

openssl rsautl:使用前需先生成rsa公钥和私钥


生成私钥:

[root@www ~]# openssl genrsa -out /tmp/prikey.pem 1024    #1024为生成私钥长度,可更改
Generating RSA private key, 1024 bit long modulus
.++++++
........................++++++
e is 65537 (0x10001)

生成(分离)公钥:

~]# openssl rsa -in /tmp/prikey.pem -pubout >/tmp/pubkey.pem
writing RSA key

公钥加密:

[root@www ~]# openssl rsautl -encrypt -pubin -inkey /tmp/pubkey.pem -in /tmp/1.txt -out /tmp/2.txt

注意:加密文件不能过大

私钥解密:

[root@www ~]# openssl rsautl -decrypt  -inkey /tmp/prikey.pem -in /tmp/2.txt -out /tmp/3.txt
[root@www ~]# diff /tmp/1.txt /tmp/3.txt 
[root@www ~]#

解密后与源文件一致


c、单向加密

openssl dgst、md5sum、sha1sum等

openssl dgst:

[root@www ~]# openssl dgst -md5 /etc/fstab
MD5(/etc/fstab)= f18238a33f75400615faea062613ffe8

-md5:为加密算法,可更换为sha1,sha224,sha256等其他加密算法


md5sum:

[root@www ~]# md5sum /etc/fstab
f18238a33f75400615faea062613ffe8  /etc/fstab


sha1sum:(1可更改成其他特定值,即为其他加密算法)

[root@www ~]# sha1sum /etc/fstab
416573d6494624976781f5572867ae29b351637f  /etc/fstab


d、生成密码

openssl passwd:

[root@www ~]# openssl passwd -1 -salt 123
Password: 
$1$123$FtrLij.B8o3Ojz4..jZUs0

-1:以md5算法加密

-salt 123:加入salt值,其值为123(可更改)


e、生成随机字符串

openssl rand:

[root@www ~]# openssl rand -hex 4
1cf3011e
[root@www ~]# openssl rand -base64 4
qxCUEg==

-hex:用hex格式显示随机字符串

-base64:对随机字符串base64进行编码

4:指定字符串长度,单位为bytes



二、PKI

1、pki简介

PKI:Public Key Infrastructure,翻译过来就是公钥基础设施;PKI是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。

PKI作为一组在分布式计算系统中利用公钥技术和X.509证书所提供的安全服务,企业或组织可利用相关产品建立安全域,并在其中发布密钥和证书。在安全域内,PKI管理加密密钥和证书的发布,并提供诸如密钥管理(包括密钥更新,密钥恢复和密钥委托等)、证书管理(包括证书产生和撤销等)和策略管理等。PKI产品也允许一个组织通过证书级别或直接交叉认证等方式来同其他安全域建立信任关系。这些服务和信任关系不能局限于独立的网络之内,而应建立在网络之间和Internet之上,为电子商务和网络通信提供安全保障,所以具有互操作性的结构化和标准化技术成为PKI的核心。


2、pki组成

一个完整的pki系统应包括以下几部分:签证机构(CA)、注册机构(RA)、证书存取库(CB)、证书吊销列表(CRL)等。


证书机构CA是PKI的信任基础,它管理公钥的整个生命周期,其作用包括:发放证书、规定证书的有效期和通过发布证书废除列表(CRL)确保必要时可以废除证书。

注册机构RA提供用户和CA之间的一个接口,它获取并认证用户的身份,向CA提出证书请求。它主要完成收集用户信息和确认用户身份的功能。

证书存取库负责证书的存取,可以通过用户自己,或是通过目录服务。目录服务器可以是一个组织中现存的,也可以是PKI方案中提供的。

证书吊销列表(Certificate revocation lists,又称证书黑名单)为应用程序和其它系统提供了一种检验证书有效性的方式。任何一个证书废除以后,证书机构CA会通过发布CRL的方式来通知各个相关方。


3、证书格式

在Internet网络中,应用程序使用的证书都来自不同的厂商或组织,为了实现可交互性,要求证书能够被不同的系统识别,符合一定的格式,并实现标准化。X.509为证书及其CRL格式提供了一个标准。在该标准中,证书应包含以下的相关信息:


版本号:版本号指明X.509证书的格式版本,现在的值可以为0、1、2,也为将来的版本进行了预定义。

序列号:序列号指定由CA分配给证书的唯一的数字型标识符。当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中,这也是序列号唯一的原因。

签名算法ID:签名算法标识用来指定由CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和hash算法,须向国际知名标准组织(如ISO)注册。

发行者名称:此域用来标识签发证书的CA的X.500 DN名字。包括国家、省市、地区、组织机构、单位部门和通用名。

有效期限:指定证书的有效期,包括证书开始生效的日期和时间以及失效的日期和时间。每次使用证书时,需要检查证书是否在有效期内。

主体名称:指定证书持有者的X.500唯一名字。包括国家、省市、地区、组织机构、单位部门和通用名,还可包含email地址等个人信息等。

主体公钥:包含两个重要信息:证书持有者的公开密钥的值;公开密钥使用的算法标识符。此标识符包含公开密钥算法和hash算法。

发行者的唯一标识:签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串来唯一标识签发者的X.500名字。可选。

主体的唯一标识:持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时,用一比特字符串来唯一标识证书持有者的X.500名字。可选。

扩展:其他相关信息

发行者的签名:证书签发机构对证书上述内容的签名值。



三、搭建私有CA服务器

现有2台服务器,IP地址分别为172.16.249.137和172.16.249.85。我们将172.16.249.137搭建为私有CA服务器,在172.16.249.85生成证书并向私有CA服务器申请签署证书。以下为具体步骤:


1、CA服务器配置

通过ssh远程连接到172.16.249.137服务器上。


生成CA服务器私钥:

[root@www ~]# (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem)
Generating RSA private key, 1024 bit long modulus
.................++++++
........++++++
e is 65537 (0x10001)

():表示名令在该shell的子shell中运行

umask 066:为了使生成的私钥文件的权限只有root能读写

注意:文件名必须为cakey.pem


生成自签证书:

[root@www ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
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) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:magedu
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www.magedu.com
Email Address []:[email protected]

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

-x509:生成自签格式证书,专用于创建私有CA服务器

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

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

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

自签证书所需信息:

Country Name:证书所有者所在国家代码

State or Province Name:证书所有者所在省或州

Locality Name:证书所有者所在城市

Organization Name:证书所有者所在组织或公司

Organizational Unit Name:证书所有者所在部门

Common Name:证书所有者的名字或所在服务器的主机名

Email Address:证书所有者的邮件地址

注意:自签证书名必须为cacert.pem


提供CA服务器所需的目录及文件

[root@www ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
mkdir: 已创建目录 "/etc/pki/CA/certs"
mkdir: 已创建目录 "/etc/pki/CA/crl"
mkdir: 已创建目录 "/etc/pki/CA/newcerts"
[root@www ~]# touch /etc/pki/CA/{serial,index.txt,crlnumber}
[root@www ~]# echo 01 > /etc/pki/CA/serial
[root@www ~]# echo 01 > /etc/pki/CA/crlnumber

certs:存放已签证书目录

crl:存放吊销证书目录

newcerts:存放以序列号为名的证书的相关信息

serial:存放已签证书的序列号文件,必须先输入01,表示以01开始

index.txt:存放所有证书信息的数据库文件

crlnumber:存放已吊销证书的序列号文件,必须先输入01,表示以01开始


2、客户端服务器生成并向CA服务器申请签证

通过ssh连接到172.16.249.85服务器上,以httpd服务为例。


生成客户端服务器私钥

[root@localhost ~]# (umask 066;openssl genrsa -out /etc/httpd/ssl/pri.key)
Generating RSA private key, 1024 bit long modulus
..................................++++++
...............++++++
e is 65537 (0x10001)


生成请求签署的证书

[root@localhost ~]# openssl req -new -key /etc/httpd/ssl/pri.key -out /etc/httpd/ssl/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) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:magedu
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www.magedu.com
Email Address []:[email protected]

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


通过可靠方式将证书发送给CA服务器

[root@localhost ~]# scp /etc/httpd/ssl/httpd.csr [email protected]:/tmp
[email protected]'s password: 
httpd.csr                                                   100%  700     0.7KB/s   00:00

scp:用于在主机间的安全复制的命令


在CA服务器上签署证书

切回到172.16.249.137服务器,开始签证

[root@www ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -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: Jan  9 02:50:52 2016 GMT
            Not After : Jan  8 02:50:52 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = beijing
            organizationName          = magedu
            organizationalUnitName    = ops
            commonName                = www.magedu.com
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                93:F8:C1:BE:72:67:0D:8C:7D:CA:1E:C9:5E:DB:E5:92:9D:D7:0B:FE
            X509v3 Authority Key Identifier: 
                keyid:69:56:53:89:16:96:8A:8D:39:69:87:5B:E2:F1:59:09:0E:8B:85:67

Certificate is to be certified until Jan  8 02:50:52 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

确认无误后,输入y,签证完成

此时,serial文件和index.txt文件都有更新

[root@www CA]# cat serial
02
[root@www CA]# cat index.txt
V	170108025052Z		01	unknown	/C=CN/ST=beijing/O=magedu/OU=ops/CN=www.magedu.com/[email protected]

V:表示已签署


通过可靠方式将签署后的证书发个客户端服务器

[root@www ~]# scp /etc/pki/CA/certs/httpd.crt [email protected]:/etc/httpd/ssl
The authenticity of host '172.16.249.85 (172.16.249.85)' can't be established.
RSA key fingerprint is b2:a7:5c:a0:34:00:bd:e0:5d:5a:3c:56:07:4e:d7:a9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.249.85' (RSA) to the list of known hosts.
[email protected]'s password: 
httpd.crt                                                   100% 3233     3.2KB/s   00:00



3、吊销证书

当证书遗失或过期时,则需要在CA服务器上将该证书吊销

切回172.16.249.85服务器,查看要吊销的证书信息

[root@localhost ~]# openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=beijing/O=magedu/OU=ops/CN=www.magedu.com/[email protected]

-in:需要查看信息的证书路径

-noout:不输出证书信息(默认输出证书全部信息)

-serial:只输出证书序列号

-subject:只输出证书主体信息


确认要吊销的证书信息后,切回CA服务器,确认与本机数据库中是否相符

[root@www ~]# cat /etc/pki/CA/index.txt
V	170108025052Z		01	unknown	/C=CN/ST=beijing/O=magedu/OU=ops/CN=www.magedu.com/[email protected]


确认无误后,开始吊销证书

[root@www ~]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem 
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated

-revoke:要吊销的证书路径,为newcerts目录下的对应序列号的证书


更新证书吊销列表

[root@www ~]# openssl ca -gencrl -out /etc/pki/CA/thisca.crl
Using configuration from /etc/pki/tls/openssl.cnf

此时,crlnumber文件和index.txt文件都有更新

[root@www CA]# cat crlnumber
02
[root@www CA]# cat index.txt
R	170108025052Z	160109030554Z	01	unknown	/C=CN/ST=beijing/O=magedu/OU=ops/CN=www.magedu.com/[email protected]

R:表示该证书已吊销



四、相关参考

www.magedu.com

http://blog.csdn.net/as3luyuan123/article/details/16812011

http://blog.csdn.net/liuhuiyi/article/details/7776825


你可能感兴趣的:(数据加密)