SSL是SecureSocketLayer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape(网警)公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。目前,利用公开密钥技术的SSL协议,已成为Internet上保密通讯的工业标准。安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
AB通信身份认证过程发送方步骤一:
用单向加密的方法,生成特征码
步骤二:
发送方用自己的私钥加密特征码
步骤三:
生成一个临时的对称密钥,加密这整段数据
步骤四:
密钥交换: 自己生成一个密码用对方的公钥加密这个密码,从而使得只有对方可以解密
接收方步骤一:
接收方用自己的私钥解密,然后得到临时对称密钥的密码
步骤二:
用发送方的公钥解密得出数据特征码
步骤三:
然后用同样的单向加密算法计算出数据特征码进行比对,同时也可以验证数据的完整性
单向加密:
功能:保证数据完整性,只能加密不能解密,提取数据指纹
特性:定长输出、雪崩效应
算法: md5 :128bitssha1:160bitssha224、sha256、sha384、sha512
用法:
提取/etc/inittab的特征码:
~]# openssl dgst -md5 /etc/inittab
MD5(/etc/inittab)= 66a88d6c4d693170753ea3382f8bc150
查看/etc/inittab的特征码
~]# md5sum /etc/inittab 66a88d6c4d693170753ea3382f8bc150 /etc/inittab
公钥加密:功能:
数字签名:主要在于让接收方确认发送方的身份
密钥交换:发送方用对方公钥加密一个对称密钥,发送给对方
数据加密:
算法: RSA, DSA, ELGamal DSS: Digital Signature Standard DSA:Digital Signature Algorithm
用法:
生成私钥:
~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 1024)
提出公钥:
~]# openssl rsa -in /etc/pki/CA/private/cakey.pem -pubout
对称加密:加密和解密使用同一个密钥
特性:加密解密使用同一个秘钥,将原始数据分割成固定大小的块,逐个进行加密
缺陷:
1、密钥过多
2、密钥分发困难
算法 DES:数据加密标准,已经寿终正寝 56位密钥 3DES:依然被广泛使用 AES:高级加密标准 128 192 256 384位密钥 Blowfish Twofish IDEA RC6 CAST5
用法加密实例: 将inittab这个文件用des3的加密算法加点盐,保存到当前目录叫inittab.des3 openssl enc -des3 -salt -a -in inittab -out inittab.des3 会让你输入密码解密实例: openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab密钥交换
公钥加密:公钥传送给对方,密码在网上传输,通过暴力方式可以破解出来,但是用DH不会
DH :Diffie-Hellman算法 原理看IKE
IKE:密钥交换简写 离散对数原理剖析: (单向加密) A:生成 x B:生成 y A:g^x%p --> B A把g的x次方对p取模 传给B B: g^y%p --> A B把g的y次方对p取模 传给A 我们在互联网上传递了4个数字: 四个数字分别是 g 、p、 g^x%p、g^y%p 拿到数字后 A:(g^y%p)^x=g^yx%p B:(g^x%p)^y=g^xy%p 分别取自己手中数字的平方,结果相同 这就是著名的Diffie-Hellman算法生成用户密码:
openssl passwd -1 -salt SALT (-1 是md5加密格式)
/]# openssl passwd -1 -salt 123 Password: $1$123$7mft0jKnzzvAdU4t0unTG1 /]# openssl passwd -1 -salt 123 Password: $1$123$7mft0jKnzzvAdU4t0unTG1 由此可见sort一样密码一样,生成的密码串一定一样
生成随机数:~]#openssl rand -base64 10~]#openssl rand -hex 10 相当于sort可以命令调用随机数生成器:
/dev/random:仅从熵池中返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数,随机数用尽,会利用软件生成伪随机数,非阻塞;伪随机数不安全
熵池中随机数的来源;
硬盘IO中断时间间隔;
键盘IO中断时间间隔; 如果随机数用尽可以通过复制大文件来生成随机数
创建私有CA:
openssl命令:
配置文件:/etc/pki/tls/openssl.cnf
构建私有CA:
在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;
步骤:
(1) 生成私钥;
~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)注释:使用rsa算法生成密钥并保存至/etc/pki/CA/private/叫做cakey.pem 密码长度为4096
使用rsa算法生成私钥保存为cakey.pem这个名
(2) 生成自签证书;
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 -new:生成新证书签署请求; -x509:生成自签格式证书,专用于创建私有CA时; -key:生成请求时用到的私有文件路径; -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书; -days:证书的有效时长,单位是day;注释:req生成自签署证书,指明密钥文件是cakey.pem并将证书保存为cacert.pem,指定有效期为一年 CN;Hebei;Zhengzhou;Renfang;Yunwei;ca.mageedu.com;caadmin@mageedu.com
(3) 为CA提供所需的目录及文件;
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts} ~]# touch /etc/pki/CA/{serial,index.txt} ~]# echo 01 > /etc/pki/CA/serial
要用到证书进行安全通信的服务器,需要向CA请求签署证书:
客户机请求CA授权:
步骤:(以httpd为例)
(1) 用到证书的主机生成私钥;
~]# mkdir /etc/httpd/ssl ~]# cd /etc/httpd/ssl ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
(2) 生成证书签署请求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
(3) 将请求通过可靠方式发送给CA主机;即将httpd.csr文件发送到CA服务器上
(4) 在CA主机上签署证书;
吊销证书: 步骤: (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
openssl 配置文件:
/etc/pki/tls/openssl.cnf
[root@localhost tmp]# cat /etc/pki/tls/openssl.cnf
该配置文件中以 "[配置段]",的形式配置相关信息
===============================================================================================
==================================== openssl.cnf部分内容摘要=====================================
# OpenSSL example configuration file.
# This is mostly being used for generation of certificate requests.
######################################################################################
[ ca ] #CA相关配置段
default_ca = CA_default # The default ca section # 默认CA在[ CA_default ]配置
######################################################################################
[ CA_default ] # 默认当做CA的工作环境
dir = /etc/pki/CA # Where everything is kept默认工作目录,变量形式
certs = $dir/certs # Where the issued certs are kept签发的证书位置
crl_dir = $dir/crl # Where the issued crl are kept吊销的证书位置
database = $dir/index.txt # database index file.颁发过的证书索引文件
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate指明CA的自签证书
serial = $dir/serial # The current serial number指明当前证书序列号,第一次要指定
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key,CA自己的私钥
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
default_days = 365 # how long to certify for证书的默认有效期
default_crl_days= 30 # how long before next CRL默认声明有效期
default_md = sha256 # use SHA-256 by default默认的生成算法
preserve = no # keep passed DN ordering
####################################################################
[ req ] # 向CA证书签署发起注册请求相关属性
default_bits = 2048
default_md = sha256
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert
===============================================================================================
在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可
提取公钥
openssl rsa -in server.key -putout 将server.key里的公钥提取出来,一般不需要手动
步骤二、
req生成自签署证书( 指定密钥文件是cakey.pem 保存在cacert.pem 指定有效期限为一年)
站在CA目录上执行
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 365
CN;Hebei;Zhengzhou;Renfang;Yunwei;ca.mageedu.com;caadmin@mageedu.com
自签署证书做好了 可以用这句话查看openssl x509 -text -in server.crt
现在CA准备好了
四:vim /etc/pki/tls/openssl.cnf 编辑CA的配置文件
修改:dir =/etc/pki/CA
CA中还必须包含下面的几行命名的目录
在下面 还可以设置默认的个人信息,以后就不用重复填写了
五:私钥应该保存在/etc/pki/CA/private目录下叫做cakey.pem
六:在CA下创建 mkdir certs newcerts crl
七、还要准备两个文件:touch index.txt touch serial ;echo 01 > serial
八、在另外一台服务器上mkdir /etc/httpd
cd /etc/httpd; mkdir ssl/ ; cd ssl/
九、这台服务器需要申请生成私钥 (umask 077; openssl genrsa -out httpd.key 1024 )
十、还在ssl目录下 进行证书签署请求
openssl req -new -key httpd.key -out httpd.csr
下面填写的城市 公司 部门 一定要和CA一致
十一、因为在一台服务器,签署证书就不用远程发送;下面是ca签发的过程
openssl ca -in httpd.csr -out httpd.crt -days 365
十二:当前目录下就会有一个httpd.crt的证书
十三:回到CA cd /etc/pki/CA; cat index.txt 会有一个01号 因为前面咱们echo进去了一个01
.crt是证书 .csr是请求 .key是生成密钥
这个过程需要背过;而且要能把当前主机做成CA的过程用脚本实现,包括修改配置文件
附加知识点 生成测试用户:cd /etc/pki/tls/certs/
make httpd.pem 他会自动帮你生成私钥 让你填写各种信息
在certs目录下就会生成一个httpd.pem (私钥也在里面,但是正式环境不能这么玩) 根据后缀的不同自动确定是什么文件 Makefile文件中有定义