常见加密算法:

对称加密:

加密和解密使用的是同一个密钥。

DES:Data Encroption Standard 56bit密钥长度。

3DES:三层DES


AES:Advanced 128bit密钥长度

AES192,AES256,AES512

BlowFish


单向加密:

1.提取数据特征码,输入一样,输出必然一样。

2.雪崩效应:输入的微小改变,将会引起结果的巨大改变。

3.定长输出:无论原始数据多大,结果大小都是相同的。

4.不可逆:无法根据特征码还原原始数据。

md4

md5

sha1

sha192,sha256,sha384,sha512

CRC32 校验码计算机制


非对称加密(公钥加密)

使用一对密钥:

公钥:public key 是从私钥提取的。

私钥:private key 只有自己有。


发送方用自己的私钥加密,可以实现身份验证。

发送方用对方的公钥加密,可以保证数据机密性。


公钥加密算法很少用来加密数据,速度慢。通常用来进行身份验证。


RSA

加密

签名

DSA

签名

ELGamal

商业算法


PKI Public Key Infrastructure 

公钥基础设施。提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。



CA:Certificate Authority

证书管理机构,CA是PKI系统中通信双方都信任的实体。

常见自信任证书格式:

x509 (TLS/SSL)

公钥及有效期限

证书的合法拥有者

证书该如何被使用

CA的信息

CA签名的校验码



pkcs12(OpenGPG)



SSL和TLS 安全协议

是为网络通信提供安全及数据完整性的安全协议。工作在传输层。

SSL;Secure Sockets Layer 安全套接层。

TLS:Transport Layer Security 传输层安全。SSL的后继者。


常见的加密工具: 

对称加密

openssl

ssl的开源实现

libcrypto 加密库,提供了各种加密函数

libssl TLS/SSL的实现

基于会话的,实现了身份认证、数据机密性和会话完整性。

gpg



#openssl COMMAND 多用途命令行工具,实现私有证书颁发工具。有很多子命令。

COMMNAD

version 查看openssl版本号


speed [CHIPHERNAME]

测试本机对各种加密算法的速度,指定CHIPHERNAME则计算某个算法的速度。


enc [OPTION] CHIPHERNAME 对称密钥加解密工具

[OPTION]

-in FILENAME 指定要加密的文件

-out FILENAME 指定加密后生成的文件

-a 对文件基于base64编码

-e 加密

-d 解密

-k PASSWORD 指定密钥

-salt SALT 使用salt以提高安全性

例如:

#cp /etc/inittab initt

#opanssl enc -des3 -salt -a -in initt -out inittdes3

#opanssl enc -des3 -d -salt -a -in inittdes3 -out initt


dgst CHIPHERNAME FILE 计算校验码


passwd [OPTION] [PASSWORD] 计算密码的哈希值。

[OPTION]

-1 指定使用md5加密

-salt SALT 使用salt

例如:

#openssl passwd -1 -salt JoKYOIkYT


rsa [OPTION] 密钥处理工具

[OPTION]

-in FILE 从文件读入

-pubout 输出公钥


例如:

#opensll rsa -in server.key -pubout >server.pub.key


rsautl [OPTION] rsa加密解密工具


rand [OPTION] NUM 伪随机数生成工具,生成长度为NUM的随机数。

[OPTION]

-base64 使用base64方式


例如:

#openssl rand -base64 65 生成长度为65的随机数。



genrsa [OPTION] [NUMBITS] 生成长度为NUMBITS的rsa私钥,不指定默认为512位。

[OPTION]

-out FILE 指定私钥保存文件


例如:

#openssl genrsa  生成长度为512位的rsa私钥

#openssl genrsa 2048 > server.key 生成长度为2048的rsa私钥,并保存到server.key中。

#openssl genras 2048 -out server.key

#(umask 077;openssl genrsa -out server1024.key 1024) 在括号中执行的命令会在子shell下执行。所以umask不会对父shell产生影响。


req [OPTION] 生成证书的工具

配置文件为/etc/pki/tls/openssl.cnf


[OPTION]

-new 创建一个证书

-x509 证书类型为x509

-key FILE 指定私钥文件

-out FILE 保存证书到文件

-day DAY 证书有效期限天数为DAY天


例如:

#openssl req -new -x509 -key server.key -out server.crt -day 365


x509 [OPTION] x509证书格式相关

[OPTION]

-text 以文本格式显示。

-in FILE 从指定证书文件中读取。


例如:

#opensll x590 -text -in server.crt





openssl实现私有CA实例:

1.生成一对密钥

#openssl genrsa -out server.key

#(umask 077;openssl rsa -in server.key -putout server.pub.key) 括号内的命令将会在子shell中执行,不会影响到父shell。


2.生成自签署证书

#openssl req -new -x509 -key server.key -out server.crt -day 365

Country Name (2 letter code) [AU]:国家名称

State or Province Name (full name) [Some-State]:省名称

Locality Name (eg, city) []:市名称

Organization Name (eg, company) [Internet Widgits Pty Ltd]:公司名

Organizational Unit Name (eg, section) []:部门名称

Common Name (eg, YOUR name or your servier's hostname) []: ca.test.com  至关重要!如果证书是用在服务器上的,一定要填服务器在DNS上的解析名称。

Email Address []:邮箱地址,一般填管理员的。


配置CA及证书签署实例;

#vim /etc/pki/tls/openssl

#(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2084)

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

#mkdir /etc/pki/CA/{certs,newcerts,crl}

#touch /etc/pki/CA/index.txt

#touch /etc/pki/CA/serial

#echo 01 > serial


假设已经搭建好http服务器

#mkdir -p /etc/httpd/ssl

#(umask077;openssl genrsa -out /etc/httpd/ssl/httpd.key 1024)

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

#openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt



测试用自签证书生成:

#ls /etc/pki/CA/certs

Makefile ca-bulidle.cert make-dummy-cert

#cd /etc/pki/CA/certs

#make xxx.crt|xxx.pem

#ls /etc/pki/CA/certs

Makefile ca-bulidle.cert make-dummy-cert xxx.crt

注意,这里的生成证书类型为自签证书,其中包含私钥,只能用于实验,绝对不能用在生产环境!

#cat Makefile  通过查看此文件可以看make的详细使用说明。