本文环境 RedHat 5.8

本博文主要内容:加密算法、CA介绍和配置等、web利用CA认证构建https安全传输

1、在互联网上数据额传输有两种:明文传输和加密传输。明文传输的协议有:ftp、http、smtp、telnet。但是为了数据的完整性和安全性,所以后来引用了加密等相关手段来保证数据的安全和完整性。

2、数据的机密性:

为了保证我们传输的数据不让第三方看到,所以我们采用加密来保证数据的机密性,让数据加密以后传输出去~然后让接收方利用相关的解密工具来对其收到的加密密文解密成明文,然后查看,这样就保证了数据的机密性。

常用的加密算法:

①、提取数据的特征码:利用数据的所有特性提取出一段特征码,然后利用这个特征码是否改变来保证数据的完整性,这种算法有以下几个特征:

输入一样,输出必须相同。

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

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

加密过程不可逆,无法根据特征码还原原来的数据。

②、协商生成密码:密钥交换

密钥交换的算法:

AB:p-大素数,g-生成数

A:x  、B:y

A:g^x%p—>B 

B:g^y%p-->A

A: (g^y%p)^x=g^yx%p

B: (g^x%p)^y=g^xy%p

这个结果就是密钥!

③、公钥解密算法:非对称的加密算法

密钥对:公钥publickey私钥scritekey,公钥是来自于私钥的

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

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

公钥加密算法很少利用加密数据,速度太慢,主要用于身份验证的。

④、对称加密算法:DES加密、3DES、AES高级加密标准、AES128(密码长度)、AES256、Blowfish。

单向加密:MD4、MD5(128)、SHA1(160)、SHA192、SHA384(输出长度)、CRC-32(循环冗余校验码)

⑤、公钥加密:身份认证(数字签名)、数据加密、密钥交换

公钥加密算法:RSA:既可以加密也可以签名、DSA:只能签名

对称加密的工具:openssl、gpg

3、PKI:Public Key Infrastructure

PKI定义了CA和其他的信息。

CA:证书颁发机构,Certificate Authority,既证书权威机构,是PKI的核心。CA中包含了证书吊销列表,数字证书有不同的格式,目前最流行的格式是X509的格式。

x509的证书格式包含:公钥及其有效期限、证书的合法拥有者、证书如何使用、CA的信息、使用CA签名的校验码

4、openssl:SSL的开源实现。

openssl软件组成:

libcrpto:通用加密库

libssl:TLS/SSl的实现,基于会话的,实现了身份认证、、数据机密性和会话完整性的TLS/SSL库

openssl:多用途命令行工具,可以实现私有证书颁发机构。

②、openssl常用的子命令

 

 
  
  1. openssl speed #:测试评估系统对加密算法的性能 
  2.  
  3. enc:加密算法 
  4.  
  5. salt:加salt加密 
  6.  
  7. openssl enc -des3 -salt -a -in inittab -out inittab.des3 :加密数据 
  8.  
  9. openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab :解密数据 
  10.  
  11. openssl dgst -shal initta:计算数据的特征码 
  12.  
  13. openssl passwd –l   密码:输入密码即可显示加密后的密码 
  14.  
  15. openssl passwd -1 -salt 数据:加密的时候指定salt 
  16.  
  17. openssl rand -base64 100:生成随机数 

③、openssl实现私有CA:先生成一对密钥,然后生成自签证书。

 

 
  
  1. 生成密钥: 
  2.  
  3. openssl genrsa -out /PATH/TO/KEYFILENAME NUMBITS 
  4.  
  5. NUMBITS:密钥长度,默认是128位的 
  6.  
  7. fg:(umask 077;openssl genrsa -out chris.key 1024)  //生成后直接为700权限的key 
  8.  
  9. openssl rsa -in /PATH/TO/KEYFILENAME –pub out   //读入密钥文件并输出公钥文件(提取公钥) 
  10.  
  11. 生成证书: 
  12.  
  13. openssl req -new -x509 -key chris.key -out chris.crt -days 365(-days:证书的有效期限),
  14. 然后输入相关的信息即可生成证书。 
  15.  
  16. 主机名称:至关重要,与主机名称保持一致,DNS主机名称,通信的唯一凭证。 
  17.  
  18. fg:openssl x509 -text -in chris.ca 

5、CA配置文件:/etc/pki/tls/openssl.cnf

 

 
  
  1. [ CA_default ] 
  2.  
  3.             dir             = /etc/pki/CA  //工作目录 ,此处需要指定,不然给客户到签证的时候必须
  4. 在特定的目录下才能实现。         
  5.             certs           = $dir/certs  //客户端证书目录  
  6.             crl_dir         = $dir/crl    //证书吊销列表          
  7.             database        = $dir/index.txt //证书记录信息   
  8.             -------------------------  
  9.             new_certs_dir   = $dir/newcerts  //新生成证书的目录  
  10.             certificate     = $dir/cacert.pem //CA自己的证书位置  
  11.             serial          = $dir/serial     //序列号  
  12.             crlnumber       = $dir/crlnumbe   //证书吊销列表序列号  
  13.             --------------------------  
  14.             crl             = $dir/crl.pem   //证书吊销列表文件      
  15.             private_key     = $dir/private/cakey.pem //CA自己的私钥  
  16.             RANDFILE        = $dir/private/.rand //随机数文件     
  17.             x509_extensions = usr_cert    
  18.             ------------------------------ 

6、HTTP利用CA构建https服务器

https传输端口是443端口。

①、安装httpd软件,构建http服务器

yum install httpd httpd-devel httpd-manual –y  //安装httpd需要的相关软件包(rpm安装的时候需要安装其所依赖的包:

apr-devel、apr-util-devel)

图像 026

启动httpd服务,查看信息

service httpd start

图像 027

网页测试

图像 028

 

 

②、把自身服务器做成CA

自己生成一对密钥;

 

 
  
  1. cd /etc/pki/CA 
  2.  
  3. (umask 077; openssl genrsa -out private/cakey.pem 2048)  //生成证书 
  4.  
  5. openssl req -new -x509 -key private/cakey.pem -out cacert.pem  //生成自签证书 
  6.  
  7. mkdir certs newcerts crl //建立相关的目录 
  8.  
  9. touch index.txt 
  10.  
  11. touch serial //建立序列号文件 
  12.  
  13. echo 01 > serial //写入起始序列号 

图像 029 

③、配置httpd使用证书

 

 
  
  1. cd /etc/httpd //web服务器的配置目录 
  2.  
  3. mkdir ssl 
  4.  
  5. cd ssl     //每一种服务要想使用证书,必须有私钥,每一种应用都需要自己的证书  
  6.  
  7. (umask 077; openssl genrsa -out http.key 1024)//给自己生成密钥 
  8.  
  9. openssl req -new -key httpd.key -out httpd.csr  //:证书签署请求文件,机构和其他名字必须
  10. 和CA颁发机构上的一样。 
  11.  
  12. openssl ca -in httpd.csr -out httpd.crt -days 365 //CA签名,签名以后才可以使用 

图像 030

图像 031

下面配置http使用CA等信息

需要先安装httpd和ssl联系的装载模块:mod_ssl

yum install mod_ssl

service httpd restart

httpd如果利用虚拟主机的话,其中只能为一个支持ssl的虚拟主机。

然后配置ssl.conf

 

 
  
  1. vim /etc/httpd/conf.d/ssl.conf   配置如下内容   
  2.  
  3. LoadModule ssl_module modules/mod_ssl.so-装载配置模块  
  4.         Listen 443--监听443端口  
  5.         AddType application/x-x509-ca-cert .crt 增加支持证书  
  6.         AddType application/x-pkcs7-crl    .crl    增加识别证书吊销列表  
  7.         SSLPassPhraseDialog  builtin       //ssl生成阶段的会话机制  
  8.         SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000) 缓存空间  
  9.         SSLSessionCacheTimeout  300 缓存时长  
  10.         <VirtualHost _default_:443> --定义虚拟主机  
  11.         ServerName NAME   ---虚拟主机的名字  
  12.         DocumentRoot ----文件路径  
  13.         ErrorLog logs/ssl_error_log   --错误日志  
  14.         TransferLog logs/ssl_access_log  --ssl的登陆日志  
  15.         LogLevel warn                ---日志级别  
  16.         SSLEngine on     ---启用或关闭ssl工具  
  17.         SSLProtocol all -SSLv2---支持的协议  
  18.         SSLCertificateFile /etc/pki/tls/certs/localhost.crt--证书文件全路径  
  19.         SSLCertificateKeyFile /etc/pki/tls/private/localhost.key--证书私钥全路径 

这两项需要修改为我们的实际需要,如下

SSLCertificateFile /etc/httpd/ssl/httpd.crt

SSLCertificateKeyFile /etc/httpd/ssl/http.key

========

httpd –t :检查配置是否有语法错误

然后从前httpd服务器即可

④、配置测试

从CA服务器上下载CA自签证书cacert.pem,并重新修改后缀.crt后导入到本机,如下

图像 035

图像 036

编辑windows的hosts文件,添加域名解析:172.16.7.3  www.chris.com

 

图像 040

ok~测试完毕,现在已经实现了https协议的安全访问~