您的位置:首页 > 理论基础 > 计算机网络

利用https实现站点访问

2012-08-21 19:29 501 查看
一、https的简介
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议。它是由 Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。。
https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL,因此加密的详细内容请看SSL。
它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
HTTPS和HTTP的区别  
1、https协议需要到ca申请证书,一般免费证书很少,需要交费。
2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。   
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。   
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
二、SSL的简介
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL的认证过程
1、客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;
2、服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息
3、客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
4、服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。示意图如下:




三、实验步骤
安装httpd软件包
[root@localhost Server]#rpm -ivh httpd-2.2.3-31.el5.i386.rpm
在站点目录创建一个小的测试页面
[root@localhost html]# echo "I am glad to see you! " >index.html
配置颁发证书的根机构
vim /etc/pki/tls/openssl.cnf
45 dir = /etc/pki/CA # 证书所在的位置
46 certs = $dir/certs # 已经发行证书存放的位置
47 crl_dir = $dir/crl # 证书吊销列表存放的位置
48 database = $dir/index.txt # 数据库索引文件存放的位置
51 new_certs_dir = $dir/newcerts # 新发行的证书的位置
53 certificate = $dir/cacert.pem # 发证机关的证书的位置
54 serial = $dir/serial # 第一份证书序列号
58 private_key = $dir/private/cakey.pem # 产生私钥的位置
根证书的国家,省份的信息不需要与申请证书的机构匹配,改为可选择的设置
89 countryName = optional #match改为optional
90 stateOrProvinceName = optional
91 organizationName = optional
修改颁发机构的默认信息
135 [ req_distinguished_name ]
136 countryName = Country Name (2 letter code)
137 countryName_default = CN #默认国家是中国
141 stateOrProvinceName = State or Province Name (full name)
142 stateOrProvinceName_default = HENAN #默认省份河南
144 localityName = Locality Name (eg, city)
145 localityName_default = ZHENGZHOU #默认城市郑州
在CA目录下创建三个目录两个文件
[root@localhost CA]# mkdir crl certs newcerts
[root@localhost CA]# touch index.txt serial
颁发的证书的序列号码从01开始
[root@localhost CA]# echo "01" >serial
为证书颁发机构产生钥匙,并重定向到private目录下的cakey.pem文件中,钥匙长度为1024位
[root@localhost CA]# openssl genrsa 1024 >private/cakey.pem
修改文件权限,确保钥匙的安全,其他用户没有权限
[root@localhost CA]# chmod 600 private/*
产生密钥 #–new表示新的钥匙 –x509表示一种格式
[root@localhost CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem -days 3650
Country Name (2 letter code) [CN]:
State or Province Name (full name) [HENAN]:
Locality Name (eg, city) [ZHENGZHOU]:
Organization Name (eg, company) [My Company Ltd]:SECCENTER
Organizational Unit Name (eg, section) []:TEC
Common Name (eg, your name or your server's hostname) []:rootca.net.net
#根机构的全称
Email Address []:
Web服务器的配置
创建存放私有钥匙,证书等信息的目录
mkdir -pv /etc/httpd/certs
产生钥匙
cd /etc/httpd/certs/
openssl genrsa 1024 >httpd.key
向根机构请求证书,
[root@localhost certs]# openssl req -new -key httpd.key -out httpd.csr
Country Name (2 letter code) [CN]:
State or Province Name (full name) [HENAN]:
Locality Name (eg, city) [ZHENGZHOU]:
Organization Name (eg, company) [My Company Ltd]:zzyy
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:www.zzyy.com
Email Address []:
利用请求,得到证书
[root@localhost certs]# openssl ca -in httpd.csr -out httpd.cert
Web服务器申请证书信息
Subject:
countryName = CN
stateOrProvinceName = HENAN
organizationName = zzyy
organizationalUnitName = tec
commonName = www.zzyy.com
修改钥匙证书所在目录的权限,保证信息的安全
[root@localhost certs]# chmod 600 *
安装加密通讯的软件包
yum -y install mod_ssl-2.2.3-31.el5.i386.rpm
cd /etc/httpd/conf.d/
vim ssl.conf
Web服务器出示证书的位置
112行 SSLCertificateFile /etc/httpd/certs/httpd.cert
出示私钥的位置
119行 SSLCertificateKeyFile /etc/httpd/certs/httpd.key
证书路径
128行SSLCertificateChainFile /etc/pki/CA/cacert.pem
查看开启的http相关的端口
[root@localhost conf.d]# netstat -tupln |grep http
tcp 0 0 :::80 :::* LISTEN 2354/httpd
tcp 0 0 :::443 :::* LISTEN 2354/httpd
启动web服务器的httpd服务
service httpd start
四、客户端测试
1. 非加密的http访问




2.加密的https访问方式




查看证书内容




信任并安装根机构的证书,然后https访问




为了只支持密文访问站点,关闭明文访问使用端口80
vim /etc/httpd/conf/httpd.conf
#Listen 80 #注释80端口

重启服务

service httpd restart

明文方式无法访问




密文方式依然可以访问web服务器


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  加密 http https ssl 密钥