一.https 简介
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。 也就是说它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
二.实现原理及流程
SSL协议的握手过程
为了便于更好的认识和理解SSL 协议,这里着重介绍SSL 协议的握手协议。SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:
①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
②服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于SSL 协议的安全数据通讯的加解密通讯。同时在SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
三.基于多ip站点的简介
实现同一台主机上添加多块网卡。配置多个服务器站点。实现原理是在httpd的服务器配置文件中添加多个虚拟主机。格式如下:
<VirtualHost 站点的ip地址:80>
//虚拟主机的框体,指明主机的ip地址及使用端口
ServerAdmin [email protected]
//指定管理员的邮箱
DocumentRoot /var/www/html
//当前站点名称为“www.abc.com”的服务器的主目录
ServerName www.abc.com
//当前站点名称为“www.abc.com”
ErrorLog logs/www_80_error_log
//当前站点的错误日志
CustomLog logs/www_80_access_log common
//当前站点的访问日志
</VirtualHost >
//虚拟主机的结束框体
四.实验案例
案例名: 在多ip的主机上实现加密传输
案例目的:实现同一个主机的多站点共存。并实现主目录能够不加密的简单访问,访问tec 及 mkt 站点需要使用加密的方式访问。
案例配置过程,如下:
1.安装httpd服务器
Yum install httpd
2.修改"/etc/httpd/conf"目录下的 httpd.conf 文件。
Vim /etc/httpd/conf/httpd.conf
编辑内容如下
134 Listen 192.168.10.244:80
//监听 192.168.10.244 网卡的 80 端口
985 <VirtualHost 192.168.10.244:80>
986 ServerAdmin [email protected]
987 DocumentRoot /var/www/html
988 ServerName www.abc.com
989 ErrorLog logs/www_80_error_log
990 CustomLog logs/www_80_access_log common
991 </VirtualHost>
3.创建站点主目录
Mkdir /var/www/etc
Cd /var/www/etc
Echo "welcome to my tec home " >>index.html
Mkdir /var/www/mkt
Cd /var/www/mkt
Echo "welcome to my mkt home " >>index.html
4.新建CA认证服务器
①.cd /etc/pki/CA/
//切换到CA的主目录
②.新建两个文件三个文件夹
mkdir certs crl newcerts
touch index.txt
touch serial
echo "01" >>serial
③. 生成密钥
openssl genrsa 1024 >private/cakey.pem
修改 密钥的权限
chmod 600 private/cakey.pem
④.创建自签名证书
openssl req -new -key private/cakey.pem -x509 -out cacert.pem -days 3650
5.生成服务器的密钥,请求文件,证书。
①.mkdir -pv /etc/httpd/certs
//新建密钥的目录
②.cd /etc/httpd/certs/
//切换到该目录
③.openssl genrsa 1024 >httpd.key
//生成密钥
④.openssl req -new -key httpd.key -out httpd.csr
//创建请求文件
⑤.openssl ca -in httpd.csr -out httpd.cert
//创建证书
6.安装mod_ssl
rpm -ivh mod_ssl-2.2.3-31.el5.i386.rpm
7. 修改"/etc/httpd/conf.d/"目录下的ssl.conf
Vim /etc/httpd/conf.d/ssl.conf
233 <VirtualHost 192.168.10.243:443>
234 DocumentRoot "/var/www/tec"
235 ServerName tec.cj.com:443
236 ErrorLog logs/tec_ssl_error_log
237 TransferLog logs/tec_ssl_access_log
238 LogLevel warn
239 SSLEngine on
240 SSLProtocol all -SSLv2
241 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
242 SSLCertificateFile /etc/httpd/certs/httpdtec.cert
243 SSLCertificateKeyFile /etc/httpd/certs/httpdtec.key
244 SSLCertificateChainFile /etc/pki/CA/cacert.pem
245 </VirtualHost>
246 <VirtualHost 192.168.10.242:443>
247 DocumentRoot "/var/www/mkt"
248 ServerName mkt.cj.com:443
249 ErrorLog logs/mkt_ssl_error_log
250 TransferLog logs/mkt_ssl_access_log
251 LogLevel warn
252 SSLEngine on
253 SSLProtocol all -SSLv2
254 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
255 SSLCertificateFile /etc/httpd/certs/httpdmkt.cert
256 SSLCertificateKeyFile /etc/httpd/certs/httpdmkt.key
257 SSLCertificateChainFile /etc/pki/CA/cacert.pem
258 </VirtualHost>
8.重新启动httpd服务
Service httpd restart
9.安装bind 服务器
Yum install bind
10.在"/var/named/chroot/etc"目录下创建并修改named.conf
15 listen-on port 53 { any; };
//开启监听的 53 端口
27 allow-query { any; };
//允许查询
28 allow-query-cache { any; };
//查询缓存
37 match-clients { any; };
//匹配主机
38 match-destinations { any; };
//目的匹配
11.在区域生命文件中添加区域记录
26 zone "cj.com" IN { //区域声明
27 type master;
28 file "cj.com.zone";
29 allow-update { none; };
30 };
32 zone "abc.com" IN { //区域声明
33 type master;
34 file "abc.com.zone";
35 allow-update { none; };
36 };
12.创建对应的区域文件
Cp -p localhost.zone abc.com.zone
Cp -p localhost.zone cj.com.zone
[root@donghao244 named]# vim cj.com.zone
$TTL 86400
@ IN SOA ns.cj.com. root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns.cj.com.
ns IN A 192.168.10.244
tec IN A 192.168.10.243
mkt IN A 192.168.10.242
[root@donghao244 named]# vim abc.com.zone
$TTL 86400
@ IN SOA ns.abc.com. root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns.abc.com.
ns IN A 192.168.10.244
www IN A 192.168.10.244
13.启动bind服务器
Service named restart
//重新启动dns 服务器
14.测试截图
安装证书
安装 CA 的自签名证书
查看访问的站点的证书
安装 CA 及 站点的证书
不加密形式主站点可以访问
不加密方式两个子站点不能访问
不能访问
五.实验总结
实验中的错误有
1.密钥的路径错误
编辑 Vim /etc/httpd/conf.d/ssl.conf
2.服务器未重启的错误
Service httpd restart
Service named restart
3.Ie浏览器未清空的错误
菜单栏上的“工具”---》“internat 选项”---》“浏览历史记录”---》勾选“退出时删除浏览历史记录”---》“删除”。勾选所有并应用推出。
4.本地dns缓存未清空
在window客户端使用“ipconfig /flushdns”