前言

在上一篇博客中我说明了,openssl的工作原理与私有CA的建立不懂的朋友可以去看一下(),下面我说一下基于openssl的https的配置!

1. https 的工作原理

首先我得简单的说一下https工作的基本原理,如下图

  • 首先,肯定是 client 向服务器发出请求,经过 tcp 的三次握手与 server 建立连接

  • 建立连接后,client 与 server 协商使用哪种加密方式加密

  • 协商完成后,server 发送证书给 client ,client 验证证书

  • 验证完成后,双方开始加密通信

从上面的过程当中我们可以看到,双方通信必须得有证书,那证书哪里来,从上图中我们可以看到, server 得向 CA 颁发机构申请,client 得信认 CA 机构,并下载CA证书公钥,至此 client 与 server 才开始通信!

2. 实验步骤

下面我说一下,实验的简单步骤,帮大家理清思路!

第一步,创建CA机构      

  修改配置文件      
  自己生成密钥      
  生成自签证书

第二步,Server端 (httpd)  

  生成一对密钥      
  生成证书颁发请求 --> *.csr 文件      
  将请求发给CA

第三步,CA机构    

  签署此证书      
  传送给客户端

至此CA申请完成,下面我说一下具体过程!

3. 具体过程如下

首先说一下实验环境(共三台主机),

192.168.18.211 CA 颁发机构(openssl)

192.168.18.212 Server服务器 (apache)

192.168.18.120 Windows 7 测试机 (IE浏览器)

======================================================================

创建私有CA机构 192.168.18.211

(1). 修改openssl配置文件

vim /etc/pki/tls/openssl.cnfdir = /etc/pki/CA #工作目录 ,此处需要指定,不然给客户到签证的时候必须在特定的目录下才能实现    certs = $dir/certs #客户端证书目录     crl_dir = $dir/crl #证书吊销列表     database = $dir/index.txt #证书记录信息new_certs_dir = $dir/newcerts #新生成证书的目录    certificate = $dir/cacert.pem #CA自己的证书位置     serial = $dir/serial #序列号     crlnumber = $dir/crlnumbe #证书吊销列表序列号crl = $dir/crl.pem #证书吊销列表文件    private_key = $dir/private/cakey.pem #CA自己的私钥     RANDFILE = $dir/private/.rand #随机数文件[ req_distinguished_name ]    countryName                     = Country Name (2 letter code)     countryName_default             = CN #国家     countryName_min                 = 2     countryName_max                 = 2stateOrProvinceName             = State or Province Name (full name)    stateOrProvinceName_default     = shanghai #省份localityName                    = Locality Name (eg, city)    localityName_default            = xuhui #地区0.organizationName              = Organization Name (eg, company)    0.organizationName_default      =          #公司organizationalUnitName          = Organizational Unit Name (eg, section)organizationalUnitName_default  =Tech #部门:wq #保存退出

(2). 生成密钥与证书

cd /etc/pki/CA  (umask 077; openssl genrsa -out private/cakey.pem 2048) #生成密钥   openssl req -new -x509 -key private/cakey.pem -out cacert.pem #生成自签证书

mkdir certs newcerts crl #建立相关的目录   touch index.txt   touch serial #建立序列号文件   echo 01 > serial #写入起始序列号

===============================================================================

安装与配置 Apache 服务器 192.168.18.212

(1). 安装 Apache

yum install –y httpd*

(2). 启动Apache

service httpd start

(3). 测试

2

(4). 申请CA证书

cd /etc/httpd #web服务器的配置目录  mkdir ssl #创建ssl目录   cd ssl #每一种服务要想使用证书,必须有私钥,每一种应用都需要自己的证书   (umask 077; openssl genrsa -out httpd.key 1024)#给自己生成密钥   openssl req -new -key httpd.key -out httpd.csr #证书签署请求文件,机构和其他名字必须和CA颁发机构上的一样

scp ./httpd.csr root@192.168.18.211:/tmp #将证书申请发送到CA颁发机构上

(5). CA 颁发机构签名并签发    

openssl ca -in httpd.csr -out httpd.crt -days 3650 #CA签名,签名以后才可以使用

(6). 将生成的证书发送给Server

scp ./httpd.crt root@192.168.18.212:/etc/httpd/ssl/httpd.crt

(7). 安装httpd和ssl联系的装载模块mod_ssl

yum install mod_ssl #安装service httpd restart #重启服务

修改ssl配置文件

vim /etc/httpd/conf.d/ssl.conf主要内容如下:LoadModule ssl_module modules/mod_ssl.so-装载配置模块  Listen 443--监听443端口   AddType application/x-x509-ca-cert .crt 增加支持证书   AddType application/x-pkcs7-crl .crl 增加识别证书吊销列表   SSLPassPhraseDialog builtin //ssl生成阶段的会话机制   SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) 缓存空间   SSLSessionCacheTimeout 300 缓存时长   
--定义虚拟主机 ServerName NAME ---虚拟主机的名字 DocumentRoot ----文件路径 ErrorLog logs/ssl_error_log --错误日志 TransferLog logs/ssl_access_log --ssl的登陆日志 LogLevel warn ---日志级别 SSLEngine on ---启用或关闭ssl工具 SSLProtocol all -SSLv2---支持的协议 SSLCertificateFile /etc/pki/tls/certs/localhost.crt--证书文件全路径 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key--证书私钥全路径其中两项我们得修改一下:SSLCertificateFile /etc/httpd/ssl/httpd.crt #证书SSLCertificateKeyFile /etc/httpd/ssl/httpd.key #私钥httpd –t #检查配置文件service httpd restart #重启服务器

===============================================================================

测试效果:

(1). IE 访问

#效果如下

因为我们这里没有CA服务器的证书,所以浏览器会发出警告,下面我们安装一下证书!

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

证书安装完成,我再测试一下效果,

这样所有过程测试完成!