摘要:
     penSSL是使用非常广泛的SSL的开源实现。由于其中实现了为SSL所用的各种加密算法,因此OpenSSL也是被广泛使用的加密函数库。 1.1 SSL1.1 SSL1.1 SSL1.1 SSL     SSL(Secure Socket Layer)安全协议是由Netscape公司首先提出,最初用在保护Navigator浏览器和Web服务器之间的HTTP通信(即HTTPS)。后来SSL协议成为传输层安全通信事实上的标准,并被IETF吸收改进为TLS(Transport Layer Security)协议。 SSL/TLS协议位于TCP协议和应用层协议之间,为传输双方提供认证、加密和完整性保护等安全服务。SSL作为一个协议框架,通信双方可以选用合适的对称算法、公钥算法、MAC算法等密码算法实现安全服务      

    OpenSSL是著名的SSL的开源实现,是用C语言实现的。 OpenSSL的前身是SSLeay,一个由Eric Young开发的SSL的开源实现,支持SSLv2/v3和TLSv1。   伴随着SSL协议的普及应用,OpenSSL被广泛应用在基于TCP/Socket的网络程序中,尤其是OpenSSL和Apache相结合,是很多电子商务网站服务器的典型配置。

 

本文操作主要分为以下几部分:

  1,架设CA证书服务器

  2,架设web服务器

  3,在web服务器上生成证书签署请求 申请CA证书服务器签署

  4,导入签署证书,完成https加密访问

签署证书时提示信息解释:

  Country Name (2 letter code) [GB]:                              指定国家 CN
   State or Province Name (full name) [Berkshire]:                指定省份
   Locality Name (eg, city) [Newbury]:                            指定城市名称
   Organization Name (eg, company) [My Company Ltd]:              公司名称
   Organizational Unit Name (eg, section) []:                     指定部门  tech技术部
   Common Name (eg, your name or your server's hostname) []:      指定主机名称,必须写正确主机名
   Email Address []:                                              邮件地址

证书配置文件选项解释:

/etc/pki/tls/openssl.cnf  证书配置文件解析
   dir                     = /etc/pki/CA     证书工作路径
   certs                   = $dir/certs      客户端证书位置
   crl_dir                 = $dir/crl        证书吊销列表位置
   database                = $dir/index.txt  证书列表,发证人员信息列表
   new_certs_dir           = $dir/newcerts   刚新生成的证书存放位置
   certificate             = $dir/cacert.pem  自己证书
   serial                  = $dir/serial      证书序列号
   crlnumber               = $dir/crlnumber   证书吊销列表的序列号
   crl                     = $dir/crl.pem     当前证书吊销列表的文件
   private_key             = $dir/private/cakey.pem  CA自己的私钥
   RANDFILE                = $dir/private/.rand      随机数文件

   default_days    = 365           证书默认有效时间    
   default_crl_days= 30            证书吊销列表存放时间      

配置过程: 

 172.16.163.1  做CA证书服务器    简称A主机
 172.16.163.10 做web服务器       简称B主机
 一下Axx和Bxx表示在A主机上操作,xx 表示 0-9 的数字,意思是第xx步操作
 这台服务器首先要装有httpd,为了方便测试先使用 yum install -y httpd 安装即可。

  
A1, 生成私钥
  cd /etc/pki/CA
  (umask 077; openssl genrsa -out private/cakey.pem 2048)

A2,生成自签证书
  openssl req -new -x509 -key private/cakey.pem  -out cacert.pem -days 3655
A3,修改 vim /etc/pki/tls/openssl.cnf 
  dir   = /etc/pki/CA 
A4,创建所需的目录和文件 
  mkdir certs crl newcerts
   touch index.txt
  echo 01 > serial
B5,使web服务器支持ssl 功能   
  yum install -y mod_ssl
B6,创建一个存放证书的文件夹
  mkdir /etc/httpd/ssl
  cd /etc/httpd/ssl
B7,为web服务器生成秘钥
  (umask 077; openssh  genrsa 1024 > httpd.key)
B8,生成证书签署请求
  openssl  req -new -key httpd.key  -out httpd.csr
  注意:#Common Name (eg, your name or your server's hostname) []:www.b.com 
  填写此项时候一定要写准确主机名
B9,把签署请求发至CA上 签署
  scp httpd.csr 172.16.163.1:/tmp
  
A10, 在CA服务器上签署 CA证书
  openssl  ca -in /tmp/httpd.csr  -out /tmp/httpd.crt -days 3650
A11,查看证书是否签署完毕
  cat /etc/pki/CA/index.txt
A12,把签署完毕的证书发给 web服务器
  scp /tmp/httpd.crt 172.16.163.10:/etc/httpd/ssl
A13,删除CA服务器/tmp/下的证书签署文件,这里是为了安全期间
   rm -rf /tmp/*
B14, 编辑/etc/httpd/conf.d/ssl.conf
 
修改此项<VirtualHost _default_:443> 为 <VirtualHost 172.16.163.12:443>
  添加此项 ServerName
www.b.com
  添加此项 DocumentRoot "/var/www/b.com"
  把SSLCertificateFile /etc/pki/tls/certs/localhost.crt  改为httpd.crt文件所在目录
  SSLCertificateFile /etc/httpd/ssl/httpd.crt
  把SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 改为httpd.key所在目录
  SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
B15, 检测语法
   httpd -t
B16, 重启httpd 服务器
   service httpd restart
A17, 把CA证书传给物理主机一份,并安装
    cacert.pem  下载到物理主机 

A18, 把物理机上cacert.pem 改为cacert.crt ,此时证书图标将改变如图

 


A19, 双击并安装 ,安装到受信任的证书目录中

 

 


A20, 输入
https://www.b.com  

 


      到此结束 配置完成     !!!!

############################################### 

配置过程中遇到的错误总结:

  此次配置为了凸显出openssl的认证效果和简化其他次要的配置没有安装php, 而且使用了yum安装的方法装了httpd,这里和使用源码包安装的效果一样,完全可以实现。在配置结束验证https 的时候屡试不成功错误信息如下图:错误提示1  和 错误提示2 。 原因很简单因为我们没有装php,而默认默认主页是index.php 所以导致访问失败,

解决办法:  mv index.php  index.html       即可!!!