环境:rhel5.4 httpd-2.2. 3mod-ssl
原理:
第一步:AB双方商量使用什么加密算法,怎么加密等等。 第二步:A发送证书给B,为了使B相信他。 第三步:B相信了,就生成对称密钥,将请求页面发送给A。 最后,A使用B发送的密钥加密后,将请求回应给B。
由于B要验证A的身份,因此,这里引入了第三方权威颁发机构,即CA,可以给A发证书。而B是相信CA的,因此,B拥有CA的证书。
则,A生成一对公钥,发送给CA进行签署(可以理解为盖章)得到证书,然后返回给自己,并且配置服务器,使之能使用证书。而B收到A的证书后,使用保存在主机上的CA证书去验证。
基本概念:
1、SSL所使用的证书可以自己生成,也可以通过一个商业性CA(如Verisign 或 Thawte)签署证书。
2、证书的概念:首先要有一个根证书,然后用根证书来签发服务器证书和客户证书,一般理解:服务器证书和客户证书是平级关系。在SSL必须安装根证书和服务器证书来认证。 因此:在此环境中,至少必须有三个证书:根证书,服务器证书,客户端证书。
在生成证书之前,一般会有一个私钥,同时用私钥生成证书请求,再利用证书服务器的根证来签发证书。
3、签发证书的问题:我最近找了很多关于openssl的资料,基本上只生成了根证书和私钥及服务器证书请求,并没有真正的实现签证。我这里参考了一些资料,用openssl自带的一个CA.sh来签证书,而不是用MOD_ssl里的sign.sh来签。用openssl语法来生成证书,有很多条件限定,如目录,key的位置等,比较麻烦,我实验了好几天,最后放弃了。有兴趣的可以参考一下openssl 手册。
加密分类:
对称加密
建立在双方互相信任的基础上,密钥只有一种,只有在拥有密钥的前提下才能解密数据。没有密钥,别人无法看到解密后的数据。
非对称加密
先手动生成一对密钥,公钥和私钥,公钥可以被任何人拥有,私钥一般只有自己保存,公钥发布出去,自己用私钥加密后的数据文件被获取了公钥的另一方获取,就可以解密数据文件。一般用于,身份验证,让自己授权的一些人查看自己用私钥机密的数据,或者让对方用自己的公钥加密后的文件自己用私钥可以查看。
单向加密
验证数据的完整性,一般用于数字签名。
对数据单向加密,生成特征码,用来验证数据的完整性。数据发生微笑的变化,就会引发雪崩效应,从而能够确认数据是否完整。
目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。它的主要方式是,报文的发送方从报文文本中生成一个128位的散列值(或报文摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。
加密机制:
明文加密:telnet ftp pop3 密码不可靠;sendmail NFS NIS 信息数据的不可靠;rsh rcp 验证的不可靠
步骤:
CA产生
cd /etc/pki 公钥基本设置
vim tls/openssl.cnf
图1
相关阅读:
Ubuntu 下 Apache虚拟主机的配置
CentOS 6.3下Apache2.4.4的安装