前言
在上一篇博客中我说明了,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). 测试
(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后导入到本机,效果如下
证书安装完成,我再测试一下效果,
这样所有过程测试完成!