一、概述SSL
SSL(Secure Socket Layer)安全套接字层,早期netscape公司想让工作在应用层中的各种协议在传输数据实现数据安全的目的,在应用层与tcp层之间引入的半层结构;SSL不仅是一种协议,也是一个库,能够实现让应用层的某种协议传输数据到tcp层之前调用SSL的功能;比如:应用层的HTTP、SMTP、FTP等协议到tcp层之前经过SSL的调用,在tcp层以HTTPS、SMTPS、FTPS形式传输数据;现在主流的版本是SSLv2、SSLv3。
二、了解OpenSSL
OpenSSL是SSL的开源实现,也是对称加密中最主要的工具之一,由下面三部分组成:
libcrypto:通用加解密库,提供各种加密函数,各种软件只要调用加密库就能实现加密作用;
libssl:TLS/SSL的实现,基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL;
openssl:多用途命令行工具,实现私有证书颁发机构,linux上通用基本工具之一;
OpenSSL的配置文件在/etc/pki/tls/openssl.conf,主要让OpenSSL工作成私有CA;
OpenSSL常使用的子命令:
req:生成证书、证书申请的工具;
       -new:生成一个新的证书
       -x509:生成x509格式的证书,目前主流的证书存储格式
       -key:指定密钥
       -out:保存至某个文件
       -days:证书保存时间
 
  1. #openssl req -new -x509 -key server1024.key -out server.crt -days 365 
genrsa:使用RSA算法帮助生成一个私钥,权限设为600
    numbits:可选选项,设定密钥长度,默认是512位
    -out 保存的文件
 
  1. #openssl genrsa -out srever1024.key 1024 
三、SSL建立会话的过程
前提:建立tcp的三次握手之后;
第一步:客户端向服务器端发出请求
第二步:客户端和服务器端协商使用协议版本(SSLv2、SSLv3、TLSv1)
第三步:协商后服务器端向客户端发送证书,客户端会检测证书的安全性
第四步:客户端随机生成一个对称密码使用服务器端的公钥加密传送给服务器端
第五步:服务器端拿到密码后加密数据传送给客户端
第六步:通信完成后撤离会话通道,tcp四次断开
四、基于OpenSSL建立会话实例配置
前提:一台虚拟机作为CA机构,一台虚拟机作为web服务器并在此服务器上配置基于虚拟主机域名
规划如下:
CA机构主机地址:172.16.52.2
web服务器主机地址:172.16.52.3
虚拟主机域名:www2.magedu.com
1、 在CA机构主机中为CA机构自身生成私钥

基于OpenSSL安全会话的实现_linux

2、在配置文件中修改默认信息
  1. [root@localhost CA]#vim ../tls/openssl.cnf  
  2. countryName_default  =CN  
  3. stateOrProvinceName_default  =Henan  
  4. localityName_default     =Zhengzhou  
  5. O.organizationName_default   =MageEdu  
  6. organizationalUnitName_default   =Tech  
  7. ######这些默认信息可以根据自己需求自定义  

基于OpenSSL安全会话的实现_linux_02

3、生成自签证书
基于OpenSSL安全会话的实现_linux_03

 4、为签证的证书准备目录和文件

  1. [root@localhost CA]#mkdir certs crl newcerts  
  2. [root@localhost CA]#touch index.txt  
  3. [root@localhost CA]#echo 01 > serial  

5、web服务器上安装httpd软件包及mod_ssl模块

  1. [root@ns2 ~]# yum -y install httpd      #####可以自己配置yum源,在自己配置yum源中下载httpd软件包,我这里是通过自己配置的yum源下载的软件包  
  2. [root@ns2 ~]# yum install mod_ssl     ####让web服务器支持ssl功能,安装ssl模块 

6、生成服务器端密钥

  1. [root@ns2 ~]#cd /etc/httpd/  
  2. [root@ns2 httpd]#mkdir ssl  
  3. [root@ns2 httpd]#cd ssl/  
  4. [root@ns2 ssl]#(umask 077; openssl genrsa 1024 > httpd.key)  

7、在服务器端设置基于虚拟主机域名

  1. [root@ns2 ~]#cd /etc/httpd/conf.d/  
  2. [root@ns2 conf.d]#vim vitual.conf  
  3. <VirtualHost 172.16.52.3:80>  
  4.     ServerName www2.magedu.com  
  5.     DocumentRoot "/web/vhosts/www2" 
  6. </VirtualHost>  
  7. [root@ns2 conf.d]#mkdir /web/vhosts/www2 –pv  
  8. [root@ns2 conf.d]#cd /web/vhosts/www2/  
  9. [root@ns2 www2]#vim index.html  
  10. www2.magedu.com  
  11. /web/vhosts/www2  
  12. 保存退出  
  13. [root@ns2 www2]#service httpd restart  

8、生成证书签证请求

基于OpenSSL安全会话的实现_linux_04

9、CA机构主机发送证书请求

  1. [root@ns2 ssl]#scp httpd.csr 172.16.52.2:/tmp 

10、CA机构主机上为服务器端的证书请求签证

基于OpenSSL安全会话的实现_linux_05

11、查看签证后的信息

基于OpenSSL安全会话的实现_linux_06

12、把生成的证书复制到服务器端

  1. [root@localhost CA]#scp /tmp/httpd.crt 172.16.52.3:/etc/httpd/ssl/ 

13、删除在/tmp下生成的证书信息

  1. [root@localhost CA]#cd /tmp  
  2. [root@localhost tmp]#rm –rf httpd.c*  
  3. #######为了防止其他人窃取证书信息  

14、在服务器端基于主机域名使用生成的证书

  1. [root@ns2 conf.d]#vim ssl.conf  
  2. <VirtualHost 172.16.52.3:443>   ####地址一定要跟虚拟主机的地址保持一致  
  3. ServerName hello.magedu.com  
  4. DocumentRoot "/www/magedu.com" 
  5. SSLCertificateFile /etc/httpd/ssl/httpd.crt    ####基于SSL证书文件路径  
  6. SSLCertificateKeyFile /etc/httpd/ssl/httpd.key   ####基于SSL服务器端私钥文件路径  
  7. 保存退出  
  8. [root@ns2 conf.d]#service httpd restart  

15、查看监听端口

基于OpenSSL安全会话的实现_linux_07

16、在物理机的hosts文件添加虚拟主机IP和域名

  1. 物理机hosts文件路径:点击“本地磁盘C”—>Windows—>System32—>drivers—>etc—>hosts  
  2. 添加:172.16.52.3    www2.magedu.com  
  3. ######在IE浏览器上测试站点,对虚拟主机进行域名解析  

17、把服务器端的证书文件拖到物理机上

基于OpenSSL安全会话的实现_linux_08

18、安装证书

基于OpenSSL安全会话的实现_linux_09

基于OpenSSL安全会话的实现_linux_10

一直点击“下一步”,会出现“导入成功”字样

19、测试站点www2.magedu.com

基于OpenSSL安全会话的实现_linux_11

 这样一个基于OpenSSL实现https会话的配置就做好了,大家动手试试吧!