正文

利用https实现站点访问2012-11-24 11:37:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/edwardguo/53904.html

分享到:

一、https的简介

HTTPSSecure Hypertext Transfer Protocol)安全超文本传输协议。它是由 Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPSSSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。。

https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL,因此加密的详细内容请看SSL

它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTPTCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

HTTPSHTTP的区别

1https协议需要到ca申请证书,一般免费证书很少,需要交费。

2http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

3httphttps使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

4http的连接很简单,是无状态的;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

证书路径

128SSLCertificateChainFile /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服务器


阅读(2824) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册