常见加密算法:
对称加密:
加密和解密使用的是同一个密钥。
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的详细使用说明。